Sends an SMS
Sends SMS to a single recipient number. The sender and the template must be pre-configured for the sending agent.
The base message template is a pre-approved SMS template of the sender, addressed by template_key or template_alias. The merge_info is used to resolve the final content by merging the template with values. Params left unresolved are sent literally. sender_key identifies the sender of the SMS. ‘to’ is exactly a single recipient, whose mobile_no must include the country code.
Note:
SMS feature is currently supported for customers hosting their accounts in the IN DC. You can send transactional SMS from your registered sender to customers in India.
Endpoint
Request URL
https://cpaas.zoho.com/v1.1/sms Copied!
Request Parameters
- Request Headers
API Key of an agent. Send the header as Authorization: Zoho-enczapikey {apiKey}.
Follow the steps here to generate an API key
- Request Body
application/json
Request body for sending a single SMS. Provide exactly one of template_key / template_alias; the template supplies the message text.
Show Sub-Attributes
Key of the SMS sender the message goes out as. The sender must be configured for the sending agent.
Exactly one recipient.
Show Sub-Attributes
A single-send recipient.
Show Sub-Attributes
Recipient mobile number, including the country code.
Key of a pre-approved SMS template of the sender. Provide this or template_alias.
Alias of a pre-approved SMS template. Provide this or template_key.
Key-value map that resolves the template's {{merge_tags}}. Tags left unresolved are sent literally in the message text.
{
"otp": "482913"
}Client-supplied reference identifier, echoed in the SMS logs.
Sample Request
curl --request POST \
--url https://cpaas.zoho.com/v1.1/sms \
--header 'Authorization: Zoho-enczapikey {apiKey}' \
--header 'content-type: application/json' \
--data '{"template_key":"6200ca60-921a-11f1-92c4-2a30dd3b833c","client_reference":"otp-482913","merge_info":{"otp":"482913"},"to":[{"mobile_no":"+919876543210"}],"sender_key":"2d6f4a1b9c35"}'Sample Request Body
{
"template_key": "6200ca60-921a-11f1-92c4-2a30dd3b833c",
"client_reference": "otp-482913",
"merge_info": {
"otp": "482913"
},
"to": [
{
"mobile_no": "+919876543210"
}
],
"sender_key": "2d6f4a1b9c35"
}
Response Parameters
- HTTP code 200
Response Body - application/json
Success response returned when the SMS is queued for delivery.
Show Sub-Attributes
Show Sub-Attributes
Acceptance code.
Unique identifier of the message. Use it with the message-details API.
Unique identifier assigned to the send request.
- HTTP code 400
Response Body - application/json
Error response wrapper. The top-level code identifies the error class: TM_3201 mandatory field missing (400), TM_3301 bad syntax (400), TM_4001 access denied (401), TM_3601 request denied (403), TM_3501 unprocessable entity (422).
Show Sub-Attributes
Show Sub-Attributes
Show Sub-Attributes
A single validation or denial detail inside the error envelope.
Show Sub-Attributes
Detail-level error code, e.g. SERR_110 (required parameter missing), SERR_102 (parameter syntax error), GE_102 (mandatory field missing), GE_122 (invalid value), SMS_107 (template not associated with the sending agent), SERR_157 (invalid API token).
The field the detail refers to, when applicable (e.g. sender_key, to, mobile_no, template_key | template_alias).
The offending value, when applicable.
Identifier of the failed request, when available.
- HTTP code 401
Response Body - application/json
Error response wrapper. The top-level code identifies the error class: TM_3201 mandatory field missing (400), TM_3301 bad syntax (400), TM_4001 access denied (401), TM_3601 request denied (403), TM_3501 unprocessable entity (422).
Show Sub-Attributes
Show Sub-Attributes
Show Sub-Attributes
A single validation or denial detail inside the error envelope.
Show Sub-Attributes
Detail-level error code, e.g. SERR_110 (required parameter missing), SERR_102 (parameter syntax error), GE_102 (mandatory field missing), GE_122 (invalid value), SMS_107 (template not associated with the sending agent), SERR_157 (invalid API token).
The field the detail refers to, when applicable (e.g. sender_key, to, mobile_no, template_key | template_alias).
The offending value, when applicable.
Identifier of the failed request, when available.
- HTTP code 422
Response Body - application/json
Error response wrapper. The top-level code identifies the error class: TM_3201 mandatory field missing (400), TM_3301 bad syntax (400), TM_4001 access denied (401), TM_3601 request denied (403), TM_3501 unprocessable entity (422).
Show Sub-Attributes
Show Sub-Attributes
Show Sub-Attributes
A single validation or denial detail inside the error envelope.
Show Sub-Attributes
Detail-level error code, e.g. SERR_110 (required parameter missing), SERR_102 (parameter syntax error), GE_102 (mandatory field missing), GE_122 (invalid value), SMS_107 (template not associated with the sending agent), SERR_157 (invalid API token).
The field the detail refers to, when applicable (e.g. sender_key, to, mobile_no, template_key | template_alias).
The offending value, when applicable.
Identifier of the failed request, when available.
Sample Response: HTTP 200
{
"data": {
"code": "MSG_101",
"message_id": "7fff7400-b676-11f1-b0ad-b6d94062a427",
"message": "Message queued",
"request_id": "2d6f.14350939.i1.7fff7400-b676-11f1-b0ad-b6d94062a427.1a0c8d13740"
},
"status": "success"
}
Sample Response: HTTP 400
{
"error": {
"code": "TM_3301",
"details": [
{
"code": "SERR_110",
"message": "Parameter less than min occurrance",
"target": "sender_key"
}
],
"message": "Bad Syntax"
}
}
{
"error": {
"code": "TM_3201",
"details": [
{
"code": "GE_102",
"message": "Mandatory field found empty",
"target": "template_key | template_alias"
}
],
"message": "Mandatory Field missing"
}
}
{
"error": {
"code": "TM_3301",
"details": [
{
"code": "SERR_102",
"message": "Syntax error found",
"target": "mobile_no"
}
],
"message": "Bad Syntax"
}
}
Sample Response: HTTP 401
{
"error": {
"code": "TM_4001",
"details": [
{
"code": "SMS_107",
"message": "Invalid associated sender"
}
],
"message": "Access Denied"
}
}
{
"error": {
"code": "TM_4001",
"details": [
{
"code": "SERR_157",
"message": "Invalid API Token found"
}
],
"message": "Access Denied"
}
}
Sample Response: HTTP 422
{
"error": {
"code": "TM_3501",
"details": [
{
"code": "GE_122",
"message": "Invalid value found",
"target": "to"
}
],
"message": "Unprocessable Entity"
}
}
© 2026, Zoho Corporation Pvt. Ltd. All Rights Reserved.