Download OpenAPI specification:Download
It is a RESTful API for advanced developers that make use of HTTP client to communicate with the SalesCatalysts.com servers. Major functions on the SalesCatalysts.com GUI are mapped to the APIs listed below, so the functionality of using the GUI and API are similar.
apikey
/oauth2/login
code
as the query parameter./oauth2/token
to get the access token./oauth2/login
will return a login page that asks user to login./oauth2/auth
/oauth2/auth
with the login credentials./oauth2/token
with the code and other parameters to get the access token./oauth2/token
and provide the refresh token and other parameters.Login to API server to grant OAuth2 permission. The API returns a callback URI with an OAuth2 code. You'll need this code to get the OAuth2 token. Users will be redirected to the specified URL for getting the token. You should setup your own API callback endpoint that accepts code
as the query parameter. The API should be able to send another POST request to /oauth2/token
. See below for further explanation.
client_id required | string client Id used when registering oauth secret |
user_login required | string <email> login email |
user_password required | string <password> login password |
timezone | string Default: "Asia/Hong_Kong" Timezone code |
{- "client_id": "your_client_id",
- "user_login": "example@example.com",
- "user_password": "example_password",
- "timezone": "Asia/Hong_Kong"
}
{
}
return a login page that asks user to login, and end user will then be automatically redirected to the API endpoint that you have specified
clientId required | string client Id to identify your application, and get this Id in our system settings page |
lang | string Default: "en" display language and supported language: |
Get the OAuth2 access token. The API returns an access token that is used in all API requests. All tokens will be expired in 7200 seconds.
client_id required | string client Id to identify your App. Get this ID in our CRM system settings |
client_secret required | string client secret. Get this secret in our CRM system settings |
grant_type required | string Value: "authorization_code" OAuth2 Grant Type. Specify the code type you're using. Fill in |
code required | string The authorization code. This should be returned from our server to your redirect URI endpoint. |
{- "client_id": "example_app",
- "client_secret": "example_secret",
- "grant_type": "authorization_code",
- "code": "exmaple_code"
}
{- "refresh_token": "example_refresh_token",
- "token_type": "bearer",
- "access_token": "example_access_token",
- "expires_in": "7200"
}
sortby | string Default: "lastModifiedTime" Sorting field |
order | string Default: "DESC" Sorting order |
offset | integer Default: 0 pagination offset |
limit | integer Default: 10 pagination limit |
search | string keyword search |
{- "count": 2,
- "results": [
- {
- "id": "a40ce6f1-c624-43f0-9371-2255344878e1",
- "name": "Mr. example 1",
- "email": "test1@example.com",
- "emailBounceStatus": "soft",
- "emailSubscribe": true,
- "phoneSubscribe": true,
- "rating": 2,
- "starred": false
}, - {
- "id": "a40ce6f1-c624-43f0-9371-2255344878e2",
- "name": "Mr. example 2",
- "email": "test2@example.com",
- "emailBounceStatus": "hard",
- "emailSubscribe": true,
- "phoneSubscribe": false,
- "rating": 2,
- "starred": false
}
]
}
Array of objects You can include more fields that created in the platform. For details, please contact us at support@salescatalysts.com |
{- "contacts": [
- {
- "id": "a40ce6f1-c624-43f0-9371-2255344878eb",
- "name": "Mr. example",
- "email": "test@example.com",
- "mobile": {
- "countryCode": "852",
- "phoneNumber": "98765432"
}
}
]
}
{- "updated": 16
}
Array of objects You can include more fields that created in the platform. For details, please contact us at support@salescatalysts.com |
{- "contacts": [
- {
- "id": "a40ce6f1-c624-43f0-9371-2255344878eb",
- "name": "Mr. example",
- "email": "test@example.com",
- "mobile": {
- "countryCode": "852",
- "phoneNumber": "98765432"
}
}
]
}
{- "updated": 1
}
id required | string <uuid> (id) Example: a40ce6f1-c624-43f0-9371-2255344878eb contact Id |
{- "id": "a40ce6f1-c624-43f0-9371-2255344878eb",
- "name": "Mr. example",
- "email": "test@example.com",
- "emailBounceStatus": "hard",
- "emailSubscribe": true,
- "phoneSubscribe": true,
- "rating": 2,
- "starred": false
}
title | string Campaign Title |
senderEmail | string Email of sender for this campaign |
senderName | string Name of sender for this campaign |
subject | string Subject for this campaign |
preheader | string Preheader on the email |
object List of recipients | |
templateId | string <uuid> Email template Id for this campaign |
{- "title": "My first campaign",
- "senderEmail": "marketing@example.com",
- "senderName": "Marketing",
- "subject": "Event Invitation",
- "preheader": "Event will be started on coming days",
- "recipients": {
- "mode": "pasteEmail",
- "destination": [
- "apple@example.com",
- "guava@example.com"
], - "includeGroupId": [ ],
- "excludeGroupId": [ ]
}, - "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d"
}
{- "id": "3b84c988-fd4d-4898-81a7-964584031e29"
}
id required | string <uuid> Campaign Id |
title | string Campaign Title |
senderEmail | string Email of sender for this campaign |
senderName | string Name of sender for this campaign |
subject | string Subject for this campaign |
preheader | string Preheader on the email |
object List of recipients | |
templateId | string <uuid> Email template Id for this campaign |
{- "title": "My first campaign",
- "senderEmail": "marketing@example.com",
- "senderName": "Marketing",
- "subject": "Event Invitation",
- "preheader": "Event will be started on coming days",
- "recipients": {
- "mode": "pasteEmail",
- "destination": [
- "apple@example.com",
- "guava@example.com"
], - "includeGroupId": [ ],
- "excludeGroupId": [ ]
}, - "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d"
}
{- "updated": 1
}
id required | string <uuid> (id) Example: a40ce6f1-c624-43f0-9371-2255344878eb Email campaign Id |
{- "id": "a40ce6f1-c624-43f0-9371-2255344878eb",
- "title": "My first test campaign",
- "status": "finished",
- "startTime": "2022-08-01T10:49:14.654Z",
- "endTime": "2022-08-01T11:49:14.654Z",
- "createTime": "2022-08-01T09:49:14.654Z",
- "lastModifiedTime": "2022-08-04T01:31:17.825Z",
- "scheduleTime": null,
- "noSelected": 100,
- "noDuplicated": 5,
- "noSent": 90,
- "noBounced": 5,
- "noOpened": 30,
- "noClicked": 10,
- "noUnsubscribed": 2,
- "noComplained": 1
}
id required | string <uuid> Campaign Id |
endTime | string <date-time> Expected Campaign Finish Time |
{- "id": "3763a3e6-96fa-4f5a-ace4-386dfb8dddb6",
- "endTime": "2022-10-05T14:48:00.000Z"
}
{- "updated": 1
}
id required | string <uuid> Campaign Id |
startTime | string <date-time> Start time of the campaign |
endTime | string <date-time> Expected Campaign Finish Time |
compileMode | string When to compile the recipients, available value: |
{- "id": "3763a3e6-96fa-4f5a-ace4-386dfb8dddb6",
- "startTime": "2022-10-05T12:48:00.000Z",
- "endTime": "2022-10-05T14:48:00.000Z",
- "compileMode": ""
}
{- "updated": 1
}
id required | string <uuid> Campaign Id |
{- "id": "3763a3e6-96fa-4f5a-ace4-386dfb8dddb6"
}
{- "updated": 1
}
id required | string <uuid> Campaign Id |
{- "id": "3763a3e6-96fa-4f5a-ace4-386dfb8dddb6"
}
{- "updated": 1
}
id required | string <uuid> Campaign Id |
{- "id": "3763a3e6-96fa-4f5a-ace4-386dfb8dddb6"
}
{- "updated": 1
}
id required | string <uuid> Campaign Id |
{- "id": "3763a3e6-96fa-4f5a-ace4-386dfb8dddb6"
}
{- "updated": 1
}
group required | string (email-report-group) Report group, available value: |
id required | string <uuid> (id) Example: a40ce6f1-c624-43f0-9371-2255344878eb Email campaign Id |
offset | integer (integer) Example: offset=0 Pagination offset |
limit | integer (integer) Example: limit=0 Pagination limit |
{- "count": "10",
- "results": [
- {
- "email": "test1@example.com"
}, - {
- "email": "test2@example.com"
}
]
}
id required | string <uuid> (id) Example: a40ce6f1-c624-43f0-9371-2255344878eb Email campaign Id |
{- "statusCode": 400,
- "error": "Missing parameters or invalid parameters",
- "message": "Missing parameters or invalid parameters",
- "errorCode": "API-MSG-P-011"
}
sortby | string Default: "lastModifiedTime" Sorting field |
order | string Default: "DESC" Sorting order |
offset | integer Default: 0 pagination offset |
limit | integer Default: 10 pagination limit |
search | string keyword search |
{- "count": 10,
- "results": [
- {
- "id": "a40ce6f1-c624-43f0-9371-2255344878e1",
- "title": "My first test campaign",
- "status": "finished",
- "startTime": "2022-08-01T10:49:14.654Z",
- "endTime": "2022-08-01T11:49:14.654Z",
- "createTime": "2022-08-01T09:49:14.654Z",
- "lastModifiedTime": "2022-08-04T01:31:17.825Z",
- "noSelected": 100,
- "noDuplicated": 5,
- "noSent": 90,
- "noBounced": 5,
- "noOpened": 30,
- "noClicked": 10,
- "noUnsubscribed": 2,
- "noComplained": 1
}, - {
- "id": "a40ce6f1-c624-43f0-9371-2255344878e2",
- "title": "My second test campaign",
- "status": "finished",
- "startTime": "2022-08-01T10:49:14.654Z",
- "endTime": "2022-08-01T11:49:14.654Z",
- "createTime": "2022-08-01T09:49:14.654Z",
- "lastModifiedTime": "2022-08-04T01:31:17.825Z",
- "noSelected": 200,
- "noDuplicated": 5,
- "noSent": 90,
- "noBounced": 5,
- "noOpened": 30,
- "noClicked": 10,
- "noUnsubscribed": 2,
- "noComplained": 1
}
]
}
Please note, SMS credit will be consumed for each SMS sent
type | string It is message type, and the value is either |
senderId | string Then sender identity to be displayed on the mobile device |
content | string The text content of the message |
required | Array of objects (phone) |
subject | string It is required for |
media | string The URL to display the media. Supported image file type includes jpg and gif. Supported video file type includes mpg and mp4 |
{- "type": "sms",
- "senderId": "ExampleID",
- "content": "hello world",
- "phones": [
- {
- "phoneNumber": "99999999",
- "countryCode": "852",
- "countryAbbreviation": "HK"
}
], - "subject": "string",
}
{- "statusCode": 200,
- "phones": {
- "85211111111": true,
- "85299999999": false,
- "85288888888": true,
- "0000000": false
}
}
Please note, 1 email credit will be consumed for each email sent
subject required | string Email subject |
required | object (email-address) |
required | Array of objects (email-address-array) |
content required | any Email body |
Array of objects (email-merge-contact-array) A list of pairs of key and value for merging content with merge tags |
{- "subject": "This is a test email",
- "sender": {
- "name": "display name",
- "email": "test@example.com"
}, - "recipients": [
- {
- "name": "display name 1",
- "email": "test-1@example.com"
}, - {
- "name": "display name 2",
- "email": "test-2@example.com"
}
], - "content": "This is the email body",
- "contact": [
- {
- "email": "test1@example.com",
- "value": {
- "name": "my first name",
- "cont_12345678": "Ms"
}
}, - {
- "email": "test2@example.com",
- "value": {
- "name": "my second name",
- "cont_12345678": "Mr"
}
}
]
}
{- "statusCode": 200,
- "recipients": [
- "test1@example.com",
- "test2@example.com"
]
}
Please note, 1 email credit will be consumed for each email sent
subject required | string Email subject |
required | object (email-address) |
required | Array of objects (email-address-array) |
id required | string <uuid> Template Id |
Array of objects (email-merge-contact-array) A list of pairs of key and value for merging content with merge tags |
{- "subject": "This a test email with template content",
- "sender": {
- "name": "display name",
- "email": "test@example.com"
}, - "recipients": [
- {
- "name": "display name 1",
- "email": "test-1@example.com"
}, - {
- "name": "display name 2",
- "email": "test-2@example.com"
}
], - "id": "77614a40-a724-4e5f-88d7-d253b623c476",
- "contact": [
- {
- "email": "test1@example.com",
- "value": {
- "name": "my first name",
- "cont_12345678": "Ms"
}
}, - {
- "email": "test2@example.com",
- "value": {
- "name": "my second name",
- "cont_12345678": "Mr"
}
}
]
}
{- "statusCode": 200,
- "recipients": [
- "test1@example.com",
- "test2@example.com"
]
}
This API provides will retrieve a list of non-verified optin contact
sortby | string Default: "lastModifiedTime" Sorting field |
order | string Default: "DESC" Sorting order |
offset | integer Default: 0 pagination offset |
limit | integer Default: 10 pagination limit |
search | string keyword search |
{- "count": 2,
- "results": [
- {
- "id": "a40ce6f1-c624-43f0-9371-2255344878e1",
- "name": "Mr. example 1",
- "email": "test1@example.com",
- "rating": 2,
- "starred": false
}, - {
- "id": "a40ce6f1-c624-43f0-9371-2255344878e2",
- "name": "Mr. example 2",
- "email": "test2@example.com",
- "rating": 2,
- "starred": false
}
]
}
This API provides email verification on user provided email address. A verification email with an encryted token !{verify_link}
will be sent to that email address. Once recipient clicks on the verification link in the received email, the system will reply one of the following result:
{ status: success
}: optin record was saved successfully
{ status: failed
}: optin record was not saved
{ status: expired
}: the verification link was expired
Please be noted, any verification link is valid for 24 hours only. A verification link will also be expired if the recipient has already confirmed subscription.
required | object (contact-2) |
firstLandingSuccessUrl | string <url> The first landing page if the verification email was sent successfully. If the url is not empty and in correct url format, the response of this API will redirect to that url |
firstLandingFailUrl | string <url> The first landing page if the verification email was not sent. If the url is not empty and in correct url format, the response of this API will redirect to that url |
secondLandingSuccessUrl | string <url> The second landing page if the verification was success. If the url is not empty and in correct url format, the response of this API will redirect to that url |
secondLandingFailUrl | string <url> The second landing page if the verification was failed. If the url is not empty and in correct url format, the response of this API will redirect to that url |
secondLandingExpiredUrl | string <url> The second landing page if the verification link was expired. If the url is not empty and in correct url format, the response of this API will redirect to that url |
required | object (email-address-verified) |
verificationEmailSubject required | string Email subject |
object (email-address) | |
verificationEmailTemplateId | string <uuid> Id of a templated managed in the platform, and the content of the template must contain the text |
verificationEmailBodyUrl | string <url> The url to retrieve the content of verification email and the content must contain the text |
object (email-address-verified) | |
confirmationEmailSubject | string Email subject |
object (email-address) | |
confirmationEmailTemplateId | string <uuid> Id of a template managed in the platform |
confirmationEmailBodyUrl | string <url> The url to retrieve the content of verification email |
{- "contacts": {
- "id": "a40ce6f1-c624-43f0-9371-2255344878eb",
- "name": "Mr. example",
- "email": "test@example.com",
- "mobile": {
- "countryCode": "852",
- "phoneNumber": "98765432"
}
}, - "verificationEmailSender": {
- "name": "Mr. example",
- "email": "test@example.com"
}, - "verificationEmailSubject": "string",
- "verificationEmailBcc": {
- "name": "display name",
- "email": "test@example.com"
}, - "verificationEmailTemplateId": "4d2fd863-9039-4107-9d43-0771a4bee30a",
- "confirmationEmailSender": {
- "name": "Mr. example",
- "email": "test@example.com"
}, - "confirmationEmailSubject": "string",
- "confirmationEmailBcc": {
- "name": "display name",
- "email": "test@example.com"
}, - "confirmationEmailTemplateId": "b6e59451-0f23-4d1e-bd7e-e9b7d8a1f3af",
}
{- "id": "3b84c988-fd4d-4898-81a7-964584031e29",
- "updated": 1,
- "status": "sent"
}
This API provides will resend verification email to a non verified optin contact
id required | string <uuid> (id) Example: a40ce6f1-c624-43f0-9371-2255344878eb contact Id |
resend | boolean Default: false Indicate |
{- "status": "sent"
}
sortby | string Default: "lastModifiedTime" Sorting field |
order | string Default: "DESC" Sorting order |
offset | integer Default: 0 pagination offset |
limit | integer Default: 10 pagination limit |
search | string keyword search |
{- "count": 2,
- "results": [
- {
- "id": "a40ce6f1-c624-43f0-9371-2255344878ea",
- "title": "My first campaign",
- "sender": "sender-test",
- "subject": "My first announcement",
- "recipients": {
- "mode": "paste",
- "destination": [
- "+85291234567",
- "+85291234568"
]
}, - "templateId": "a40ce6f1-c624-43f0-9371-2255344878ed",
- "schedule_time": "2022-01-01 10:00",
- "start": false
}, - {
- "id": "a40ce6f1-c624-43f0-9371-2255344878eb",
- "title": "My Second campaign",
- "sender": "sender-test",
- "subject": "My Second announcement",
- "recipients": {
- "mode": "group",
- "groupId": [
- "a40ce6f1-c624-43f0-9371-2255344878eb",
- "a40ce6f1-c624-43f0-9371-2255344878ec"
]
}, - "templateId": "a40ce6f1-c624-43f0-9371-2255344878ed",
- "schedule_time": "2022-01-01 10:00",
- "start": false
}
]
}
title | string Campaign Title |
sender | string SenderID for this campaign |
subject | string Subject for this campaign |
object List of recipients | |
templateId | string <uuid> SMS/MMS template for this campaign |
schedule_time | string <date-time> The time to start the campaign |
start | boolean Start the campaign? |
{- "title": "string",
- "sender": "string",
- "subject": "string",
- "recipients": {
- "mode": { },
- "destination": [ ],
- "groupId": [ ]
}, - "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d",
- "schedule_time": "2019-08-24T14:15:22Z",
- "start": true
}
{- "id": "3b84c988-fd4d-4898-81a7-964584031e29"
}
id required | string <uuid> Campaign Id |
title | string Campaign Title |
sender | string SenderID for this campaign |
subject | string Subject for this campaign |
object List of recipients | |
templateId | string <uuid> SMS/MMS template for this campaign |
schedule_time | string <date-time> The time to start the campaign |
start | boolean Start the campaign? |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "sender": "string",
- "subject": "string",
- "recipients": {
- "mode": { },
- "destination": [ ],
- "groupId": [ ]
}, - "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d",
- "schedule_time": "2019-08-24T14:15:22Z",
- "start": true
}
{- "updated": 1
}
id | Array of strings <uuid> |
{- "id": [
- "a40ce6f1-c624-43f0-9371-2255344878eb"
]
}
{- "updated": 16
}
id required | string <uuid> (id) Example: a40ce6f1-c624-43f0-9371-2255344878eb SMS campaign Id |
{- "id": "a40ce6f1-c624-43f0-9371-2255344878eb",
- "title": "My first test campaign",
- "status": "finished",
- "startTime": "2022-08-01T10:49:14.654Z",
- "endTime": "2022-08-01T11:49:14.654Z",
- "createTime": "2022-08-01T09:49:14.654Z",
- "lastModifiedTime": "2022-08-04T01:31:17.825Z",
- "scheduleTime": null,
- "noSelected": 100,
- "noDuplicated": 5,
- "noSent": 90,
- "noUnsubscribed": 1
}
group required | string (sms-report-group) Report group |
id required | string <uuid> (id) Example: a40ce6f1-c624-43f0-9371-2255344878eb SMS campaign Id |
offset | integer (integer) Example: offset=0 Pagination offset |
limit | integer (integer) Example: limit=0 Pagination limit |
{- "count": "10",
- "results": [
- {
- "mobile": {
- "countryCode": "852",
- "phoneNumber": "91234567",
- "region": "HK"
}
}, - {
- "mobile": {
- "countryCode": "852",
- "phoneNumber": "9234568",
- "region": "HK"
}
}
]
}
sortby | string Default: "lastModifiedTime" Sorting field |
order | string Default: "DESC" Sorting order |
offset | integer Default: 0 pagination offset |
limit | integer Default: 10 pagination limit |
search | string keyword search |
{- "count": 5,
- "results": [
- {
- "id": "a40ce6f1-c624-43f0-9371-2255344878e1",
- "title": "My first test campaign",
- "status": "finished",
- "startTime": "2022-08-01T10:49:14.654Z",
- "endTime": "2022-08-01T11:49:14.654Z",
- "createTime": "2022-08-01T09:49:14.654Z",
- "lastModifiedTime": "2022-08-04T01:31:17.825Z",
- "noSelected": 100,
- "noDuplicated": 5,
- "noSent": 90,
- "noUnsubscribed": 1
}, - {
- "id": "a40ce6f1-c624-43f0-9371-2255344878e2",
- "title": "My second test campaign",
- "status": "finished",
- "startTime": "2022-08-01T10:49:14.654Z",
- "endTime": "2022-08-01T11:49:14.654Z",
- "createTime": "2022-08-01T09:49:14.654Z",
- "lastModifiedTime": "2022-08-04T01:31:17.825Z",
- "noSelected": 200,
- "noDuplicated": 5,
- "noSent": 90,
- "noUnsubscribed": 1
}
]
}
id required | string <uuid> (id) Example: a40ce6f1-c624-43f0-9371-2255344878eb SMS campaign Id |
{- "id": "a40ce6f1-c624-43f0-9371-2255344878eb",
- "title": "My first test campaign",
- "status": "finished",
- "startTime": "2022-08-01T10:49:14.654Z",
- "endTime": "2022-08-01T11:49:14.654Z",
- "createTime": "2022-08-01T09:49:14.654Z",
- "lastModifiedTime": "2022-08-04T01:31:17.825Z",
- "scheduleTime": null,
- "noSelected": 100,
- "noDuplicated": 5,
- "noSent": 90,
- "noUnsubscribed": 1
}