{"id":23131328,"url":"https://github.com/emartech/suite-js-sdk","last_synced_at":"2026-04-15T10:01:15.854Z","repository":{"id":28202563,"uuid":"31704987","full_name":"emartech/suite-js-sdk","owner":"emartech","description":"Simple Javascript wrapper for the Emarsys API","archived":false,"fork":false,"pushed_at":"2026-04-13T15:06:45.000Z","size":1814,"stargazers_count":9,"open_issues_count":10,"forks_count":32,"subscribers_count":30,"default_branch":"main","last_synced_at":"2026-04-13T17:26:18.396Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emartech.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-03-05T09:03:53.000Z","updated_at":"2026-04-08T07:54:02.000Z","dependencies_parsed_at":"2025-11-28T17:09:31.319Z","dependency_job_id":null,"html_url":"https://github.com/emartech/suite-js-sdk","commit_stats":{"total_commits":429,"total_committers":65,"mean_commits":6.6,"dds":0.7575757575757576,"last_synced_commit":"5edeef4c4ff32b73dd05db4e15a78501cce1d597"},"previous_names":[],"tags_count":187,"template":false,"template_full_name":null,"purl":"pkg:github/emartech/suite-js-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emartech%2Fsuite-js-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emartech%2Fsuite-js-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emartech%2Fsuite-js-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emartech%2Fsuite-js-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emartech","download_url":"https://codeload.github.com/emartech/suite-js-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emartech%2Fsuite-js-sdk/sbom","scorecard":{"id":251908,"data":{"date":"2025-08-11","repo":{"name":"github.com/emartech/suite-js-sdk","commit":"5764688936ebb4f4ea7397f0d4ca59c4c529f5bb"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":2,"reason":"3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":5,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'master'","Info: 'force pushes' disabled on branch 'master'","Info: 'branch protection settings apply to administrators' is required to merge on branch 'master'","Info: 'stale review dismissal' is required to merge on branch 'master'","Warn: required approving review count is 1 on branch 'master'","Warn: codeowners review is required - but no codeowners file found in repo","Warn: 'last push approval' is disabled on branch 'master'","Info: 'up-to-date branches' is required to merge on branch 'master'","Info: status check found to merge onto on branch 'master'","Info: PRs are required in order to make changes on branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/emartech/.github/SECURITY.md:1","Info: Found linked content: github.com/emartech/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/emartech/.github/SECURITY.md:1","Info: Found text in security policy: github.com/emartech/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":0,"reason":"10 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-h5c3-5r3r-rr8q","Warn: Project is vulnerable to: GHSA-rmvr-2pp2-xj38","Warn: Project is vulnerable to: GHSA-xx4v-prfh-6cgc","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T08:40:17.118Z","repository_id":28202563,"created_at":"2025-08-17T08:40:17.119Z","updated_at":"2025-08-17T08:40:17.119Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31835820,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T07:17:56.427Z","status":"ssl_error","status_checked_at":"2026-04-15T07:17:30.007Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-17T11:12:39.701Z","updated_at":"2026-04-15T10:01:15.846Z","avatar_url":"https://github.com/emartech.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# suite-js-sdk\n\nSimple Javascript wrapper for the Emarsys API.\n\n\u003e Important: This library does not support WSSE authentication. It is intended only to be used by Emarsys add-ons and internal services.\n\n## Installation\n\n    npm install --save suite-js-sdk\n\n## Testing\n\n    npm test\n\n## Release\n\nReleases are automatized with semantic-release. Whether a release is triggered, and whether it is major, minor, or patch increase, is based the on commit message, follow the [conventions](https://github.com/semantic-release/semantic-release#commit-message-format).\n\n## Emarsys API Hint\n\nThis wrapper tries to implement all available methods of the Emarsys API in a\nnode fashion, exposing a **Promise-only interface**.\n\nHowever, the Emarsys API lacks a decent amount of methods that you expect an API to provide.\nThus, if methods are missing or a certain implementation\nstyle was chosen it is most likely due to the inconsistency of the API itself.\nFeel free to get in touch or submit a pull request if you encounter any problems.\n\n## Configuration and Setup\n\n### Debug\n\nIf you want to debug. Set your environment variables\n\n    DEBUG=suite-sdk,suiterequest\n\n## Authentication middleware\n\n### Prerequisites\n\nThe koa bodyparser module should be installed and in use **before** the use of\nthe koaMiddleware.\n\n    npm install koa-bodyparser -S\n\nIn application configuration:\n\n    var bodyParser = require('koa-bodyparser');\n\n    var app = koa();\n    app.use(bodyParser());\n\n### Configuration\n\nSet your environment variables\n\n    SUITE_ESCHER_SECRET=yourEscherSecret\n    SUITE_ESCHER_CREDENTIAL_SCOPE=yourEscherCredentialScope\n\n### Usage\n\n    var middleware = require('suite-js-sdk').authentication.koaMiddleware.getMiddleware();\n\nIf the authentication fails it throws an error with 401 code.\nIf the authentication success it decorates the request with a validatedData property. It contains the signed parameters.\n\n## Translation middleware\n\n### Configuration\n\n    var middleware = require('suite-js-sdk').translations.koaMiddleware.decorateRenderWithTranslations();\n\nThe middleware use 'validatedData' from the request. 'validatedData' must contain an 'environment' property.\nIf you want to load an admins language then 'validatedData' must contain a 'customer_id' and an 'admin_id' properties.\nIf you want to load a specific language then 'validatedData' must contain a 'language' property.\n\n### Usage\n\nMiddleware decorates the render method. It will add 'translations' object as render data. It also adds a '_' method as render data. So you can use it for translations.\n\n    translations = {\n        dialogs: {\n            invitation: {\n                confirmation: {\n                    message: 'test string with %s and with %s'\n                }\n            }\n        }\n    }\n\n\nin your jade file\n\n    p.message= _('dialogs.invitation.confirmation.message', [ 'firstParameter', 'second parameter'])\n\n## Interacting with the API\n\n### Authentication\n\nAuthenticate with the api credentials provided by your Emarsys account manager.\n\nSet your environment variables\n\n    SUITE_API_KEY=yourApiKey\n    SUITE_API_SECRET=yourSecretKey\n\n\nAfter in your Codebase\n\n    var SuiteAPI = require('suite-js-sdk').api;\n    var suiteAPI = SuiteAPI.create(options);\n\n#### Options\n\n* `{String} customerId`: the id of the customer\n* `{String} apiKey`: API key\n* `{String} apiSecret`: API secret\n* `{String} environment`: API environment\n\n### SDK methods\n\nEach of the following methods take a last `options` parameter as a last argument. With\nthis options set you can override the `customerId`, `escherOptions`, etc. that you had defined when created an\ninstance from the API client, like:\n\n\n    var SuiteAPI = require('suite-js-sdk').api;\n    var suiteAPI = SuiteAPI.create({\n       customerId: 1083232\n    });\n\n    suiteAPI.administrator.getAdministrators({}, {\n        customerId: 20234245\n    });\n\nIn the example above, the API will be called with `customerId = 20234245`.\n\n#### Administrators\n\n##### [List](https://dev.emarsys.com/v2/accounts/list-administrator-accounts)\n\n    suiteAPI.administrator.getAdministrators(payload, options);\n\n##### Get By Name\n\nData of an admin can be queried by providing its name.\n\n    suiteAPI.administrator.getAdministratorByName(payload, options);\n\n##### [Patch](https://dev.emarsys.com/v2/accounts/update-an-administrator-account)\n\n    suiteAPI.administrator.patchAdministrator(payload, options);\n\n##### [Create](https://dev.emarsys.com/v2/accounts/create-an-administrator-account)\n\n    suiteAPI.administrator.createAdministrator(payload, options);\n\n##### [Delete]()\n\n    suiteAPI.administrator.deleteAdministrator(payload, options);\n\n##### Disable\n\nChanges the status of the admin to disabled so logging in will not be possible.\n\n    suiteAPI.administrator.disableAdministrator(payload, options);\n\n##### Enable\n\nChanges the status of the disabled admin back to enabled so logging in becomes possible.\n\n    suiteAPI.administrator.enableAdministrator(payload, options);\n\n##### [Get Interface Languages](https://dev.emarsys.com/v2/accounts/get-user-interface-languages)\n\n    suiteAPI.administrator.getInterfaceLanguages(payload, options);\n\n##### [Get Start Pages](https://dev.emarsys.com/v2/accounts/list-administrator-start-pages)\n\nReturns the start pages of an administrator.\n\n    suiteAPI.administrator.getStartPages(payload, options);\n\n##### [Get Access Levels](https://dev.emarsys.com/v2/accounts/list-access-levels)\n\n    suiteAPI.administrator.getAccessLevels(payload, options);\n\n##### Promote to Superadmin\n\nLevels up an admin to a superadmin.\n\n    suiteAPI.administrator.promoteToSuperadmin(payload, options);\n\n##### Create Superadmin\n\nCreates a superadmin.\n\n    suiteAPI.administrator.createSuperadmin(payload, options);\n\n##### Invite Existing Administrator\n\nSets the status of the admin to disabled and invites the admin again. The admin can log in only after completing the\nnecessary data on the invitation form.\n\n    suiteAPI.administrator.inviteExistingAdministrator(payload, options);\n\n#### AutomationCenter\n\n##### [ProgramResource](https://dev.emarsys.com/v2/programs/list-program-resources-in-use)\n\n    suiteAPI.automationCenter.programResource(payload, options);\n\n##### [ProgramsEntrypoints](https://dev.emarsys.com/v2/programs/start-program)\n\n    suiteAPI.automationCenter.programsEntrypoints(payload, options);\n\n#### Campaign\n\n##### create\n\n    suiteAPI.campaign.create(payload, options);\n\n##### update\n\n    suiteAPI.campaign.update(payload, options);\n\n#### Condition\n\n##### List\n\n    suiteAPI.condition.list(payload, options);\n\n##### List with contact fields\n\n    suiteAPI.condition.listWithContactFields(payload, options);\n\n#### Contact\n\n##### [GetData](https://dev.emarsys.com/v2/contacts/get-contact-data)\n\n    suiteAPI.contact.getData(payload, options);\n\nTo return the contacts with string field ids, specify `{ stringIds: true }` in the options.\n\n    suiteAPI.contact.getData(payload, { stringIds: true });\n\n##### [Create](https://dev.emarsys.com/v2/contacts/create-contacts)\n\n    suiteAPI.contact.create(payload, options);\n\n##### Merge\n\n    suiteAPI.contact.merge(payload, options);\n\n##### [Update](https://dev.emarsys.com/v2/contacts/update-contacts)\n\n    suiteAPI.contact.update(payload, options);\n\n##### [Create or update](https://dev.emarsys.com/v2/contacts/update-contacts)\n\n    suiteAPI.contact.createOrUpdate(payload, options);\n\n##### [Delete](https://dev.emarsys.com/v2/contacts/delete-contact)\n\n    suiteAPI.contact.delete(payload, options);\n\n##### [Check IDs](https://dev.emarsys.com/v2/contacts/verify-contact-internal-identifiers)\n\n    suiteAPI.contact.checkIds(payload, options);\n\n##### [Query Field Changes](https://dev.emarsys.com/v2/fields/query-field-changes)\n\n    suiteAPI.contact.lastChange(payload, options);\n\n#### Contact List\n\n##### [Create](https://dev.emarsys.com/v2/contact-lists/create-a-contact-list)\n\n    suiteAPI.contactList.create(payload, options);\n\n##### [List](https://dev.emarsys.com/v2/contact-lists/list-contact-lists)\n\n    suiteAPI.contactList.list(payload, options);\n\n##### [Fetch](https://dev.emarsys.com/docs/core-api-reference/20nck8oujcus8-fetch-contacts-in-a-contact-list)\n\n    suiteAPI.contactList.fetch(payload, options);\n\n##### [Add](https://dev.emarsys.com/v2/contact-lists/add-contacts-to-a-contact-list)\n\n    suiteAPI.contactList.add(payload, options);\n\n##### [ListContactLists](https://dev.emarsys.com/v2/contact-lists/list-contact-lists)\n\n    suiteAPI.contactList.listContactLists(payload, options);\n\n##### [Count](https://dev.emarsys.com/v2/contact-lists/count-contacts-in-a-contact-list)\n\n    suiteAPI.contactList.count(payload, options);\n\n##### [GetContactsData](https://dev.emarsys.com/v2/contact-lists/get-contact-data-in-a-contact-list)\n\n    suiteAPI.contactList.getContactsData(payload, options);\n\n##### [DeleteList](https://dev.emarsys.com/v2/contact-lists/delete-a-contact-list)\n\n    suiteAPI.contactList.deleteList(payload, options);\n\n#### ExternalEvent\n\n##### [Create](https://dev.emarsys.com/v2/events/create-an-external-event)\n\n    suiteAPI.externalEvent.create(payload, options);\n\n##### [List](https://dev.emarsys.com/v2/events/list-external-events)\n\n    suiteAPI.externalEvent.list(payload, options);\n\n##### [Get Event Details](https://dev.emarsys.com/v2/events/list-external-events)\n\n    suiteAPI.externalEvent.get(payload, options);\n\n##### [Update](https://dev.emarsys.com/v2/events/update-an-external-event)\n\n    suiteAPI.externalEvent.update(payload, options);\n\n##### [Delete](https://dev.emarsys.com/v2/events/delete-an-external-event)\n\n    suiteAPI.externalEvent.delete(payload, options);\n\n##### [Trigger](https://dev.emarsys.com/v2/events/trigger-external-events)\n\n    suiteAPI.externalEvent.trigger(payload, options);\n\n#### Language\n\n##### Translate\n\nLists available languages for a customer in the customer's own language.\n\n    suiteAPI.language.translate(payload, options);\n\n#### Settings\n\n##### [Get](https://dev.emarsys.com/v2/accounts/get-customer-settings)\n\n    suiteAPI.settings.getSettings(payload, options);\n\n##### Get Corporate Domains\n\nLists the permitted corporate domains of the customer. If corporate domains are set, registration is possible only with\nthose email addresses which meet these requirements.\n\n    suiteAPI.settings.getCorporateDomains(payload, options);\n\n##### Set Corporate Domains\n\nAccepted corporate domains can be defined.\n\n    suiteAPI.settings.setCorporateDomains(payload, options);\n\n##### Get IP Restrictions\n\nLists the permitted IP address rules (e.g. 192.168.* allows IP addresses which start with these two numbers and can end\nin any numbers).\n\n    suiteAPI.settings.getIpRestrictions(payload, options);\n\n##### Set IP Restrictions\n\nPossible IP address rules can be defined.\n\n    suiteAPI.settings.setIpRestrictions(payload, options);\n\n##### Get available languages\n\n    suiteAPI.settings.getLanguages(payload, options);\n\n##### Get security settings\n\nGet security settings (IP whitelisting enabled option)\n\n    suiteAPI.settings.getSecuritySettings(payload, options);\n\n##### Set security settings\n\nSet security settings (IP whitelisting enabled option)\n\n    suiteAPI.settings.setSecuritySettings(payload, options);\n\n##### Get sender domains\n\n    suiteAPI.settings.getDeliverabilitySenderDomains(payload, options);\n\n##### Set sender domain\n\n    suiteAPI.settings.setDeliverabilitySenderDomain(payload, options);\n\n#### Email\n\n##### [Create](https://dev.emarsys.com/v2/email-campaigns/create-an-email-campaign)\n\n    suiteAPI.email.create(payload, options);\n\n##### [Copy](https://dev.emarsys.com/v2/email-campaigns/copy-an-email-campaign)\n\n    suiteAPI.email.copy(payload, options);\n\n##### [Update source](https://dev.emarsys.com/v2/email-campaigns/update-an-email-campaign-recipient-source)\n\n    suiteAPI.email.updateSource(payload, options);\n\n##### [Launch](https://dev.emarsys.com/v2/email-campaign-life-cycle/launch-an-email-campaign)\n\n    suiteAPI.email.launch(payload, options);\n\n##### [Launch list](https://dev.emarsys.com/v2/email-campaign-life-cycle/list-email-campaign-launches)\n\n    suiteAPI.email.launchList(payload, options);\n\n##### [List](https://dev.emarsys.com/v2/email-campaigns/list-email-campaigns)\n\n    suiteAPI.email.list(payload, options);\n\n##### [Get](https://dev.emarsys.com/v2/email-campaigns/get-email-campaign-data)\n\n    suiteAPI.email.get(payload, options);\n\n##### [Patch](https://dev.emarsys.com/v2/email-campaigns/update-an-email-campaign)\n\n    suiteAPI.email.patch(payload, options);\n\n##### [Sending a Test Email](https://dev.emarsys.com/v2/email-campaign-life-cycle/send-a-test-email)\n\n    suiteAPI.email.sendTestMail(payload, options);\n    \n##### [Broadcast an email to virtual contact](https://dev.emarsys.com/v2/email-campaign-life-cycle/launch-an-email-campaign-to-virtual-contacts)\n\nThe payload must contain an `email_id`, which is the broadcast campaign id\n\n    suiteAPI.email.broadcast(payload, options);\n\n##### [Delivery Status](https://dev.emarsys.com/v2/email-campaign-life-cycle/query-delivery-status)\n\n    suiteAPI.email.getDeliveryStatus(payload, options);\n\n##### [Response](https://dev.emarsys.com/v2/email-campaign-life-cycle/get-email-response-metrics-and-deliverability-results)\n\n    suiteAPI.email.responses(payload, options);\n\n##### [getResponseSummary](https://dev.emarsys.com/v2/email-campaign-life-cycle/get-a-response-summary)\n\nReturns the summary of the responses of a launched, paused, activated or deactivated email campaign.\n\n    suiteAPI.email.getResponseSummary(payload, options);\n\n##### Querying Email Personalizations\n\nLists all possible alternate texts with their email campaigns. Alternate texts are defined for a specific field, and\ndisplayed in the email campaign if this field has no value.\n\n    suiteAPI.email.getPersonalizations(payload, options);\n\n##### Updating Email Personalizations\n\nUpdates alternate texts.\n\n    suiteAPI.email.setPersonalizations(payload, options);\n\n##### [Creating a Tracked Link](https://dev.emarsys.com/v2/tracked-links/create-a-tracked-link-in-an-email-campaign)\n\n    suiteAPI.email.createTrackedLink(payload, options);\n\n##### [Querying Tracked Links](https://dev.emarsys.com/v2/tracked-links/list-tracked-links-in-an-email-campaign)\n\n    suiteAPI.email.getTrackedLinks(payload, options);\n\n##### [Updating a Tracked Link](https://dev.emarsys.com/v2/tracked-links/update-a-tracked-link-in-an-email-campaign)\n\n    suiteAPI.email.updateTrackedLink(payload, options);\n\n##### [Deleting Tracked Links](https://dev.emarsys.com/v2/tracked-links/delete-a-tracked-link-in-an-email-campaign)\n\n    suiteAPI.email.deleteTrackedLinks(payload, options);\n\n##### [Export contact list](http://documentation.emarsys.com/resource/developers/endpoints/exporting-data/export-list/)\n\n    suiteAPI.email.getContacts(payload, options);\n\n##### [Deleting Tracked Links](https://documentation.emarsys.com/resource/developers/endpoints/email/delete-all-links/)\n\n    suiteAPI.email.deleteTrackedLinksBySource(payload, options);\n\n##### [Listing Programs Email is used in](https://documentation.emarsys.com/resource/developers/endpoints/email/programs/)\n\n    suiteAPI.email.listPrograms(payload, options);\n\n#### Segment\n\n##### [List contacts](https://dev.emarsys.com/v2/contact-and-email-data/export-a-contact-list)\n\n    suiteAPI.segment.listContacts(payload, options);\n\n##### [Count contacts](https://dev.emarsys.com/v2/segments/count-contacts-in-a-segment)\n\n    suiteAPI.segment.countContacts(payload, options);\n\n##### [List segments](https://dev.emarsys.com/v2/segments/list-segments)\n\n    suiteAPI.segment.listSegments(payload, options);\n\n##### [Get Segment](https://dev.emarsys.com/v2/segments/list-segments)\n\n    suiteAPI.segment.getSegment(payload, options);\n\n##### [Create new segment](https://dev.emarsys.com/v2/segments/create-a-segment)\n\n    suiteAPI.segment.create(payload, options);\n\n##### [Querying contact criteria of a segment](https://dev.emarsys.com/v2/segments/get-segment-contact-criteria)\n\n    suiteAPI.segment.getContactCriteria(payload, options);\n\n##### [Updating contact criteria of a segment](https://dev.emarsys.com/v2/segments/update-contact-criteria-in-a-segment)\n\n    suiteAPI.segment.updateContactCriteria(payload, options);\n\n##### [Run Segment for Single Contact](https://dev.emarsys.com/v2/segments/run-a-contact-segment-single)\n\n    suiteAPI.segment.runForSingleContact(payload, options);\n\n##### [Get Segment Run Status for Single Contact](https://dev.emarsys.com/v2/segments/poll-the-status-of-contact-segment-single)\n\n    suiteAPI.segment.singleContactRunStatus(payload, options);\n\n##### [Run Segment for Multiple Contacts](https://dev.emarsys.com/v2/segments/run-a-contact-segment-batch)\n\n    suiteAPI.segment.runForMultipleContacts(payload, options);\n\n##### [Get Segment Run Status for Multiple Contacts](https://dev.emarsys.com/v2/segments/poll-the-status-of-a-segment-run-for-multiple-contacts)\n\n    suiteAPI.segment.multipleContactsRunStatus(payload, options);\n\n#### Combined Segment\n\n##### [List combined segments](https://dev.emarsys.com/v2/segments/list-combined-segments)\n\n    suiteAPI.combinedSegment.list(payload, options);\n\n##### [Create new combined segment](https://documentation.emarsys.com/resource/developers/endpoints/contacts/create-combined-segment/)\n\n    suiteAPI.combinedSegment.create(payload, options);\n\n##### [Querying a combined segment](https://dev.emarsys.com/v2/segments/create-a-combinde-segment)\n\n    suiteAPI.combinedSegment.get(payload, options);\n\n##### [Updating a combined segment](https://dev.emarsys.com/v2/segments/update-a-combined-segment)\n\n    suiteAPI.combinedSegment.update(payload, options);\n\n#### Purchases\n\n##### List\n\nLists the purchases of customer for a date range.\n\n    suiteAPI.purchase.list(payload, options);\n\n##### Stats\n\nStatistics about the purchases of customer.\n\n    suiteAPI.purchase.stats(payload, options);\n\n#### Contact Fields\n\n##### [Create](http://documentation.emarsys.com/resource/developers/endpoints/contacts/create-field/)\n\n    suiteAPI.field.create(payload, options);\n\n##### [Listing Available Fields](https://dev.emarsys.com/v2/fields/list-available-fields)\n\n    suiteAPI.field.get(payload, options);\n\n##### [Listing Available Fields Choices](https://dev.emarsys.com/v2/fields/list-available-choices-of-a-single-field)\n\n    suiteAPI.field.getChoices(payload, options);\n\n##### [Listing Available Fields Choices for multiple fields](https://dev.emarsys.com/v2/fields/list-available-choices-of-multiple-field)\n\n    suiteAPI.field.getMultipleChoices(payload, options);\n\n##### [Delete Field](https://dev.emarsys.com/docs/emarsys-api/9b5653c65052b-delete-a-field)\n\n    suiteAPI.field.delete(payload, options);\n\n#### Export\n\n##### [Downloading export data](https://dev.emarsys.com/v2/contact-and-email-data/download-export-data)\n\n    suiteAPI.export.getData(payload, options);\n\n##### [Get Changes](https://help.emarsys.com/hc/en-us/articles/115004497073)\n\n    suiteAPI.export.getChanges(payload, options);\n\n#### Keyring\n\nManage customer PKI options\n\n##### list\n\n    suiteAPI.keyring.list(payload, options);\n\n##### get\n\n    suiteAPI.keyring.get(payload, options);\n\n##### create\n\n    suiteAPI.keyring.create(payload, options);\n\n##### delete\n\n    suiteAPI.keyring.delete(payload, options);\n\n#### Contact Sources\n\n##### [Create](https://dev.emarsys.com/v2/contact-sources/create-a-contact-source)\n\n  suiteAPI.source.create(payload, options);\n\n##### [Listing Sources](https://dev.emarsys.com/v2/contact-sources/list-contact-sources)\n\n  suiteAPI.source.listSources(payload, options);\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femartech%2Fsuite-js-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femartech%2Fsuite-js-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femartech%2Fsuite-js-sdk/lists"}