You can use the Multiple Transactional Batch RCS API to send individually triggered RCS (Rich Communication Services) messages to multiple recipients in a single request. Each request can contain up to 20 messages, eliminating the need to call the transactional single RCS endpoint separately for each recipient.
Use this API when a specific event in your system triggers transactional messages for multiple recipients at once.
To send Transactional RCS messages, Transactional RCS must be enabled for your panel. Otherwise, API requests return a 403 Forbidden response with the message “Transactional RCS messaging is disabled”. Contact the Insider One team to have it enabled.
Refer to Webhooks for Transactional RCS to configure callback URLs and receive delivery events.
Endpoint and headers
Visit our Postman collection to test this request.
Headers
Header | Sample value | Description |
|---|---|---|
X-INS-AUTH-KEY | 1a2b3c4d5e6f | This key is required to authorize your request. Refer to API Authentication Tokens to generate your token. If you need to test Transactional RCS, request an API key from the Insider One team. |
Content-Type | application/json | This header specifies the media type of the request. |
Body parameters
The request body contains the shared batch configuration and a messages array for recipient-specific message details.
Parameter | Description | Data type | Required |
|---|---|---|---|
messages | Array containing the message details for each recipient. Must contain at least 1 and at most 20 entries. | Array | Yes |
fallbackEnabled | Enables automatic SMS fallback for all messages in the batch. Defaults to false. | Boolean | No |
fallbackSender | Shared SMS sender name used for fallback messages. Used only when fallbackEnabled is true. If omitted, your default transactional SMS sender is used. | String | No |
All messages in a batch share the same SMS fallback configuration. The fallbackEnabled and fallbackSender fields are configured once at the batch level and apply to every message in the request.
Message object parameters
Each object in the messages array contains the following fields.
Field | Description | Data type | Required |
|---|---|---|---|
phoneNumber | Recipient phone number in E.164 format. | String | Yes |
rcsContent | The RCS message body sent to this recipient. It uses the same text or media structure as the single-send endpoint. Refer to the RCS Content. | Object | Yes |
fallbackContent | The SMS body sent to this recipient if SMS fallback is triggered. Required when the batch-level fallbackEnabled field is true. Maximum 670 characters. Provide this value separately for each recipient; it is not copied from rcsContent.text. | String | Conditional |
callback | The callback URL that receives webhook events for this recipient. | URL | No |
uniqueArgs | Tracking arguments for this recipient. These values are returned in webhook events. | Object | No |
settings | Recipient-specific URL shortening and click tracking settings. | Object | No |
fallbackEnabled and fallbackSender are configured once at the batch level and apply to every message in the request. You cannot enable SMS fallback for only selected recipients within the same batch. However, fallbackContent must be provided separately for each recipient when SMS fallback is enabled.
Each recipient can have different rcsContent, fallbackContent, callback, uniqueArgs, and settings values, including URL shortening and click tracking settings.
Sample Request
Every request requires a JSON body containing the messages array. Before sending your request, replace the sample values in the request headers and body where required.
curl --location 'https://sms.useinsider.com/v1/rcs/sendMultipleMessage' \
--header 'x-ins-auth-key: INS.Abcd1234' \
--header 'Content-Type: application/json' \
--data '{
"fallbackEnabled": true,
"fallbackSender": "VIK_SMS",
"messages": [
{
"phoneNumber": "+905555555555",
"rcsContent": {
"type": "text",
"text": "Your order #12345 has shipped."
},
"fallbackContent": "Your order #12345 has shipped! https://shop.example/o/12345",
"callback": "http://callback.url",
"uniqueArgs": {
"orderId": "12345"
}
},
{
"phoneNumber": "+905555555556",
"rcsContent": {
"type": "media",
"cards": [
{
"type": "image",
"media": "https://example.com/order.jpg",
"header": "Order Confirmed",
"text": "Your order is on its way.",
"buttonType": "cta",
"buttons": [
{
"action": "custom_link",
"target": "https://shop.example/o/12346",
"text": "View Order"
}
]
}
]
},
"fallbackContent": "Your order #12346 is on its way.",
"callback": "http://callback.url",
"uniqueArgs": {
"orderId": "12346"
}
}
]
}'Sample Responses
The API supports partial success. The response includes the accepted messages together with their generated message IDs and phone numbers. Messages that fail validation are returned separately in the errors array.
{
"message": "Accepted",
"messageIds": [
{
"phoneNumber": "+905555555555",
"messageSid": "rcs-a1b2c3d4e5f6a7b8c9"
}
],
"errors": []
}Error Codes
If a request cannot be processed, the API returns an HTTP status code together with an errorCode and a descriptive message. Validation errors also include an errors array that identifies the affected fields.
Error code | HTTP | Meaning |
|---|---|---|
1000 | 400 | Invalid JSON content supplied. |
1001 | 400 | The request failed validation. Refer to the errors array to identify the affected field. For example, this error can occur when fallbackContent is missing while fallbackEnabled is true, or when a CTA URL uses a domain that is not allowlisted. |
1002 | 500 | The partner is invalid or could not be resolved. |
1018 | 400/500 | The RCS provider settings are invalid. The provider must be Infobip or Sinch and must have complete credentials. |
1019 | 400 | Country-based quota error. |
1022 | 403 | The panel is suspended. |
1024 | 403 | The panel is deactivated. |
1029 | 403 | Transactional RCS messaging is disabled for the panel. |
1031 | 400 | The fallback SMS sender could not be found. |
1005 | 500 | The message could not be published to the queue. |
1015 | 500 | Maintenance mode is active. |
SMS fallback
Transactional RCS can automatically fall back to SMS when an RCS message cannot be delivered, helping time-sensitive transactional messages reach the recipient.
SMS fallback works as follows:
Set
fallbackEnabled: trueat the batch level and provide a fallbackContent SMS body for each recipient. You can optionally provide fallbackSender.At submission time, Insider One stores each fallback SMS so it can be sent automatically if RCS delivery fails for an eligible reason.
If an RCS message is reported as undelivered for a fallback-eligible reason, such as the recipient's device not supporting RCS, Insider One automatically sends the corresponding fallback SMS through the Transactional SMS path. No additional API request is required.
The fallback SMS is created from the recipient's fallbackContent, not from the RCS message. This allows you to customize each SMS separately, since RCS content and formatting might not be suitable for SMS.
You receive the standard Transactional SMS callback events for the fallback message, in addition to the txn_rcs_undelivered RCS event.
If fallbackEnabled is false, or the delivery failure is not eligible for fallback, the undelivered RCS message is reported as txn_rcs_undelivered and no SMS is sent.
Fallback if you do not have SMS quota
Transactional SMS quota is managed through a country-based allowlist. You have quota only for the countries configured in your transactional SMS settings. The quota is evaluated differently when the RCS request is submitted and when SMS fallback is triggered.
At RCS submission time: The batch request is not blocked by SMS quota. When fallbackEnabled is true, Insider One reads your country-based SMS quota and stores it together with each fallback SMS. The RCS request is not rejected if the quota is empty or does not include the recipient's country. The RCS message is still accepted with a 202 Accepted response and sent through RCS.
When fallback is triggered: If RCS delivery fails for an eligible reason, Insider One sends the stored SMS payload through the Transactional SMS path. The SMS path then checks whether the recipient's country is included in the country-based allowlist captured at submission time.
If you do not have SMS quota for the recipient's country when fallback is triggered:
The fallback SMS is dropped with an Invalid Country Code result and drop code 2002. The SMS is not delivered.
The original RCS event remains txn_rcs_undelivered. The dropped SMS fallback generates the standard Transactional SMS callback events on the callback URL configured for that recipient. The drop is therefore reported through the standard SMS webhook rather than through a separate RCS-specific error.
The original RCS message is unaffected. Only the SMS fallback attempt is dropped.
A missing SMS quota does not prevent the RCS message from being accepted or sent. It only causes the fallback SMS to be dropped if the recipient's country is not included in your SMS allowlist. To provide SMS fallback for a destination, make sure your transactional SMS quota includes the recipient's country.
Limitations
All requests must be sent using an HTTPS POST request.
The API key must be included in the request header. An invalid API key returns an authorization error.
Transactional RCS must be enabled for your panel. RCS messages can be delivered through Infobip or Sinch only.
Each batch request can contain up to 20 messages.
Recipient phone numbers must use the E.164 format.
For text messages, rcsContent.text is required. For media messages, at least one card is required.
Quick-reply buttons are unavailable for Transactional RCS. Only none and cta button types are supported.
A media message can contain up to 6 cards. Each card can contain up to 4 CTA buttons.
When fallbackEnabled is true, fallbackContent is required for every recipient and is limited to 670 characters.
The default limit shown here is a standard baseline. If your use case requires higher capacity, feel free to reach out to the Insider One team. We can adjust it to fit your needs.