Download OpenAPI specification:Download
This documentation provides clear instructions on how to integrate our API using different HTTP and JSON APIs.
We are here to assist you in configuring, accessing, and utilizing our API for our services.
Our APIs are built using the REST
standard, which enables you to effortlessly send messages to your end users, simplifying your work. With this feature, you can send alerts, reminders, notifications, and even verification messages containing one-time passcodes (OTP).
To integrate our API, you can use any HTTP recipient in any programming language of your choice.
https://portal.mobtexting.com/api/v2/
Note: Few elements in the endpoint may change from service to service.
In our API, we utilize HTTP verbs to determine the action you wish to perform on an object. You can use (GET
) to retrieve information, (DELETE
) to remove an object, or (POST
) to create a new one. In cases where your web application doesn’t support POST
or DELETE
directly, we offer an alternative method by allowing you to specify the desired action using the query parameter _method
.
List of product names and product codes
Product Code | Product Name |
---|---|
T | Transactional SMS |
P | Promotional SMS |
S | TransScrub SMS |
G | Global SMS |
VOC | Voice Flow |
WAP | Whatsapp Messaging |
RCS | RCS Messaging |
VBR | Viber Messaging |
To authenticate your API requests, each request must include request headers with your access token.
If you don’t have an access token, you can find it in the menu bar under Developers -> API Keys/Access Tokens
.
In case your application cannot send an authorization header, you can provide your access key using the GET
parameter access_token
.
Note: Your API keys carry significant privileges. It is crucial to keep them completely secure and refrain from sharing your secret API keys in publicly accessible places, such as GitHub.
On our platform, we offer incoming request whitelisting for our REST API. You can whitelist specific IP addresses when generating the access token.
$ curl {endpoint}auth/me \
-H 'Authorization: Bearer 38e896f55670311982434e929559xxxx' \
-H 'Accept: application/json'
$ curl {endpoint}auth/me?access_token=38e896f55670311982434e92955xxxx \
-H 'Accept: application/json'
Note: If possible, please use the authorization header.
Our API platform operates on a globally distributed infrastructure, which means you cannot whitelist the IP addresses of our platform. It’s important to note that delivery reports and inbound messages may originate from various IP addresses.
Your API access key serves as your authentication token for API usage, making it crucial to handle them securely. It is essential to treat your API access keys with the same level of care as your passwords. Ensure they are stored securely and never shared with anyone.
One common mistake is unintentionally exposing API keys by committing them to public repositories on platforms like GitHub. This can lead to fraudsters discovering and misusing your API access key, potentially sending spam messages or depleting your account balance. There are several techniques to mitigate this risk. Storing your API access key in an environment variable, passing it as a command-line argument, or utilizing a secrets manager can all help prevent accidental exposure. Remember, avoid hard-coding your API access key and refrain from checking it into public code repositories.
Similarly, be cautious when sharing code snippets on platforms such as PasteBin, GitHub Gists, or StackOverflow, as it can inadvertently expose your API access key. Ensure that both you and your developers are aware of this risk and take the necessary precautions.
To keep you in compliance, we maintain the appropriate rate limits:
API | Value |
---|---|
All | GET requests are limited to 1000 requests per minute. Once this limit has been crossed, your requests will be rejected, accompanied by an HTTP 429 error code indicating 'Too Many Requests'. |
You can contact our support team to increase the limit. Our team will increase the limit case by case.
We utilize standard HTTP status codes to indicate the outcome of an API request.
Code | Description |
---|---|
2xx | the request has been processed successfully. |
4xx | Error caused by the provided information. For example, authentication issues, insufficient balance, or missing or incorrect parameters. |
If an error occurs, the response body will provide a JSON-formatted message that precisely identifies the issue at hand. This informative response will clearly indicate the nature of the error and provide relevant details.
Name | Value |
---|---|
status | This represents the error type. OK or 200 is success and rest everything is failed. |
code | This represents the HTTP code. This value is optional. Not be available in all responses. |
message | A human-readable description of the error. You can provide your users with this information to indicate what they can do about the error. |
Code | Status | Description |
---|---|---|
200 | OK | Everything went as planned. |
202 | Accepted | Request accepted. |
400 | Bad Request | Something in your header or request body was malformed. |
401 | Unauthorized | Necessary credentials were either missing or invalid. |
403 | Forbidden | Your credentials are valid, but you don’t have access to the requested resource. |
404 | Not Found | The resources cannot be found. |
409 | Conflict | You might be trying to update the same resource concurrently. |
422 | Unprocessable Content | Validation error |
429 | Too Many Requests | You are calling our APIs more frequently than we allow. |
5xx | Server issue | Something went wrong on our end. Please try again. |
In this chapter, developers will discover the powerful capabilities of webhooks within the CPaaS platform and learn how to integrate them effectively into their applications.
Webhooks are an extension of an API, but instead of your code requesting data from our API platform, MOBtexting sends the data to you. The data arrives in a web request to your application. Webhooks are customizable HTTP callbacks that are defined by the user and triggered by specific events. When the designated trigger event takes place, the API client detects the event, gathers the relevant data, and promptly sends a notification (in the form of an HTTP request) to the Webhook URL specified in the application settings. This notification serves to update the status of sent messages or inform you when a new message is received.
When you configure a webhook, you specify a URL that MOBtexting sends HTTP POST requests to and subscribe it to specific event types. When a Webhook is triggered, MOBtexting sends information about the affected object to your application. For example, when an end user receives an email message, MOBtexting can make a POST request to your Webhook endpoint to let you know about it.
Note: It is crucial to ensure that your Webhook returns an HTTPS 2xx OK response when receiving notifications. If the response is not received or does not meet the required criteria, the API client interprets it as a failed notification and attempts to resend it after a certain delay.
If the Webhook fails to send a response with a 2xx status code, or if the remote app does not respond within 3 seconds, the package considers the call as failed. In such cases, we will make two additional attempts to send the Webhook call.
To avoid overwhelming the remote app, we introduced a delay between each retry attempt. By default, we wait 10 seconds between the first and second attempts, 100 seconds between the third and fourth attempts, 1000 seconds between the fourth and fifth attempts, and so on. The maximum wait time is set at 100,000 seconds, equivalent to approximately 27 hours. This ensures that we do not excessively burden the remote app while allowing for reasonable retry intervals.
If you wish to have your callbacks signed and have made the proper configuration for this, the callbacks will have the following signature-related headers:
Name | Description |
---|---|
Signature | The signature generated by the system with the Webhook ID as a secret |
This endpoint sends an HTTP GET
request to retrieve a list of webhooks for the specified endpoint. The response will include details of the webhooks available.
Note:
access_token
.filter[name] | string Example: filter[name]={{webhook_id}} Name of the Webhook to be retrieved. |
{- "code": 200,
- "data": [
- {
- "created_at": "2022-11-07T07:15:27.000000Z",
- "id": "3b3b9f7f-8c29-41d4-8c41-c1415ef83489",
- "name": "sample webhook",
- "secret": null,
- "status": 1,
- "updated_at": "2022-11-07T07:15:27.000000Z",
- "verification_code": null
}
], - "links": {
- "first": "https://portal.mobtexting.com/api/v2/developer/webhooks?page=1",
- "last": "https://portal.mobtexting.com/api/v2/developer/webhooks?page=1",
- "next": null,
- "prev": null
}, - "message": "OK",
- "meta": {
- "current_page": 1,
- "from": 1,
- "last_page": 1,
- "links": [
- {
- "active": false,
- "label": "« Previous",
- "url": null
}, - {
- "active": true,
- "label": "1",
- "url": "https://portal.mobtexting.com/api/v2/developer/webhooks?page=1"
}, - {
- "active": false,
- "label": "Next »",
- "url": null
}
], - "path": "https://portal.mobtexting.com/api/v2/developer/webhooks",
- "per_page": 15,
- "to": 8,
- "total": 8
}, - "status": "OK"
}
This endpoint allows you to create a new Webhook by sending an HTTP POST
request.
Note:
name required | string Enter the name of the Webhook that you want to create. |
secret | string Enter the secret key for the Webhook that you received as a secret. |
status | number Enum: "1" "0" The status of the Webhook ( |
token | string Verification token for the initial Webhook verification challenge. |
uri required | string <url> The URL of the server that will receive the Webhook |
{- "name": "webhook site",
- "secret": "5667",
- "status": 1,
- "token": "",
}
{- "code": 200,
- "data": {
- "created_at": "2022-11-18T06:41:07.000000Z",
- "id": "f018d65c-3026-4815-887d-02dde9025797",
- "name": "sample webhook",
- "secret": "1223434454555",
- "status": 1,
- "updated_at": "2022-11-18T06:41:07.000000Z",
- "verification_code": "122324"
}, - "message": "Created Successfully",
- "status": "OK"
}
This endpoint retrieves the details of a specific Webhook by its ID. The response will include the webhook's ID, name, URI, secret, verification code, status, creation timestamp, and last update timestamp.
Note:
{id}
in the endpoint with the actual ID of the Webhook you want to see.id required | string Example: {{webhook_Id}} ID of the Webhook. |
{- "code": 200,
- "data": {
- "created_at": "2022-11-25T07:23:34.000000Z",
- "id": "b67cae79-125e-4306-8ff6-2397aef6fbf4",
- "name": "sample webhook",
- "secret": "1223434454555",
- "status": 1,
- "updated_at": "2022-11-25T07:23:47.000000Z",
- "verification_code": "122324"
}, - "message": "OK",
- "status": "OK"
}
This endpoint allows you to update a specific Webhook by providing the Webhook ID in the URL path and the updated name and URI in the request body.
Note:
{id}
in the endpoint with the actual ID of the Webhook you want to update.id required | string Example: {{webhook_Id}} ID of the Webhook. |
name required | string Enter the name of the Webhook that you want to modify. |
uri required | string The URL of the server that will receive the Webhook |
status | number Enum: "1" "0" The status of the Webhook ( |
secret | string Enter the secret key for the Webhook that you received as a secret. |
{- "name": "name of webhook",
- "secret": "5667",
- "status": 1,
}
{- "code": 200,
- "data": {
- "created_at": "2022-11-25T07:23:34.000000Z",
- "id": "b67cae79-125e-4306-8ff6-2397aef6fbf4",
- "name": "sample webhook",
- "secret": "1223434454555",
- "status": 1,
- "updated_at": "2022-11-25T07:23:47.000000Z",
- "verification_code": "122324"
}, - "message": "Updated Successfully",
- "status": "OK"
}
This endpoint is used to delete a specific Webhook by its ID.
A Webhook can go through a soft deletion process, during which its status is updated to inactive
. Once the Webhook is restored, its status is then changed to active
within the application.
Note: Replace the {id}
in the endpoint with the actual ID of the Webhook you want to delete.
id required | string Example: {{webhook_Id}} ID of the Webhook. |
{- "code": 200,
- "data": [ ],
- "message": "Deleted Successfully",
- "status": "OK"
}
You should subscribe to the events to get the payload of a sent or received message or call to the client’s specified Webhook URL.
Here is a list of events that can be used to send a payload to the provided Webhook URL.
Product | Event | Description |
---|---|---|
SMS | sms:message:status |
Acknowledgement of message delivery or undelivery. |
SMS | sms:unsubscription |
Acknowledgement of opting out from any number. |
whatsapp:message:in |
For receiving updates when the user sends a message to WhatsApp number | |
whatsapp:message:status |
For receiving DLR status from the WhatsApp number to the user | |
whatsapp:unsubscription |
Acknowledgement of opting out from any number. | |
RCS | rcs:message:in |
For receiving RCS message event |
RCS | rcs:message:status |
For receiving RCS delivery updates |
RCS | rcs:unsubscription |
Acknowledgement of opting out from any number. |
Voice | voice:message:out |
To receive acknowledgements after CDR events. |
Voice | voice:unsubscription |
Acknowledgement of opting out from any number. |
Viber | viber:message:status |
To receive Viber delivery updates. |
Viber | viber:message:in |
To receive notifications when a user sends a message to the Viber number. |
Viber | viber:unsubscription |
Acknowledgement of opting out of any number. |
Interact | vmn:message:in |
Once we receive the acknowledgment, we will send the same to the webhook. |
Contact | contacts:subscriber:subscription |
For receiving contact creation and updating the event payload. |
This API endpoint makes an HTTP GET
request to retrieve a list of subscriptions for Webhook.
Note:
access_token
.{- "code": 200,
- "data": [
- {
- "created_at": "2022-12-06T12:43:51.000000Z",
- "event": "vmn:message:in",
- "id": 2,
- "identity": "keyword:1",
- "payload": null,
- "webhook_id": "flow:1"
}, - {
- "created_at": "2022-12-06T12:39:10.000000Z",
- "event": "vmn:message:in",
- "id": 1,
- "identity": "number:1",
- "payload": null,
- "webhook_id": "flow:2"
}
], - "links": {
- "first": "https://portal.mobtexting.com/api/v2/developer/subscriptions?page=1",
- "last": "https://portal.mobtexting.com/api/v2/developer/subscriptions?page=1",
- "next": null,
- "prev": null
}, - "message": "Subscriptions List",
- "meta": {
- "current_page": 1,
- "from": 1,
- "last_page": 1,
- "links": [
- {
- "active": false,
- "label": "« Previous",
- "url": null
}, - {
- "active": true,
- "label": "1",
- "url": "https://portal.mobtexting.com/api/v2/developer/subscriptions?page=1"
}, - {
- "active": false,
- "label": "Next »",
- "url": null
}
], - "path": "https://portal.mobtexting.com/api/v2/developer/subscriptions",
- "per_page": 15,
- "to": 2,
- "total": 2
}, - "status": "OK"
}
This API endpoint allows you to create subscriptions by sending an HTTP POST
request to the specified URL. The request should include the event
, identity
, and webhook_id
in the payload.
Note:
event required | string Type of event you subscribe to. Refer to All Events |
identity required | string The identity associated with the subscription. |
webhook_id required | string The ID of the Webhook for the subscription. |
{- "event": "vmn:message:in",
- "identity": "all",
- "webhook_id": "{{webhook_Id}}"
}
{- "code": 200,
- "data": {
- "created_at": "2022-12-07T06:20:09.000000Z",
- "event": "vmn:message:in",
- "id": 3,
- "identity": "all",
- "payload": [ ],
- "webhook_id": "dd4b91af-167d-48e6-901d-ae181ff6e80d"
}, - "message": "Subscription Saved Successfully",
- "status": "OK"
}
This endpoint retrieves subscription details for a specific ID. It makes an HTTP GET
request to the specified endpoint.
Note:
id
with the actual ID of the Webhook that you would like to see.id required | string Example: {{Subscription_id}} ID of the subscription. |
{- "code": 200,
- "data": {
- "created_at": "2022-12-06T12:43:51.000000Z",
- "event": "vmn:message:in",
- "id": 2,
- "identity": "keyword:1",
- "payload": null,
- "webhook_id": "flow:1"
}, - "message": "Subscription",
- "status": "OK"
}
This endpoint sends an HTTP DELETE
request to delete a specific subscription.
Note: Replace the id
with the actual ID of the Webhook that you would like to delete.
id required | string Example: {{Subscription_id}} ID of the subscription. |
{- "code": 200,
- "data": [ ],
- "message": "Subscription Deleted Successfully",
- "status": "OK"
}
This section describes the example Webhook request sent to your server or the payload generated after the triggering of events for SMS, WhatsApp, RCS, voice, interact, and contact.
The DLR Push API allows the delivery report of a sent message to be sent to the client’s specified Webhook URL using the POST
method. You can create the Webhook URL by following the instructions below:
id
for the newly created Webhook.This is an example Webhook request for an SMS, sent as an HTTP notification to the specified Webhook URL in the application settings.
Note:
webhook_id
parameter and its corresponding value in your API Request. Once the request is made, you will receive the delivery report.sms:message:status
(message status notification).event | string Specifies the specific event type. Choose the event type. |
object Contains detailed information about the event |
{- "event": "sms:message:status",
- "payload": {
- "id": "b34e35ad-fe34-4a8b-977c-b21cd76cd7d6:1",
- "mobile": "918921269xxx",
- "status": "DELIVRD",
- "credits": "2.0000",
- "units": 2,
- "deliv_at": "1701086585",
- "sent_at": "1701063180",
- "submit_at": "1701059582",
- "deliv_time": "2021-04-09 16:27:51",
- "sent_time": "2021-04-09 16:27:35",
- "submit_time": "2021-04-09 16:27:39",
- "cid": "1234444XXXX",
- "custom": "9882XXXX"
}
}
{- "status": "OK",
- "code": 200,
- "message": "Scheduled successfully.",
- "data": [ ]
}
This is an example Webhook request for an WhatsApp, sent as an HTTP notification to the specified Webhook URL in the application settings.
Note:
whatsapp:message:status
(message status notification).event | string Specifies the specific event type. Choose the event type. |
object Contains detailed information about the event |
{- "event": "whatsapp:message:status",
- "payload": {
- "id": "a418d672-9781-4d97-b517-a56f7d95ad8a",
- "channel": "whatsapp",
- "from": "919019120xxx",
- "to": "9190199xxxxx",
- "status": "sent|delivered|read|failed|deleted",
- "delivered_at": "2021-06-18T14:48:06.886358Z",
- "read_at": "2021-06-18T14:48:06.886358Z",
- "processed_at": "2021-06-18T14:48:06.886358Z",
- "timestamp": "2021-06-18T14:48:06.886358Z",
- "foreign_id": "your-business-identifier"
}
}
{- "status": "OK",
- "code": 200,
- "message": "Scheduled successfully.",
- "data": [ ]
}
This is an example Webhook request for an RCS, sent as an HTTP notification to the specified Webhook URL in the application settings.
Note:
rcs:message:status
(message status notification).event | string Specifies the specific event type. Choose the event type. |
object Contains detailed information about the event |
{- "event": "rcs:message:status",
- "payload": {
- "id": "a418d672-9781-4d97-b517-a56f7d95ad8a",
- "channel": "rcs",
- "from": "700969ca-0cb2-11ec-a2cxxxx",
- "to": "9190199xxxxx",
- "status": "sent|delivered|read|failed|deleted",
- "delivered_at": "2021-06-18T14:48:06.886358Z",
- "read_at": "2021-06-18T14:48:06.886358Z",
- "processed_at": "2021-06-18T14:48:06.886358Z",
- "timestamp": "2021-06-18T14:48:06.886358Z",
- "foreign_id": "your-business-identifier"
}
}
{- "status": "OK",
- "code": 200,
- "message": "Scheduled successfully.",
- "data": [ ]
}
This is an example Webhook request for an Engage (voice), sent as an HTTP notification to the specified Webhook URL in the application settings.
Note:
webhook_id
parameter and its corresponding value when making a call through API Request. Once the request is made, you will receive the delivery report.voice:message:out
(call status notification).event | string Specifies the specific event type. Choose the event type. |
object Contains detailed information about the event |
{- "event": "voice:message:out",
- "payload": {
- "bridge": "91806828XXXX",
- "from": "91806828XXXX",
- "to": "91806828XXXX",
- "source": "OBD",
- "mid": "1234-1333-XXXXX",
- "flow_id": 123,
- "start_at": "2021-04-09 16:27:39",
- "end_at": "2021-04-09 16:27:55",
- "duration": "23",
- "status": "ANSWER",
}
}
{- "status": "OK",
- "code": 200,
- "message": "Scheduled successfully.",
- "data": [ ]
}
This is an example Webhook request for an Viber, sent as an HTTP notification to the specified Webhook URL in the application settings.
Note:
viber:message:status
(message status notification).event | string Specifies the specific event type. Choose the event type. |
object Contains detailed information about the event |
{- "event": "viber:message:status",
- "payload": {
- "id": "a418d672-9781-4d97-b517-a56f7d95ad8a",
- "channel": "viber",
- "from": "700969ca-0cb2-11ec-a2cxxxx",
- "to": "9190199xxxxx",
- "status": "sent|delivered|read|failed|deleted",
- "delivered_at": "2021-06-18T14:48:06.886358Z",
- "read_at": "2021-06-18T14:48:06.886358Z",
- "processed_at": "2021-06-18T14:48:06.886358Z",
- "timestamp": "2021-06-18T14:48:06.886358Z",
- "foreign_id": "your-business-identifier"
}
}
{- "status": "OK",
- "code": 200,
- "message": "Scheduled successfully.",
- "data": [ ]
}
This is an example Webhook request for an contact, sent as an HTTP notification to the specified Webhook URL in the application settings.
Note:
event | string Value: "contacts:subscriber:subscription" Specifies the specific event type. |
object Contains detailed information about the event |
{- "event": "contacts:subscriber:subscription",
- "payload": {
- "id": 86,
- "identity": "demo@gmail.com",
- "first_name": "Demo",
- "last_name": "Test",
- "gender": "male",
- "birth_date": "1996-07-16",
- "company": null,
- "attributes": {
- "membership": "platinum",
- "status": "vip",
- "customerNumber": "23"
}, - "created_at": "2023-07-16T11:45:34.000000Z",
- "updated_at": "2023-07-16T11:45:34.000000Z",
- "status": "Subscriber created successfully"
}
}
{- "status": "OK",
- "code": 200,
- "message": "Scheduled successfully.",
- "data": [ ]
}
This is an example Webhook request for an interact, sent as an HTTP notification to the specified Webhook URL in the application settings.
Note:
event | string Value: "vmn:message:in" Specifies the specific event type. |
object Contains detailed information about the event |
{- "event": "vmn:message:in",
- "payload": {
- "id": "our-message-id",
- "channels": [
- {
- "name": "vmn",
- "to": "919019XXXXXX"
}
], - "recipient": {
- "from": "918074XXXXXX",
- "user": {
- "id": "unique-id",
- "identifier_id": "unique-identifier-id",
- "subscriber_id": "unique-subscriber-id",
- "identity": "unique-user-identity",
- "username": "username",
- "first_name": "user first name",
- "middle_name": "user middle name",
- "last_name": "user last name",
- "email": "user email",
- "phone": "user phone number",
- "attributes": "user attributes",
- "user_info": {
- "picture": "null",
- "gender": "user-gender",
- "title": "null"
}
}
}, - "message": {
- "type": "text",
- "payload": {
- "text": "This is a simple text message"
}
}
}
}
{- "status": "OK",
- "code": 200,
- "message": "Scheduled successfully.",
- "data": [ ]
}
This is an example Webhook request for an smart link, sent as an HTTP notification to the specified Webhook URL in the application settings.
Note:
id | string Unique identifier for the entry in the system. |
link_id | number An identifier associated with a specific link. |
user_agent | string Information about the user's browser or client application. |
browser | string The name of the user's web browser. |
browser_version | string The version number of the user's web browser. |
platform | string The operating system or platform on which the user is accessing the service. |
device_type | string The type of device used by the user. |
device_brand | string The brand or manufacturer of the user's device. |
country | string The country from which the request originates. |
country_code | string The country code associated with the country from which the request originates. |
region | string The region or state within the country from which the request originates. |
city | string The city from which the request originates. |
mobile | string The mobile phone number associated with the user. |
created_at | string <yyyy-mm-dd H:i:s> The date and time at which the entry was created or recorded in the system. |
{- "id": "b34e35ad-fe34-4a8b-977c-b21cd76cd7d6:1",
- "link_id": 246,
- "user_agent": "Mozilla/5.0)",
- "browser": "Goole Chorme",
- "browser_version": "23.3.1",
- "platform": "Android",
- "device_type": "smartphone",
- "device_brand": "Redmi",
- "country": "india",
- "country_code": "IN",
- "region": "Karnataka",
- "city": "Bangalore",
- "mobile": "9189195XXXXX",
- "created_at": "2021-04-09 16:27:39"
}
{- "status": "OK",
- "code": 200,
- "message": "Scheduled successfully.",
- "data": [ ]
}
For users seeking enhanced customization, Compose Webhook will help to receive the customized Webhook payload to precisely match your preferences and requirements.
Follow the below procedure to create customized Webhooks using the CPaaS Dashboard.
Login to the CPaaS portal.
Navigate to the Webhooks section of your application and click Create.
Select the Customized Webhook.
Enter the identification name in the TITLE field.
Enter a callback URL into the designated URL field.
Note:
https://www.domain.com/ack/receive?id={{id}}&mobile={{mobile}}&status={{status}}
https://www.domain.com/ack/receive?message_id={{id}}&mobile_number={{mobile}}&message_status={{status}}
Choose the HTTP method for the Webhook request from the methods dropdown. By default, the GET
method is selected.
Add the required parameters and their values in the params tab by clicking the + icon.
Note:
Add the required headers and their values in the Headers tab by clicking the + icon. For example, authorization headers or custom headers.
Choose between raw
or form-data
for the payload and add the keys and their values in the Body tab by clicking the + icon.
Enter the receiver in the RECEIVER field only when creating the Webengage Webhook.
Click Create.
Note:
id
for the newly created Webhook.webhook_id
along with its corresponding value in your API request.Event | Description |
---|---|
sms:message:status |
Message status notification |
whatsapp:message:status |
Message status notification |
rcs:message:status |
Message status notification |
voice:message:out |
Call status notification |
viber:message:status |
Message status notification |
This API endpoint is used to generate an access token. When a GET
request is sent to the specified endpoint, the server will respond with the generated access token in the response body.
{- "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL2V1LmNwYWFzLXVhdC5iaWNzLmNvbS9hcGkvdjMvYXV0aC90b2tlbi9nZW5lcmF0ZSIsImlhdCI6MTY2ODc1Mzg0NiwiZXhwIjoxNjY4NzU3NDQ2LCJuYmYiOjE2Njg3NTM4NDYsImp0aSI6ImM0S012TWlzd08xZDVGQjIiLCJzdWIiOiIxMCIsInBydiI6IjIzYmQ1Yzg5NDlmNjAwYWRiMzllNzAxYzQwMDg3MmRiN2E1OTc2ZjcifQ.h4DQ6IQJTH5mNQFs0U5zy-e6WS2pGgSn36KIm4jeaRDkXs44m79E50s3S2FxZiBW0xjSEh7so6KOCrYHICQCA_ogeBq13gqiTqmgEykFuFIoxV_NI6B3Ap1oy6g9YaTa6jYH5lrylM72V4tg_YjG5mIH2Kw80HAva9LlYz76igUskPJ-nhWf6Fdx2MZZ1BYoLj1aVZaepbyvftfHXnqDBGGkEm_KcREszFyZYjEVwrkgZHmL2okVMQMhEzySEwrH2BdQ55vu36snEb_ck7qkfJLq2n9AL2rf1kBvr2FC90e_Pk8sJFOFYzQ0MZ1zaAmvBnVnODw0xE9mkJuehI7B4VvEfW_BK64TKgVkzUyRk0yKudHG26jDqfHCYojy8A1sPgfBPeZIbbE43-svOslHPoDlNTgM8HYNEd7hExkpZQaPPbYpnqlgdeBtDGGrx2hY03W-nDBT6W8tnGmgCYpolW6H1I13LI7NlaSnKkQ1aQp99DFDafN43s3SEtH-A30oekfq1WguawVRbOVmmcosECD_Bs0bJOLJSPYuMique8QdQ6372u9O6zT89X0RxwDoWvzPL35ZwLTel1zIvkGHLW1BPa34XtjtvrWUzcGIBeGd2U0N0TTEC70ukbNRYDaKaUVmqo_qhgfndx4PilIk4ppqCJAqHejBcDCENAbjtDI",
- "expires_in": 3600,
- "token_type": "bearer"
}
This endpoint is used to refresh the access token. When the access token is about to expire, you can make a request to this endpoint to obtain a new token without having to re-authenticate.
The request does not require any parameters in the body or URL, as the token to be refreshed is typically included in the request headers.
The response will include the new access token along with its expiration time, allowing you to update your token and continue making authenticated requests.
{- "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL2V1LmNwYWFzLXVhdC5iaWNzLmNvbS9hcGkvdjMvYXV0aC90b2tlbi9yZWZyZXNoIiwiaWF0IjoxNjY4NzUzOTAwLCJleHAiOjE2Njg3NTc1MDYsIm5iZiI6MTY2ODc1MzkwNiwianRpIjoicEhTTFRVUGNGVmJGaTd0eiIsInN1YiI6IjEwIiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.eeUP1edl2XgGJcarOZzeOCpidoS8Y6g2pMsD35P8EA3MvpNf1Cu-3TGtkh_qNxAvizMwrbR_nGW51ffN75U77WClaBFV3kTrRFaveOpGZAceCMVkhO6dbJQbaio_cHaAgS9m_-CtswuCDH4-sMdHVa60hR9S4y4I6f6QEW5StMu_DXHF4d_PRSoy_9IEj0yjuVXI8B17V3XRy2nvXBIDr-XpAgQLEn82xt5_3MZRa_COpNAhDkHVVdjS8r2Oun8OS7aCGtwe2QdzlD8Uib-E0OXwZ8OtzHTeaYADZZcUzwAV98LhbrTfjPv_jLeoxpue2Q_yZyb9L3Mgzo1K-zlsgFprq0xMU9_UqSA2G-1kVIsRFqzozTDBWp04u0GEd6nEgmtHQ_6tI8M4DThA5Olr2LsQIqZtZ28XJE4KIDam1VCAyBN_uLj70NdduufeJNrEiFvJkim4TM3tQ1ynSNGaXQ6Fd6K_ME_HLq6yUK8ZuD2IHKT6HecTwzXYjqsIf6d8YpBLoNFELQLODzRHArKNh2cFw0nma8smSTqioubuLBOKzl_D9ok9BukUfjGpJLrZlDcHuoJAxhIF1EG5vaELpIzA2QJSZGQ2LVkzrjD2mauKkJuFjHAdcP-avUvSLgcqb25f-C-3oA8_xOSqoCx7sHftw0BsjUesnpOQOnhT8NU",
- "expires_in": 3600,
- "token_type": "bearer"
}
Our Short Message Service (SMS) API provides a convenient way to send text messages to users worldwide using straightforward RESTful APIs.
Key features of our SMS API include:
With our SMS API, you can efficiently reach your users through text messages, leveraging the benefits of global coverage, reliability, and cost-effectiveness.
Our API relies on HTTP verbs to determine the desired action for an object: reading (GET
), deleting (DELETE
), or creating (POST
). In cases where your web application lacks support for POST
or DELETE
operations, we offer a solution. You can specify the desired method by including the query parameter _method
.
Numbers are a key concept to understand when working with the API. The following points should be considered before developing your application:
All phone numbers in the APIs use the E.164 format. This means that the numbers:
+
and the international access code, such as 00
.()
, or -
.For example, a US number would have the format 14155550101
. A UK number would have the format 447700900123
.
Every text message sent through our API is associated with a sender ID. When utilizing the API to send a text message, you have the option to use any of the approved sender IDs associated with your account.
If you haven’t created a sender ID yet, don’t worry! You can easily create one within our application. Once your Sender ID is approved, you can immediately begin sending messages using it.
Message templates are message formats for common reusable messages a business may want to send. Businesses must use message templates for sending notifications to customers.
You should be mindful of the character limit and consider the following limitations to optimize your SMS.
No.of SMS | No.of Characters |
---|---|
1 | 160 characters |
2 | (2 x 153) 306 characters |
3 | (3 x 153) 459 characters |
No.of SMS | No.of Characters |
---|---|
1 | 70 characters |
2 | (2 x 67) 134 characters |
3 | (3 x 67) 201 characters |
Note: If any characters other than the following special characters are present in the message during the sending of a campaign type normal, they will be replaced with a question mark (?):
This endpoint makes an HTTP GET
request to retrieve a list of SMS senders. The response will include a list of SMS senders, each containing details such as sender ID, name, and status.
Note:
access_token
and other parameters.Status Value | Description |
---|---|
0 | Pending |
1 | Approved |
2 | Rejected |
filter[name] | string Example: filter[name]={{sender_id}} Name of the sender ID. |
{- "code": 200,
- "data": [
- {
- "created_at": "2024-03-04T09:27:44.000000Z",
- "document": null,
- "entity_id": "12323343435534555590",
- "entity_name": "SAMPLE COMPANY",
- "header_id": null,
- "id": "bee6b064-7ade-44d7-ae90-336f9f0f1d9b",
- "is_open": 1,
- "iso": "IN",
- "message": null,
- "name": "demo",
- "purpose": 1,
- "service": {
- "display_name": "SMS A2P Enterprise",
- "id": 107,
- "name": "ENT"
}, - "status": 1,
- "updated_at": "2024-03-04T09:27:56.000000Z"
}
], - "links": {
- "first": "https://portal.mobtexting.com/api/v2/sms/senders?page=1",
- "last": "https://portal.mobtexting.com/api/v2/sms/senders?page=35",
- "next": "https://portal.mobtexting.com/api/v2/sms/senders?page=2",
- "prev": null
}, - "message": "Senders List",
- "meta": {
- "current_page": 1,
- "from": 1,
- "last_page": 35,
- "links": [
- {
- "active": false,
- "label": "« Previous",
- "url": null
}
], - "path": "https://portal.mobtexting.com/api/v2/sms/senders",
- "per_page": 15,
- "to": 15,
- "total": 516
}, - "status": "OK"
}
This endpoint allows you to create a new sender ID using the post method under your account.
Note: Few elements in the endpoint may change from service to service.
country_code required | string Enter the sender's country code in two letters. |
entity_id required | string Enter the entity ID. |
entity_name required | string Name of the company to which this sender belongs. |
name required | string Enter the sender ID that you want to create. |
service required | string The short code of the service name. Refer to Products/Services. |
{- "country_code": "IN",
- "entity_id": "123233434355345555",
- "entity_name": "SAMPLE COMPANY",
- "name": "SEM{{random}}",
- "service": "ENT"
}
{- "code": 200,
- "data": {
- "created_at": "2023-12-14T08:51:38.000000Z",
- "document": null,
- "entity_id": "123233434355345555",
- "entity_name": "SAMPLE COMPANY",
- "header_id": null,
- "id": "a0237311-9796-4854-a510-fa258f1206e5",
- "is_open": 1,
- "iso": "IN",
- "message": null,
- "name": "SEM119",
- "purpose": 1,
- "service": {
- "display_name": "SMS A2P Enterprise",
- "id": 107,
- "name": "ENT"
}, - "status": 1,
- "updated_at": "2023-12-14T08:51:38.000000Z"
}, - "message": "Sender Saved Successfully",
- "status": "OK"
}
This endpoint makes an HTTP GET
request to retrieve the details of a specific SMS sender by ID. The response will include the sender's ID, name, service details, entity name and ID, ISO country code, open status, purpose, status, creation timestamp, and last update timestamp.
Note:
access_token
.{id}
in the endpoint with the actual ID of the sender you want to see.Status Value | Description |
---|---|
0 | Pending |
1 | Approved |
2 | Rejected |
id required | string Example: {{sender_id}} Name of the sender ID. |
{- "code": 200,
- "data": {
- "created_at": "2023-12-15T10:17:38.000000Z",
- "document": null,
- "entity_id": "123233434355345555",
- "entity_name": "SAMPLE COMPANY",
- "header_id": null,
- "id": "3837d147-304c-42c6-8142-cfc3cb8f3b89",
- "is_open": 1,
- "iso": "IN",
- "message": null,
- "name": "demo",
- "purpose": 1,
- "service": {
- "display_name": "SMS A2P Enterprise",
- "id": 107,
- "name": "ENT"
}, - "status": 0,
- "updated_at": "2023-12-18T10:33:34.000000Z"
}, - "message": "Sender Data",
- "status": "OK"
}
This endpoint allows you to update a specific sender ID using the put method under your account.
Note:
{id}
in the endpoint with the actual ID of the sender you want to edit.id required | string Example: {{sender_id}} Name of the sender ID. |
country_code | string Enter the sender's country code in two letters. |
entity_id | string Enter the entity ID. |
entity_name | string Name of the company to which this sender belongs. |
service | string The short code of the service name. Refer to Products/Services |
{- "country_code": "IN",
- "entity_id": "12345679",
- "entity_name": "testing",
- "service": "ENT"
}
{- "code": 200,
- "data": {
- "created_at": "2024-02-20T12:31:13.000000Z",
- "document": null,
- "entity_id": "123233434355345555",
- "entity_name": "SAMPLE COMPANY",
- "header_id": null,
- "id": "50dc8eda-9647-4e1e-893c-f390fde0d917",
- "is_open": 1,
- "iso": "IN",
- "message": null,
- "name": "demo",
- "purpose": 1,
- "service": {
- "display_name": "SMS A2P Enterprise",
- "id": 107,
- "name": "ENT"
}, - "status": 1,
- "updated_at": "2024-03-05T06:57:18.000000Z"
}, - "message": "Sender Updated Successfully",
- "status": "OK"
}
This endpoint is used to delete a specific sender for SMS messages by making an HTTP DELETE
request under your account.
Note:
{id}
in the endpoint with the actual ID of the sender you want to delete.id required | string Example: {{sender_id}} Name of the sender ID. |
{- "code": 200,
- "data": [ ],
- "message": "Deleted Successfully",
- "status": "OK"
}
This endpoint makes an HTTP GET
request to retrieve a list of SMS templates created under your account. The response will include information about the SMS templates, such as their names, IDs, and other relevant details.
Note: Few elements in the endpoint may change from service to service.
filter[name] | string Example: filter[name]={{template_id}} Name of the template. |
{- "code": 200,
- "data": [
- {
- "alias": "dadjmkdwim",
- "body": "Thank u For Shopping with us,Have a nice day.",
- "body_length": 45,
- "content": null,
- "created_at": "2024-03-04T11:12:31.000000Z",
- "id": "dc538e5e-59ac-4549-9943-c399df1b4d8d",
- "is_complete": 0,
- "is_english": 1,
- "match_count": 0,
- "name": "DaDjmkDwIM",
- "percentage": 0,
- "sender": "demo",
- "sender_id": "bee6b064-7ade-44d7-ae90-336f9f0f1d9b",
- "status": 1,
- "template_id": "1726745647",
- "template_type": "Promotional",
- "updated_at": "2024-03-04T11:12:31.000000Z"
}
], - "links": {
- "first": "https://portal.mobtexting.com/api/v2/sms/templates?page=1",
- "last": "https://portal.mobtexting.com/api/v2/sms/templates?page=10",
- "next": "https://portal.mobtexting.com/api/v2/sms/templates?page=2",
- "prev": null
}, - "message": "Templates List",
- "meta": {
- "current_page": 1,
- "from": 1,
- "last_page": 10,
- "links": [
- {
- "active": false,
- "label": "« Previous",
- "url": null
}, - {
- "active": false,
- "label": "Next »",
- "url": "https://portal.mobtexting.com/api/v2/sms/templates?page=2"
}
], - "path": "https://portal.mobtexting.com/api/v2/sms/templates",
- "per_page": 15,
- "to": 15,
- "total": 139
}, - "status": "OK"
}
This endpoint allows you to create a new SMS template by sending an HTTP POST
request under your account.
Note: Few elements in the endpoint may change from service to service.
Template Type | Description |
---|---|
T | Transactional |
P | Promotional |
SI | Service Implicit |
SE | Service Explicit |
body required | string Enter the body of the SMS (template). |
name required | string Enter the name of the template that you want to refer to. |
sender required | string Enter the approved sender ID associated with your account. |
template_id required | string DLT Template ID. |
type required | string Enum: "T" "P" "SI" "SE" Type of the template |
{- "body": "testing sms 1",
- "name": "test1",
- "sender": "{{sender_name}}",
- "template_id": "{{random}}",
- "type": "T"
}
{- "code": 200,
- "data": {
- "id": "ae8521c7-fe71-41a1-88c0-feb6e9cb54e0",
- "sender_id": "c9434dbd-e49b-4ce7-b6f5-9c241823d12a",
- "template_id": "143",
- "template_type": "",
- "sender": "demo",
- "name": "test1",
- "alias": "test1-5",
- "body": "testing sms 1",
- "content": null,
- "body_length": 13,
- "match_count": 0,
- "percentage": 0,
- "is_complete": 0,
- "is_english": 1,
- "status": 1,
- "created_at": "2023-12-18T11:24:43.000000Z",
- "updated_at": "2023-12-18T11:24:43.000000Z"
}, - "message": "Template Saved Successfully",
- "status": "OK"
}
This endpoint makes an HTTP GET
request to retrieve details of a specific SMS template by its ID. The response will include the template's ID, sender ID, template type, sender, name, alias, body, body length, creation and update timestamps, and other relevant details.
Note:
access_token
.{id}
in the endpoint with the actual ID of the template you want to see.id required | string Example: {{template_id}} Name of the template. |
{- "code": 200,
- "data": {
- "id": "aac3a8ff-4885-42f9-b6d9-bb847b219da3",
- "sender_id": "50dc8eda-9647-4e1e-893c-f390fde0d917",
- "template_id": "352",
- "template_type": "Transactional",
- "sender": "demo",
- "name": "testing",
- "alias": "testing-6",
- "body": "hai welcome to MOBtexting 123",
- "content": null,
- "body_length": 29,
- "match_count": 0,
- "percentage": 0,
- "is_complete": 0,
- "is_english": 1,
- "status": 1,
- "created_at": "2024-02-20T12:32:28.000000Z",
- "updated_at": "2024-02-20T12:32:28.000000Z"
}, - "message": "Template Data",
- "status": "OK"
}
This endpoint allows you to update an existing SMS template by sending an HTTP PUT
request under your account.
Note:
{id}
in the endpoint with the actual ID of the template you want to edit.id required | string Example: {{template_id}} Name of the template. |
body | string Enter the body of the SMS (template). |
is_english | string Enum: "1" "0" Indicates whether the template is in English. |
name | string Enter the name of the template that you want to refer to. |
template_id required | string DLT Template ID. |
type | string Enum: "P" "T" "SI" "SE" The type of template. |
{- "body": "temp12",
- "is_english": "1",
- "name": "SENDER",
- "template_id": "Welcome to MOBtexting family",
- "type": "T"
}
{- "code": 200,
- "data": {
- "alias": "testing-6",
- "body": "temp12",
- "body_length": 6,
- "content": null,
- "created_at": "2024-02-20T12:32:28.000000Z",
- "id": "aac3a8ff-4885-42f9-b6d9-bb847b219da3",
- "is_complete": 0,
- "is_english": "1",
- "match_count": 0,
- "name": "SENDER",
- "percentage": 0,
- "sender": "demo",
- "sender_id": "50dc8eda-9647-4e1e-893c-f390fde0d917",
- "status": 1,
- "template_id": "352",
- "template_type": "Transactional",
- "updated_at": "2024-03-05T09:26:56.000000Z"
}, - "message": "Template Updated Successfully",
- "status": "OK"
}
This endpoint sends an HTTP DELETE
request to delete an SMS template by its ID under your account.
Note:
{id}
in the endpoint with the actual ID of the template you want to delete.id required | string Example: {{template_id}} Name of the template. |
{- "code": 200,
- "data": 1,
- "message": "Template deleted successfully",
- "status": "OK"
}
This endpoint makes an HTTP GET
request to retrieve a list of unsubscribers from the SMS suppressions. The response will contain the details of the unsubscribed phone numbers.
Note:
access_token
and other parameters.filter[id] | string The SMS unsubscription ID. |
filter[iso] | string The ISO code of the country. (e.g., IN, AF, etc.) |
filter[receiver] | string The unsubscribed mobile number. |
filter[type] | string Enum: "tag" "sender" "service" Type of unsubscription |
filter[value] | string Value for any of the given |
{- "code": 200,
- "data": [
- {
- "created_at": "2023-12-18T12:26:06.000000Z",
- "id": "08574b7d-c9ef-4653-bec8-61c2bfde50e4",
- "iso": "IN",
- "receiver": "9194xxxxxxxx",
- "type": "tag",
- "value": "50 % off"
}
], - "links": {
- "first": "https://portal.mobtexting.com/api/v2/sms/suppressions/unsubscribers?page=1",
- "last": "https://portal.mobtexting.com/api/v2/sms/suppressions/unsubscribers?page=2",
- "next": "https://portal.mobtexting.com/api/v2/sms/suppressions/unsubscribers?page=2",
- "prev": null
}, - "message": "Unsubscribers list",
- "meta": {
- "current_page": 1,
- "from": 1,
- "last_page": 2,
- "links": [
- {
- "active": false,
- "label": "Next »",
- "url": "https://portal.mobtexting.com/api/v2/sms/suppressions/unsubscribers?page=2"
}
], - "path": "https://portal.mobtexting.com/api/v2/sms/suppressions/unsubscribers",
- "per_page": 15,
- "to": 15,
- "total": 24
}, - "status": "OK"
}
This endpoint allows you to add an unsubscriber to the list of unsubscribers for SMS communications.
Note: Few elements in the endpoint may change from service to service.
receiver required | string Enter the receiver that you want to add. |
type | string Enum: "tag" "product" "sender" "all" Type of the receiver |
value | string Enter the value of the type. |
{- "receiver": "9176xxxxxxxx",
- "type": "tag",
- "value": "tag1"
}
{- "code": 200,
- "data": {
- "created_at": "2023-04-24T12:55:35.000000Z",
- "id": "0c8fac6b-32cd-43b2-9286-309fede0b47d",
- "iso": "IN",
- "receiver": "9198xxxxxxxx",
- "type": "tag",
- "value": "promo"
}, - "message": "Receiver added successfully",
- "status": "OK"
}
This HTTP DELETE
request is used to remove all unsubscribers from the SMS suppression list.
Note: Few elements in the endpoint may change from service to service.
{- "code": 200,
- "data": [ ],
- "message": "Deleted Successfully",
- "status": "OK"
}
This endpoint retrieves information about a specific SMS unsubscriber by ID. The response will include details such as the ID, ISO country code, receiver number, type, value, and the creation timestamp of the unsubscriber.
Note:
access_token
.{id}
in the endpoint with the actual ID of the unsubscriber you want to see.id required | string Example: {{sms_optout_id}} The SMS unsubscription ID. |
{- "code": 200,
- "data": {
- "created_at": "2023-12-19T08:56:59.000000Z",
- "id": "f37e13dc-f111-4bd0-a9ca-3f4295d24b47",
- "iso": "IN",
- "receiver": "9176xxxxxxxx",
- "type": "tag",
- "value": "tag1"
}, - "message": "Unsubscribers data",
- "status": "OK"
}
This endpoint allows you to update the details of an unsubscriber by making an HTTP PUT
request to the specified endpoint.
Note:
{id}
in the endpoint with the actual ID of the unsubscriber you want to edit.id required | string Example: {{sms_optout_id}} The SMS unsubscription ID. |
receiver required | string Enter the receiver that you want to edit. |
type | string Enum: "tag" "product" "sender" "all" Type of the receiver |
value | string Enter the value of the type. |
{- "receiver": "9176xxxxxxxx",
- "type": "tag",
- "value": ""
}
{- "code": 200,
- "data": {
- "created_at": "2023-12-19T08:56:59.000000Z",
- "id": "f37e13dc-f111-4bd0-a9ca-3f4295d24b47",
- "iso": "IN",
- "receiver": "9181xxxxxxxx",
- "type": "sender",
- "value": "demo"
}, - "message": "Receiver update successfully",
- "status": "OK"
}
This API endpoint sends an HTTP DELETE
request to remove a specific unsubscriber from the list of SMS suppressions.
Note:
{id}
in the endpoint with the actual ID of the unsubscriber you want to delete. id required | string Example: {{sms_optout_id}} The SMS unsubscription ID. |
{- "code": 200,
- "data": [ ],
- "message": "Deleted Successfully",
- "status": "OK"
}
This API endpoint allows you to import unsubscribers for SMS suppression by uploading a file.
Note: Few elements in the endpoint may change from service to service.
Parameter | Description | Limit | Required |
---|---|---|---|
file |
File containing unsubscriber numbers. (Supported file types: txt, csv, xls, xlsx) | 100 MB | Yes |
{- "message": "Receivers accepted for import",
- "status": "OK"
}
This endpoint makes an HTTP GET
request to retrieve a list of blocked templates for SMS suppression. The response will include the status, code, message, and data (an array of block templates). The meta section provides information about the current page and the total count.
Note:
access_token
and other parameters.filter[id] | string ID of the blocked template. |
filter[template_id] | string ID of the template added to the blocked list. |
filter[status] | number Enum: "0" "1" Status of the blocked template. |
{- "code": 200,
- "data": [
- {
- "id": 111,
- "status": 1,
- "template_id": "352"
}
], - "links": {
- "first": "https://portal.mobtexting.com/api/v2/sms/suppressions/templates?page=1",
- "last": "https://portal.mobtexting.com/api/v2/sms/suppressions/templates?page=1",
- "next": null,
- "prev": null
}, - "message": "Block templates list",
- "meta": {
- "current_page": 1,
- "from": 1,
- "last_page": 1,
- "links": [
- {
- "active": true,
- "label": "1",
- "url": "https://portal.mobtexting.com/api/v2/sms/suppressions/templates?page=1"
}
], - "path": "https://portal.mobtexting.com/api/v2/sms/suppressions/templates",
- "per_page": 15,
- "to": 1,
- "total": 1
}, - "status": "OK"
}
This endpoint allows you to add a new block template by making an HTTP POST
request.
Note: Few elements in the endpoint may change from service to service.
status | string Enum: "1" "0" Enter the status of the template. |
template_id required | string Enter the ID of the template to be added to the blocked list. |
{- "status": "9",
- "template_id": "{{block_template_id}}"
}
{- "code": 200,
- "data": {
- "id": 104,
- "status": 1,
- "template_id": "143"
}, - "message": "Block template added successfully",
- "status": "OK"
}
This HTTP DELETE
request is used to delete all blocked templates at once.
Note: Few elements in the endpoint may change from service to service.
{- "code": 200,
- "data": [ ],
- "message": "Deleted Successfully",
- "status": "OK"
}
This endpoint makes an HTTP GET
request to retrieve blocked template data for a specific template ID. The response will include the ID of the template, the template ID, and the status of the template.
Note:
access_token
.{id}
in the endpoint with the actual ID of the blocked template you want to see.id required | string Example: {{created_block_template_id}} ID of the blocked template. |
{- "code": 200,
- "data": {
- "id": 2,
- "status": 1,
- "template_id": "12346"
}, - "message": "Block template data",
- "status": "OK"
}
This endpoint allows you to update a specific blocked template using an HTTP PUT
request.
Note:
{id}
in the endpoint with the actual ID of the blocked template you want to edit.id required | string Example: {{created_block_template_id}} ID of the blocked template. |
status | string Enum: "1" "0" Enter the status of the template. |
template_id | string Enter the ID of the template to be updated. |
{- "status": "1",
- "template_id": "986458"
}
{- "code": 200,
- "data": {
- "id": 105,
- "status": "1",
- "template_id": "202"
}, - "message": "Block template updated successfully",
- "status": "OK"
}
This endpoint sends an HTTP DELETE
request to delete a specific blocked template by its ID.
Note:
{id}
in the endpoint with the actual ID of the blocked template you want to delete.id required | string Example: {{created_block_template_id}} ID of the blocked template. |
{- "code": 200,
- "data": [ ],
- "message": "Deleted Successfully",
- "status": "OK"
}
This endpoint allows you to import blocked templates by uploading a file.
Note: Few elements in the endpoint may change from service to service.
Parameter | Description | Limit | Required |
---|---|---|---|
file |
File containing template IDs. (Supported file types: txt, csv, xls, xlsx) | 100 MB | Yes |
caption |
Enter receiver caption | n/a | No |
filename |
Receiver file name | n/a | No |
{- "code": 200,
- "data": [ ],
- "message": "Blocked templates accepted for import",
- "status": "OK"
}
This endpoint makes an HTTP POST
request to generate an opt-in link. A number can be opted-in based on the selected service, sender, and/or tags by dynamic link creation that provides granularity on the opt-in feature.
sender | string Sender ID or phone number from which the SMS message will be sent. |
tag | Array of arrays <= 2 items An array of tags associated with the opt-in link. |
service | string Type of service for which the opt-in link is being generated. Refer to Products/Services |
{- "sender": "demo",
- "tag": [
- "tag1",
- "tag2"
], - "service": "T"
}
{- "code": 200,
- "message": "Optin link generated Successfully.",
- "status": "OK"
}
This endpoint makes an HTTP POST
request to generate an opt-out link. A number can be opted-out based on the selected service, sender, and/or tags by dynamic link creation that provides granularity on the opt-out feature.
sender | string Sender ID or phone number from which the SMS message will be sent. |
tag | Array of arrays <= 2 items An array of tags associated with the opt-out link. |
service | string Type of service for which the opt-out link is being generated. Refer to Products/Services |
{- "sender": "demo",
- "tag": [
- "tag1",
- "tag2"
], - "service": "T"
}
{- "code": 200,
- "message": "Optout link generated Successfully.",
- "status": "OK"
}
This API provides various options available for sending SMS messages. You can send the SMS in the below-mentioned ways:
Option | Description |
---|---|
Send SMS | Directly send SMS messages to recipients without any special encoding or features. |
Send SMS with auto-detect | Automatically detect the type of content in the SMS message, such as whether it contains normal text or Unicode characters, and handle it accordingly. |
Send SMS with normal text | Send SMS messages containing normal text without any special characters or formatting. |
Send SMS with unicode characters | Send SMS messages containing Unicode characters, allowing for the inclusion of non-standard characters and symbols. |
Send SMS with scheduled delivery | Schedule the delivery of SMS messages for a future date and time, allowing for planned communication with recipients at specific times. |
Send SMS with short link | This API enables you to send SMS messages with short links. When you include lengthy URLs in a message, the API automatically condenses them into short URLs before sending them to the user. |
Note:
sender required | string The registered and approved sender ID |
to required | string An array of message destination addresses. The destination address should include the country code prefix. |
message required | string The message content. |
service required | string The short code of the service name. Refer to Products/Services |
time | string <yyyy-mm-dd hh:mm:ss> The scheduled time for sending the SMS. |
type | string Enum: "U" "N" "A" The type of SMS to be sent is Unicode, Normal, or Auto-detect. |
flash | number Enum: "1" "0" Enable flash SMS ( |
custom | string Your own unique ID |
port | string Port number to which SMS has to be delivered. |
entity_id | string Principal Entity ID registered in the DLT portal. |
template_id | string The template ID registered in the DLT portal. |
max_units | number Enum: "2" "3" The maximum number of units allowed for the message. |
webhook_id | string The |
object Additional metadata for the SMS. |
{- "sender": "demo",
- "to": [
- "9176xxxxxxxx"
], - "message": "Your OTP is 123456",
- "service": "ENT",
- "time": "2024-03-10 14:06:10",
- "type": "A",
- "flash": 1,
- "custom": "12345",
- "port": "3908",
- "entity_id": "12345678",
- "template_id": "98456363",
- "max_units": 2,
- "webhook_id": "{{webhook_Id}}",
- "meta": {
- "tags": [
- "tag1"
]
}
}
{- "data": [
- {
- "charges": "0.023",
- "customid": null,
- "customid1": null,
- "id": "111d3609-3e3b-4828-999b-756595bcb90d:1",
- "iso_code": "IN",
- "length": 18,
- "mobile": "9176xxxxxxxx",
- "status": "AWAITING-DLR",
- "submitted_at": "2023-12-26 06:37:01",
- "units": 1
}
], - "message": "1 numbers accepted for delivery.",
- "group_id": "1a772ff9-26ff-4e2c-9921-93ba453ef967",
- "status": 200
}
This API endpoint makes an HTTP POST
request to send a template SMS using the template alias
name or template id
of the predefined template created in your account to specified recipients.
Dear {{name}}, Thanks for registering with us. Your details as follows {{email}}, {{phone}}.
Note: When sending a message, ensure that the data is passed into the data payload. Then the content will be automatically replaced within the template.
Dear Demo, Thanks for regisitering with us. Your details as follows demoxxxx@gmail.com, 9176XXXXXXXX.
Note: Few elements in the endpoint may change from service to service.
alias required | string An alias of the registered template. (Required if |
id required | string ID of the registered template. (Required if |
required | object Variable values for replacing in template content. |
object Additional metadata for the SMS. | |
required | object This block contains contact information. |
{- "alias": "variable",
- "data": {
- "email": "demoxxx@gmail.com",
- "name": "Demo",
- "phone": "9176xxxxxxxx"
}, - "meta": {
- "tags": [
- "tag1"
], - "webhook_id": "7tuytu",
- "foreign_id": "12345",
- "service": "ENT",
- "flash": 0
}, - "recipient": {
- "to": [
- "9176xxxxxxxx"
]
}
}
{- "status": 200,
- "message": "2 numbers accepted for delivery.",
- "group_id": "7c0291e6-0941-440b-b83c-3c0337abd733",
- "data": [
- {
- "id": "7c0291e6-0941-440b-b83c-3c0337abd733:1",
- "mobile": "9176xxxxxx",
- "status": "AWAITING-DLR",
- "units": 1,
- "length": 61,
- "charges": 0.1,
- "customid": null,
- "customid1": null,
- "iso_code": "IN",
- "submitted_at": "2022-11-18 07:08:26"
}, - {
- "id": "7c0291e6-0941-440b-b83c-3c0337abd733:2",
- "mobile": "9176xxxxxxxx",
- "status": "AWAITING-DLR",
- "units": 1,
- "length": 61,
- "charges": 0.1,
- "customid": null,
- "customid1": null,
- "iso_code": "IN",
- "submitted_at": "2022-11-18 07:08:26"
}
]
}
This API offers two options for sending text messages. You can send text messages using the following methods:
Option | Description |
---|---|
Send text message | This API endpoint makes an HTTP POST request to send a text message. |
Text message with short link | This API enables you to send text messages with short links. When you include lengthy URLs in a message payload, the API automatically condenses them into short URLs before sending them to the user. |
Note:
recipient
block inside the channel is related to a particular communication channel, and it is optional. The outside recipient
channel contains common recipients for every channel.required | Array of objects This block contains information related to the messaging channel. |
object Details about the message to be sent. | |
required | object This block contains contact information related to the channel. |
{- "channels": [
- {
- "name": "sms",
- "from": "{{sender_name}}",
- "recipient": "9170xxxxxxxx",
- "meta": {
- "service": "ENT",
- "foreign_id": "1234",
- "template_id": 98756647,
- "entity_id": 123456,
- "tags": [
- "diwali_offer"
], - "type": "A",
- "max_units": 2
}
}
], - "message": {
- "type": "text",
- "payload": {
- "text": "This is a test"
}
}, - "recipient": {
- "to": [
- "9176xxxxxxxx"
]
}
}
{- "data": [
- {
- "channel": "sms",
- "created_at": "2023-12-20 08:05:11",
- "credits": "0.023",
- "foreign_id": "",
- "from": "demo",
- "id": "1afe7dd2-45c4-4414-8e1c-93ba77ffe490:1",
- "status": "AWAITING-DLR",
- "to": "9176xxxxxxxx"
}
], - "message": "Message(s) Queued successfully",
- "status": "OK"
}
This endpoint makes an HTTP GET
request to retrieve the status of a specific SMS message using its ID. The request should include the message ID as a query parameter in the URL, and the data should be url_encoded
.
You can pass any of the query parameters to get a DLR response. If the request includes a group_id
or date
, pagination links will be provided. The number of records per page will be limited to 100.
Note: Few elements in the endpoint may change from service to service.
Status | Description |
---|---|
SCHEDULED |
The message is scheduled. Delivery has not yet been initiated. A message submitted with a scheduled delivery time may return this status when queried. This value was added for SMPP v5.0. MCs supporting earlier versions of SMPP v3.3 and SMPP v3.4 are likely to return ENROUTE for scheduled messages. |
ENROUTE or EN_ROUTE |
The message is in enroute state. This is a general state used to describe a message as being active within the MC. The message may be in retry or dispatched to a mobile network for delivery to the mobile. |
DELIVERED |
Message is delivered to the destination. No further deliveries will occur. |
EXPIRED |
Message validity period has expired. The message has failed to be delivered within its validity period and/or retry period. No further delivery attempts will be made. |
DELETED |
Message has been deleted. The message has been cancelled or deleted from the MC. No further delivery attempts will take place. |
UNDELIVERABLE |
Message is undeliverable. The message has encountered a delivery error and is deemed permanently undeliverable. No further delivery attempts will be made. Certain network or MC internal errors result in the permanent non-delivery of a message. Examples of such errors would be an unknown subscriber or network error that indicated that the given destination mobile was denied SMS service or could not support SMS. |
id | string Example: id={{message_id}} ID of the SMS message. |
mobile | string Mobile number with country code |
cid | string Your custom ID |
date | string For which date you want the report |
group_id | string Message group ID |
{- "code": 200,
- "data": [
- {
- "charges": 0.023,
- "custom": "",
- "custom1": "",
- "delivered_at": "2023-12-26 16:42:36",
- "id": "952d4e27-65c4-4cb9-a7e7-41982c770662:1",
- "length": 14,
- "location": "",
- "mobile": "9176xxxxxxxx",
- "provider": "",
- "sender": "demo",
- "service": "ENT",
- "status": "DELIVRD",
- "submitted_at": "2023-12-26 10:12:30",
- "units": 1
}
], - "message": "OK",
- "status": "OK"
}
This endpoint allows you to retrieve the pricing information for sending SMS messages. By making a GET
request, you can obtain the pricing details for different destinations and message types and view all country-wise pricing lists.
Note:
access_token
and other parameters.filter[iso] | string The ISO code of the country. (e.g., IN, AF, etc.) |
filter[service] | string The short code of the service name. Refer to Products/Services |
filter[status] | number Enum: "0" "1" Status of the SMS messages. |
{- "code": 200,
- "data": [
- {
- "calling_code": 91,
- "country_name": "India",
- "created_at": "2023-05-24T05:30:14.000000Z",
- "currency": null,
- "iso": "IN",
- "sale_price": "0.2000",
- "service": "A2P",
- "service_name": "SMS A2P",
- "status": 1,
- "updated_at": "2023-05-24T05:30:14.000000Z"
}
], - "links": {
- "first": "https://portal.mobtexting.com/api/v2/sms/pricing?page=1",
- "last": "https://portal.mobtexting.com/api/v2/sms/pricing?page=16",
- "next": "https://portal.mobtexting.com/api/v2/sms/pricing?page=2",
- "prev": null
}, - "message": "Pricing List",
- "meta": {
- "current_page": 1,
- "from": 1,
- "last_page": 16,
- "links": [
- {
- "active": false,
- "label": "« Previous",
- "url": null
}
], - "path": "https://portal.mobtexting.com/api/v2/sms/pricing",
- "per_page": 15,
- "to": 15,
- "total": 231
}, - "status": "OK"
}
The SMPP (Short Message Peer-to-Peer) Gateway is a protocol utilized by the telecommunications industry for seamless exchange of SMS messages between Short Message Service Centers (SMSC) and External Short Messaging Entities (ESME). The SMPP protocol is transmitted via TCP/IP, enabling swift and efficient delivery of SMS messages.
The messaging platform employs the SMPP v3.4 Protocol Specification Issue 1.5. It is worth noting that our platform is designed to maintain backward compatibility with SMPP v3.3. Therefore, it is recommended to refer to both this document and the SMPP v3.4 Specification v1.5 to ensure a comprehensive understanding of the functionality and features associated with SMPP. Prior familiarity with SMPP is assumed while reading this documentation.
CPaaS Alerts has multiple SMPP servers for you to connect to. Each SMPP server offers the ability to connect to it via the regular (plaintext) method or via a TLS1.0 or better connection.
Here is an overview of the available servers:
Hostname | Plain Port | TLS Port |
---|---|---|
smpp1.txtsms.me | 3634 | 3635 |
smpp2.txtsms.me | 3634 | 3635 |
Mandatory TLV | Tag value in decimal | Tag value in hex |
---|---|---|
PE_ID | 5120 | 1400 |
Template_ID | 5121 | 1401 |
Telemarketer_ID(TM_ID) | 51212 | 1402 |
Clients may connect to the Messaging Platform Server multiple times. This may be of importance if the client wishes to deploy multiple applications simultaneously. To connect to the platform, one needs to specify the following parameters:
IP Address and Port: This is the TCP/IP endpoint on which the ESME should connect to the platform.
Username: This is the username (system_id
) of your account configured on the platform.
Password: Password for the above account. Required for security reasons to prevent unauthorized access to your account.
System_type: Set the system_type field to smpp
.
Interface_version: The client application should connect with the interface_version field set to 0x34 (52 decimal) if it is using SMPP v3.4; otherwise, the platform assumes that the application uses SMPP v3.3.
enquire_link: The application should issue an enquire_link every minute. This will ensure the link stays active even when it is not in use. The messaging platform will automatically disconnect any link that has been inactive for more than 5 minutes.
Upon setting up an SMPP account for you, you will receive the maximum number of allowed binds and a designated maximum throughput. Typically, these values may be set to something like 3 binds and 50 messages per second.
It’s worth noting that these values are enforced on a per-server basis. In the example mentioned above, you can establish a total of nine binds and achieve a combined throughput of 150 messages per second when connecting to all servers.
Please be aware that, for maintenance purposes, we can only guarantee the availability of one server at any given time. Therefore, we strongly advise connecting to all servers to ensure uninterrupted service.
CPaaS Alerts employs a message relaying system that is connection and server-agnostic. This means that when you send an MT message via a submit_sm
PDU on connection A, you may receive the corresponding DLR in the form of a deliver_sm
on connection B, given that both connections are bound with the same username.
This holds true even if the connections are established with different servers. For example, if connection A is made to the SMPP01 server and connection B to the SMPP02 server, the scenario described above would still apply.
Messages may be submitted with either submit_sm
or data_sm
, using either the short_message
or message_payload
fields. The message length may not exceed the byte limit for the network that the message is being sent to (for example, 140 bytes on GSM networks).
The platform does not support submit_multi
. If the same message has to be sent to multiple destinations, each message must be sent separately.
Concatenated messages are supported using the User Data Header (UDH), which is included in the message size byte limit.
A positive response to a submit
will contain an error code of zero and a non-null message reference.
A negative response will contain a vendor-specific error code. The complete set of SMPP error codes and their associated values are defined in the following table.
Error Number | Error Name | Error Description |
---|---|---|
0x00000000 | ESME_ROK | No Error |
0x00000001 | ESME_RINVMSGLEN | Message too long |
0x00000002 | ESME_RINVCMDLEN | Command length is invalid. |
0x00000003 | ESME_RINVCMDID | Command ID is invalid or not supported. |
0x00000004 | ESME_RINVBNDSTS | Incorrect binding status for the given command |
0x00000005 | ESME_RALYBND | Already bound |
0x00000006 | ESME_RINVPRTFLG | Invalid Priority Flag |
0x00000007 | ESME_RINVREGDLVFLG | Invalid registered delivery flag |
0x00000008 | ESME_RSYSERR | System error |
0x0000000A | ESME_RINVSRCADR | Invalid source address |
0x0000000B | ESME_RINVDSTADR | Invalid destination address |
0x0000000C | ESME_RINVMSGID | Message ID is invalid. |
0x0000000D | ESME_RBINDFAIL | Bind failed |
0x0000000E | ESME_RINVPASWD | Invalid password |
0x0000000F | ESME_RINVSYSID | Invalid System ID |
0x00000011 | ESME_RCANCELFAIL | Cancellation message failed. |
0x00000013 | ESME_RREPLACEFAIL | Message replacement failed |
0x00000014 | ESME_RMSSQFUL | Message queue is full. |
0x00000015 | ESME_RINVSERTYP | Invalid service type |
0x00000033 | ESME_RINVNUMDESTS | Invalid number of destinations |
0x00000034 | ESME_RINVDLNAME | Invalid distribution list name |
0x00000040 | ESME_RINVDESTFLAG | Invalid destination flag |
0x00000042 | ESME_RINVSUBREP | Invalid submit with replace request |
0x00000043 | ESME_RINVESMCLASS | Invalid ESM class set |
0x00000044 | ESME_RCNTSUBDL | Invalid submission to the distribution list |
0x00000045 | ESME_RSUBMITFAIL | Submitting a message has failed. |
0x00000048 | ESME_RINVSRCTON | Invalid source address type of number (TON) |
0x00000049 | ESME_RINVSRCNPI | Invalid source address numbering plan (NPI) |
0x00000050 | ESME_RINVDSTTON | Invalid destination address type of number (TON) |
0x00000051 | ESME_RINVDSTNPI | Invalid destination address numbering plan (NPI) |
0x00000053 | ESME_RINVSYSTYP | Invalid system type |
0x00000054 | ESME_RINVREPFLAG | Invalid replace_if_present flag |
0x00000055 | ESME_RINVNUMMSGS | Invalid number of messages |
0x00000058 | ESME_RTHROTTLED | Throttling error |
0x00000061 | ESME_RINVSCHED | Invalid scheduled delivery time |
0x00000062 | ESME_RINVEXPIRY | Invalid validity period value |
0x00000063 | ESME_RINVDFTMSGID | A predefined message was not found. |
0x00000064 | ESME_RX_T_APPN | ESME Receiver temporary error |
0x00000065 | ESME_RX_P_APPN | ESME Receiver permanent error |
0x00000066 | ESME_RX_R_APPN | ESME Receiver reject message error |
0x00000067 | ESME_RQUERYFAIL | Message query request failed. |
0x000000C0 | ESME_RINVTLVSTREAM | Error in the optional part of the PDU body |
0x000000C1 | ESME_RTLVNOTALLWD | TLV is not allowed. |
0x000000C2 | ESME_RINVTLVLEN | Invalid parameter length |
0x000000C3 | ESME_RMISSINGTLV | Expected TLV missing |
0x000000C4 | ESME_RINVTLVVAL | Invalid TLV value |
0x000000FE | ESME_RDELIVERYFAILURE | Transaction delivery failure |
0x000000FF | ESME_RUNKNOWNERR | Unknown error |
0x00000100 | ESME_RSERTYPUNAUTH | ESME is not authorised to use specified service types. |
0x00000101 | ESME_RPROHIBITED | ESME is prohibited from using specified operations. |
0x00000102 | ESME_RSERTYPUNAVAIL | A specified service type is unavailable. |
0x00000103 | ESME_RSERTYPDENIED | A specified service type is denied. |
0x00000104 | ESME_RINVDCS | Invalid data coding scheme |
0x00000105 | ESME_RINVSRCADDRSUBUNIT | Invalid source address subunit |
0x00000106 | ESME_RINVSTDADDRSUBUNIR | Invalid destination address subunit |
0x0000040B | ESME_RINVBALANCE | Insufficient credits to send a message |
The messaging platform supports the following two types of data coding schemes: GSM 03.38 Encoding (default) Latin 1 (ISO-8859-1) encoding
The default character set is GSM 338. Although for data_coding = 1
, the character set GSM 03.38 is supported, it is not recommended, as it is known to cause problems with character encoding. Please set data_coding = 3
for ISO-8859-1 (if and only if told so explicitly) encoded messages and data_coding = 0
for GSM 03.38 encoded messages.
For Unicode messages, you have to set data_coding = 8
, and the message is expected in UTF-16 Big Endean format.
The messaging platform will return a delivery report (intermediate and/or final, depending on the route) for a specific message to the client application when the registered_delivery field, while submitting the message, is set to 1. To retrieve the delivery report from our server, the client will have to connect to the messaging platform in the receiver or transceiver mode.
Status and error codes that can be returned by the messaging platform.
Note: The error codes and status may vary depending on the region and operator.
Code | Status | Status Description |
---|---|---|
000 | DELIVRD | Delivered to SIM. |
001 | INVALID-SUB | Unidentified subscriber. |
002 | INVALID-SUB | Illegal subscriber |
003 | ABSENT-SUB | Unidentified subscriber. |
004 | HANDSET-ERR | Illegal equipment |
005 | BARRED | SMS is prohibited. |
006 | HANDSET-ERR | MS does not support SMS. |
007 | HANDSET-ERR | MS is receiving an error. |
008 | NET-ERR | Facility not supported. |
009 | MEMEXEC | Handset memory is full. |
010 | ABSENT-SUB | Absent subscriber |
011 | FAILED | SMSC system failure |
012 | NET-ERR | Gateway mobile switching error |
013 | MOB-OFF | Mobile handset switched off |
014 | FAILED | SMS is undelivered due to roaming limitations. |
015 | INVALID-SUB | Unidentified subscriber |
016 | HANDSET-BUSY | Subscriber is busy. |
017 | NET-ERR | Resources cannot be used at the GMSC level. |
018 | SERIES-BLK | Series blocked |
019 | NET-ERR | Submission error or invalid input data |
020 | BARRED | CUG reject |
021 | EXPIRED | SMS timeout |
034 | UNDELIV | Unknown Error |
045 | FAILED | Unknown Error |
099 | UNDELIV | Unknown Error |
400 | SERIES-BLOCK | Series has been temporarily or permanently blocked. |
401 | NO-CREDITS | Credit exhausted. |
402 | NO-ACCOUNT | Invalid account. |
403 | SERVER-ERR | Unknown Error |
404 | INV-NUMBER | Invalid destination number |
405 | SERVER-ERR | ESME client error |
406 | SERVER-ERR | ESME client error |
407 | SPAM | Sent illegal content |
408 | DNDNUMB | Number registered in the DND database. |
430 | SERVER-ERR | Unknown Error |
431 | SERVER-ERR | Unknown Error |
432 | SERVER-ERR | Unknown Error |
433 | SERVER-ERR | Unknown Error |
450 | BLACKLST | Number blocklisted to receive messages |
451 | SNDR-BLOCK | Sender ID has been blocked. |
452 | TEMPLATE-NOT-FOUND | No matching templates |
453 | INV-TEMPLATE | Message rejected as template not allotted for ESME |
454 | INV-SENDER | Message rejected as sender ID not allotted for ESME |
455 | NOT-OPTIN | Message rejected as number not in optin list |
456 | OPTOUT-REJ | Rejected as a number optout to receive messages |
457 | PROMO-TMOUT | Promotional time exceeded |
458 | REJECTED | Unknown Error |
459 | NOTALLOWED | Country is not allowed to send SMS. |
460 | DUPLICATE | Same content was sent. |
461 | UNDELIV | Unknown Error |
462 | FAILED | Unknown Error |
463 | THROTTLED | Maximum Sent Limit is Reached |
778 | REJ-MULTIPART | All message parts are not delivered to the handset. |
777 | DLT-REJECTED | Invalid sender ID or invalid template |
780 | DLT-INV-TMID | Invalid DLT Telemarketer ID |
781 | DLT-INV-ENTITY | Invalid Entity DLT ID |
782 | DLT-INV-TM-ID | Invalid DLT Template ID |
783 | DLT-TM-VAR-EXECEED | Template variable exceeded 30 characters. |
784 | DLT-ENTITY-NOT-FOUND | Entity ID not found |
785 | DLT-TM-BLACKLST | Template ID is blacklisted. |
786 | DLT-ENTITY-BLACKLST | Entity ID is blacklisted. |
787 | DLT-HEADER-INACTIVE | Sender Inactive |
788 | DLT-TM-INACTIVE | Template is inactive. |
789 | DLT-SENDER-NOT-REG-TM | Sender is not registered for the template. |
790 | INV-PROVISION | Sender Invalid Provision |
791 | INV-SERVICE | Invalid Service Type |
792 | INV-SCHEDULE | Invalid Schedule |
Note: Subscribe here to get SMPP messages and DLRS through Webhook; refer to Subscription.
RCS Messaging is the evolution of SMS, enabling enterprises and individuals to exchange rich media like images, videos, and interactive content with the same ease as SMS.
Features of RCS messaging:
Verified messages
Sending rich card messages like images and audio/video files
Rich card carousels
Message with a suggested action list
Message with a suggested reply set
Two-way messaging
Message revoking for undelivered SMS
Name | Description |
---|---|
queued | A message has been received and queued. |
dispatched | A message has been dispatched. |
sent | A message has been sent to the end user. |
delivered | The message has been successfully delivered to the end user. |
read | The message has been read by the end user. |
deleted | A message has been deleted or expired in the application. |
failed | The message has failed. |
blacklist | The sender block is listed. |
offline | The device is offline. |
rejected | The device rejects the message. |
expired | Unable to reach end device |
This endpoint makes an HTTP GET
request to retrieve a list of RCS templates created under your account. The response will include information about the RCS templates, such as their names, IDs, and other relevant details.
Note: Kindly replace the token with your respective access_token
and other parameters.
filter[id] | string ID of the template. |
filter[name] | string Name of the template. |
filter[type] | string Enum: "text" "media" Type of the template. |
filter[status] | string Enum: "0" "1" "2" Status of the template. ( |
{- "status": "OK",
- "code": 200,
- "message": "Templates List",
- "data": [
- {
- "id": "0185a2a7-7295-4a29-b639-b26b8d72afa3",
- "name": "Richcard",
- "number": null,
- "alias": "richcard-41",
- "type": "interactive",
- "category": "ACCOUNT UPDATE",
- "language": "Arabic",
- "payload": null,
- "status": 0,
- "created_at": "2024-03-21T06:38:16.000000Z",
- "updated_at": "2024-03-21T06:38:16.000000Z"
}
], - "links": {
- "first": "https://portal.mobtexting.com/api/v2/rcs/templates?page=1",
- "last": "https://portal.mobtexting.com/api/v2/rcs/templates?page=18",
- "prev": null,
- "next": "https://portal.mobtexting.com/api/v2/rcs/templates?page=2"
}, - "meta": {
- "current_page": 1,
- "from": 1,
- "last_page": 18,
- "links": [
- {
- "url": null,
- "label": "« Previous",
- "active": false
}, - {
- "url": "https://portal.mobtexting.com/api/v2/rcs/templates?page=1",
- "label": "1",
- "active": true
}
], - "path": "https://portal.mobtexting.com/api/v2/rcs/templates",
- "per_page": 15,
- "to": 15,
- "total": 270
}
}
This API provides various options for creating RCS templates.
Templates can be created as required using the methods provided below:
Method | Description |
---|---|
Text message | This API enables the creation of templates using text as the primary content type. |
Text message with suggestion | Enhance user engagement by providing suggested responses within text messages, streamlining interactions and improving user experience. |
Rich card with button image | Present visually appealing rich cards featuring images and interactive buttons, providing users with rich content experiences. |
Rich card with button video | Incorporate videos into rich card messages, allowing for dynamic and engaging multimedia content. |
Rich card with button document | Share documents and files effortlessly through rich cards featuring actionable buttons, streamlining the exchange of information and resources. |
Carousel template | The Carousel Template API provides a versatile solution for creating interactive carousels with rich multimedia content, facilitating engaging user experiences across messaging platforms. |
category required | string Value: "text_message" The category of the template. |
is_conversation required | boolean Enum: "true" "false" Indicates whether the template is service or non-service template. |
language required | string Enum: "eu" "en_US" The language of the template. |
name required | string The name of the template. |
number required | string Mobile number without country code |
required | object The payload of the template |
type required | string Value: "template" The type of the template. |
{- "category": "text_message",
- "is_conversation": false,
- "language": "en",
- "name": "vi_text",
- "number": "73xxxxxxxx",
- "payload": {
- "body": {
- "payload": {
- "text": "do you like rcs?"
}, - "type": "text"
}
}, - "type": "template"
}
{- "code": 200,
- "data": {
- "alias": "vi-carousel-3",
- "category": "CAROUSEL",
- "created_at": "2024-01-22T09:59:23.000000Z",
- "id": "4bc11ce7-6b65-494c-a82c-c21b00acc71f",
- "language": "English",
- "name": "vi_carousel",
- "number": "73xxxxxxxx",
- "payload": "{\"type\":\"template\",\"payload\":{\"cards\":[{\"title\":\"This is the first card title\",\"description\":\"This is the first card description\",\"body\":{\"type\":\"video\",\"payload\":{\"url\":\"http:\\/\\/commondatastorage.exampleapis.com\\/gtv-videos-bucket\\/sample\\/BigBuckBunny.mp4\",\"filename\":\"BigBuckBunny.mp4\",\"height\":\"TALL\"}},\"choices\":{\"replies\":[{\"type\":\"text first\",\"payload\":{\"text\":\"yes\",\"content\":\"yes\"}},{\"type\":\"text first2\",\"payload\":{\"text\":\"no\",\"content\":\"No\"}}],\"actions\":[{\"type\":\"url\",\"payload\":{\"title\":\"Click Here\",\"url\":\"https:\\/\\/example.com\"}},{\"type\":\"dial\",\"payload\":{\"title\":\"Click Here\",\"phone_number\":\"+9181xxxxxxxx\"}},{\"type\":\"location\",\"payload\":{\"latitude\":12.912985000000001,\"longitude\":77.599504999999994}}]}},{\"title\":\"This is the second card title\",\"description\":\"This is the second card description\",\"body\":{\"type\":\"image\",\"payload\":{\"url\":\"https:\\/\\/www.viber.com\\/app\\/uploads\\/viber-logo.png\",\"height\":\"TALL\"}},\"choices\":{\"replies\":[{\"type\":\"text second\",\"payload\":{\"text\":\"yes\",\"content\":\"yes\"}},{\"type\":\"text second2\",\"payload\":{\"text\":\"no\",\"content\":\"No\"}}],\"actions\":[{\"type\":\"url\",\"payload\":{\"title\":\"Click Here\",\"url\":\"https:\\/\\/example.com\"}},{\"type\":\"dial\",\"payload\":{\"title\":\"Click Here\",\"phone_number\":\"+9181xxxxxxxx\"}},{\"type\":\"location\",\"payload\":{\"latitude\":12.912985000000001,\"longitude\":77.599504999999994}}]}}]}}",
- "status": 2,
- "type": "template",
- "updated_at": "2024-01-22T09:59:23.000000Z"
}, - "message": "Template created successfully.",
- "status": "OK"
}
This endpoint makes an HTTP GET
request to retrieve details of a specific template by providing its ID in the URL. The response will include the status of the request, a code indicating the result, a message, and the data related to the template.
Note:
{id}
in the endpoint with the actual ID of the template you want to see.id required | string Example: {{template_id}} Name of the template. |
{- "code": 200,
- "data": {
- "alias": "vi-text-11",
- "category": "TEXT_MESSAGE",
- "created_at": "2024-01-16T11:59:01.000000Z",
- "id": "a9aff671-5c1c-41c0-9d8a-232dcbee32a8",
- "language": "English",
- "name": "vi_text",
- "number": "73xxxxxxxx",
- "payload": "{\"type\":\"template\",\"payload\":{\"body\":{\"type\":\"text\",\"payload\":{\"text\":null}}}}",
- "status": 2,
- "type": "template",
- "updated_at": "2024-01-16T11:59:01.000000Z"
}, - "message": "Templates List",
- "status": "OK"
}
This endpoint allows you to update an existing RCS template by sending an HTTP PUT
request under your account.
Note:
{id}
in the endpoint with the actual ID of the template you want to edit.id required | string Example: {{template_id}} Name of the template. |
category required | string Category of the template. |
language required | string Indicates the language of the template. |
name required | string Enter the name of the template that you want to refer to. |
number required | string Receivers mobile number |
required | object The payload of the template |
type required | string Enum: "text" "interactive" "media" The type of template. |
{- "type": "text",
- "name": "text_template",
- "language": "en",
- "category": "PAYMENT_UPDATE",
- "number": "73xxxxxxxx",
- "payload": {
- "text": "Hi, This is Rcs update template message."
}
}
{- "code": 200,
- "data": {
- "id": "3b58b499-e184-4cdf-9226-8ddae27e0821",
- "name": "text123",
- "number": "91861xxxxxxx",
- "alias": "text123",
- "type": "text",
- "category": "Marketing",
- "language": "English",
- "payload": "{\"type\":\"text\",\"payload\":{\"text\":\"Hi, This is Rcs update test message.\"}}",
- "status": 1,
- "created_at": "2023-02-23T05:56:58.000000Z",
- "updated_at": "2023-02-23T06:27:29.000000Z"
}, - "message": "Template Updated Successfully",
- "status": "OK"
}
This endpoint sends an HTTP DELETE
request to delete an RCS template by its ID under your account.
Note:
{id}
in the endpoint with the actual ID of the template you want to delete.id required | string Example: {{template_id}} Name of the template. |
{- "code": 200,
- "data": 1,
- "message": "Template deleted successfully",
- "status": "OK"
}
This endpoint makes an HTTP GET
request to retrieve a list of unsubscribers from the RCS suppressions. The response will contain the details of the unsubscribed phone numbers.
Note:
access_token
and other parameters.{- "code": 200,
- "data": [
- {
- "created_at": "2023-12-18T12:22:06.000000Z",
- "id": 425,
- "iso": "IN",
- "receiver": "919412513258",
- "type": "all",
- "value": "*"
}
], - "links": {
- "first": "https://portal.mobtexting.com/api/v2/rcs/suppressions/unsubscribers?page=1",
- "last": "https://portal.mobtexting.com/api/v2/rcs/suppressions/unsubscribers?page=2",
- "next": "https://portal.mobtexting.com/api/v2/rcs/suppressions/unsubscribers?page=2",
- "prev": null
}, - "message": "Unsubscribers list",
- "meta": {
- "current_page": 1,
- "from": 1,
- "last_page": 2,
- "links": [
- {
- "active": false,
- "label": "« Previous",
- "url": null
}
], - "path": "https://portal.mobtexting.com/api/v2/rcs/suppressions/unsubscribers",
- "per_page": 15,
- "to": 15,
- "total": 22
}, - "status": "OK"
}
This endpoint allows you to add an unsubscriber to the list of unsubscribers for RCS communications.
Note: Few elements in the endpoint may change from service to service.
receiver required | string Enter the receiver that you want to add. |
type | string Enum: "tag" "product" "sender" "all" Type of the receiver |
value | string Enter the value of the type. |
{- "receiver": "9176xxxxxxxx",
- "type": "tag",
- "value": "tag1"
}
{- "code": 200,
- "data": {
- "created_at": "2023-04-24T12:55:35.000000Z",
- "id": "0c8fac6b-32cd-43b2-9286-309fede0b47d",
- "iso": "IN",
- "receiver": "9198xxxxxxxx",
- "type": "tag",
- "value": "promo"
}, - "message": "Receiver added successfully",
- "status": "OK"
}
This HTTP DELETE
request is used to remove all unsubscribers from the RCS suppression list.
Note: Few elements in the endpoint may change from service to service.
{- "code": 200,
- "data": [ ],
- "message": "Deleted Successfully",
- "status": "OK"
}
This endpoint retrieves information about a specific RCS unsubscriber by ID. The response will include details such as the ID, ISO country code, receiver number, type, value, and the creation timestamp of the unsubscriber.
Note:
access_token
.{id}
in the endpoint with the actual ID of the unsubscriber you want to see.id required | string Example: {{rcs_optout_id}} The RCS unsubscription ID. |
{- "code": 200,
- "data": {
- "created_at": "2023-12-19T08:56:59.000000Z",
- "id": "f37e13dc-f111-4bd0-a9ca-3f4295d24b47",
- "iso": "IN",
- "receiver": "9176xxxxxxxx",
- "type": "tag",
- "value": "tag1"
}, - "message": "Unsubscribers data",
- "status": "OK"
}
This endpoint allows you to update the details of an unsubscriber by making an HTTP PUT
request to the specified endpoint.
Note:
{id}
in the endpoint with the actual ID of the unsubscriber you want to edit.id required | string Example: {{rcs_optout_id}} The RCS unsubscription ID. |
receiver required | string Enter the receiver that you want to edit. |
type | string Enum: "tag" "product" "sender" "all" Type of the receiver |
value | string Enter the value of the type. |
{- "receiver": "9176xxxxxxxx",
- "type": "tag",
- "value": ""
}
{- "code": 200,
- "data": {
- "created_at": "2023-12-19T08:56:59.000000Z",
- "id": "f37e13dc-f111-4bd0-a9ca-3f4295d24b47",
- "iso": "IN",
- "receiver": "9181xxxxxxxx",
- "type": "account",
- "value": "adef759b-fbb3-4452-9aed-518d1c8b7a4c"
}, - "message": "Receiver update successfully",
- "status": "OK"
}
This API endpoint sends an HTTP DELETE
request to remove a specific unsubscriber from the list of RCS suppressions.
Note:
{id}
in the endpoint with the actual ID of the unsubscriber you want to delete. id required | string Example: {{rcs_optout_id}} The RCS unsubscription ID. |
{- "code": 200,
- "data": [ ],
- "message": "Deleted Successfully",
- "status": "OK"
}
This API endpoint allows you to import unsubscribers for RCS suppression by uploading a file.
Note: Few elements in the endpoint may change from service to service.
Parameter | Description | Limit | Required |
---|---|---|---|
file |
File containing unsubscriber numbers. (Supported file types: txt, csv, xls, xlsx) | 100 MB | Yes |
{- "message": "Receivers accepted for import",
- "status": "OK"
}
This API provides various options available for sending non-template RCS message. You can send the non-template RCS message in the below-mentioned ways:
Option | Description |
---|---|
Sending text message | This API enables seamless transmission of text messages |
Sending image message | With this API, you can effortlessly send images, enriching user experiences and enhancing visual communication. |
Sending video message | You can utilize this API to transmit video messages, enabling the seamless sharing of dynamic visual content. |
Sending carousel message | You can create multiple cards and interactive carousels, allowing users to swipe through diverse content like images, videos, or text. |
Sending interactive message | Enhance user interaction with interactive messages featuring clickable buttons. |
Sending card message | This API empowers developers to transmit structured card-based messages, providing concise and visually appealing content delivery to users. |
Note:
recipient
block inside the channel is related to a particular communication channel, and it is optional. The outside recipient
channel contains common recipients for every channel.required | Array of objects Specifies the channels through which the message will be sent. |
object Specifies the message details. | |
required | object Specifies the recipient of the message. |
{- "channels": [
- {
- "from": "{{channel.rcs.from}}",
- "name": "rcs",
- "meta": {
- "foreign_id": "your-custom-id",
- "tags": [
- "tag1",
- "tag2"
]
}
}
], - "message": {
- "payload": {
- "text": "This is a simple text message from rcs channel"
}, - "type": "text"
}, - "recipient": {
- "to": [
- "{{receiver}}"
]
}
}
{- "data": [
- {
- "channel": "rcs",
- "created_at": "2022-11-18T06:47:30.064131Z",
- "credits": "0.8128",
- "foreign_id": null,
- "from": "4ffda306-f34a-4801-a1c3-ef3524472505",
- "id": "bb3da4d2-051f-4ab5-a138-7b27fb3dd5ac",
- "recipient": "9176xxxxxxxx",
- "status": "queued"
}
], - "message": "Messages queued successfully",
- "status": "OK"
}
This API endpoint makes an HTTP POST
request to send a RCS message using a template. You can send messages using the template alias
name or template id
of the predefined template created in your account to specified recipients.
Example Template:
Dear {{name}}, Thanks for registering with us. Your details as follows {{email}}, {{phone}}.
Note: When sending a message, ensure that the data is passed into the data payload. Then the content will be automatically replaced within the template.
Output Message:
Dear Demo, Thanks for regisitering with us. Your details as follows demoxxxx@gmail.com, 9189XXXXXXXX.
Note: Few elements in the endpoint may change from service to service.
alias required | string An alias of the registered template. (Required if |
id required | string ID of the registered template. (Required if |
required | object Variable values for replacing in template content. |
object Additional metadata for the RCS. | |
required | object This block contains contact information. |
{- "alias": "template-name",
- "data": {
- "email": "Demo@gmail.com",
- "name": "Demo",
- "phone": "{{receiver}}"
}, - "recipient": {
- "to": [
- "91XXXXXX",
- "91XXXXXX"
]
}, - "meta": {
- "webhook_id": "0798d163-7ca2-4mb6-8c16-c62866xxxxxxx",
- "foreign_id": "12345",
- "tags": [
- "tag1",
- "tag2"
]
}
}
{- "data": [
- {
- "id": "bd14332d-4315-42d3-a27e-b21fd40xxxxx",
- "channel": "rcs",
- "from": "ce7c551a-c65a-4a07-a33a-cbe6afxxxxxx",
- "recipient": "9189195xxxxx",
- "credits": 0,
- "created_at": "2023-01-24T09:46:09.939286Z",
- "foreign_id": null,
- "status": "notallowed"
}, - {
- "id": "723d3daf-0f4d-4b26-97c5-3de009xxxxxx",
- "channel": "rcs",
- "from": "ce7c559a-c65a-4a07-a33a-cbe6afxxxxxx",
- "recipient": "9189196xxxxx",
- "credits": 0,
- "created_at": "2023-01-24T09:46:09.955824Z",
- "foreign_id": null,
- "status": "notallowed"
}
], - "message": "Message(s) Queued successfully",
- "status": 200
}
This endpoint makes an HTTP GET
request to retrieve the status of a specific RCS message using its ID.
You can pass any of the query parameters to get a DLR response.
Note: Few elements in the endpoint may change from service to service.
id | string Example: id={{message_id}} ID of the RCS message. |
mobile | string Mobile number with country code |
{- "data": [
- {
- "id": "cdf829fd-5148-44bb-8433-xxxxx",
- "channel": "rcs",
- "from": "700969ca-0cb2-11ec-XXXXX",
- "to": "918867135684",
- "credits": "1.0000",
- "created_at": "2021-09-07T00:07:50.000000Z",
- "foreign_id": "MsT356dI2hRzm9fTdBJeodbw",
- "status": "delivered",
- "delivered_at": "2021-09-07 11:07:55",
- "read_at": "2021-09-07T05:37:58.000000Z"
}
], - "message": "OK",
- "status": "OK"
}
This endpoint allows you to retrieve the pricing information for sending RCS messages. By making a GET
request, you can obtain the pricing details for different destinations and message types and view all country-wise pricing lists.
Note:
access_token
and other parameters.filter[iso] | string The ISO code of the country. (e.g., IN, AF, etc.) |
filter[service] | string The short code of the service name. Refer to Products/Services |
filter[subservice] | string The short code of the service name. Refer to Products/Services. |
filter[status] | number Enum: "0" "1" Status of the RCS messages. |
{- "code": 200,