Real endpoints, parameters, error codes and working code samples for MetaReach's SMS API — Send SMS, Delivery Report (DLR), and Balance Check.
Quick Start
Every endpoint below is a plain HTTP GET request over HTTPS — no SDK install required. Call it directly from any language, a browser, or a tool like cURL or Postman.
Replace YOUR_API_KEY and YOURID (your 6-character DLT-approved sender ID) with your own credentials, available from your MetaReach dashboard.
Authentication
Every request is authenticated with an apikey query parameter, issued from your MetaReach account. Keep it server-side — never expose it in client-side (browser/app) code.
| Parameter | Description |
|---|---|
apikey | Your API key, generated from your MetaReach account. Required on every request. |
senderid | Your DLT-approved sender ID (exactly 6 characters). |
Send SMS API
| Parameter | Description | Example |
|---|---|---|
apikey | Your API key | YOUR_API_KEY |
senderid | DLT-approved sender ID, 6 characters | YOURID |
number | Destination mobile number(s), with or without the 91 prefix. Comma-separate for multiple numbers. | 91XXXXXXXXXX,91XXXXXXXXXX |
message | URL-encoded message text. Max 1000 characters (500 for Unicode). | Hello%20there |
| Parameter | Description | Example |
|---|---|---|
route | Routing type for transactional/promotional/scrubbed SMS. Defaults to transactional (route 1) if omitted. | 1 |
unicode | Send in Unicode for regional-language text. | 2 |
time | Schedule a message for a future date/time. | 2026-09-20 04:00pm |
short_url | Wrap a link with a trackable short URL for click/conversation tracking. | short_url=yourdomain.com/x |
templateid | Your DLT-registered template ID. If omitted, your sender ID and message are matched against your registered templates automatically. | 170717XXXXXXXXXXX |
format | Response format — json or php. Defaults to JSON. | json |
| Code | Status | Description |
|---|---|---|
| 001 | false | Kindly provide apikey |
| 002 | false | Invalid route ID |
| 004 | false | No message found |
| 005 | false | Schedule date/time cannot be earlier than the current time |
| 006 | false | Invalid date/time format |
| 007 | false | No numbers found |
| 008 | false | Insufficient credit |
| 009 | false | Parent account has insufficient balance |
| 010 | false | Message campaign failed |
| 011 | Success | Message submitted successfully |
Example — Success Response
{
"status": "Success",
"code": "011",
"description": "Message submitted successfully",
"data": {
"messageid": "MzQz",
"totnumber": "3",
"totalcredit": "3"
}
}
Array
(
[status] => Success
[code] => 011
[description] => Message submitted successfully
[data] => Array
(
[messageid] => MzQz
[totnumber] => 3
[totalcredit] => 3
)
)
{
"status": "false",
"code": "001",
"description": "Kindly provide apikey"
}
Personalized SMS
Use the customized endpoint to send a personalized message to each recipient in a single request — messages are separated by a caret (^) and matched in order against your comma-separated number list.
Same mandatory/optional parameters and error codes as the Send SMS API above apply here.
Delivery Report API
Poll this endpoint with the message ID returned from your Send SMS request to get per-recipient delivery status.
| Parameter | Description |
|---|---|
apikey | Your API key |
msgid | Message ID returned by the Send SMS API |
format | json or php — defaults to JSON |
| Code | Status | Description |
|---|---|---|
| 001 | false | Kindly provide a valid API key |
| 002 | false | Invalid user, or user is deactivated |
| 003 | false | Kindly provide a valid message ID |
Example — DLR Response
{
"status": "Success",
"code": "004",
"totRecord": "3",
"data": [
{ "id": "MzQz", "mobile": "XXXXXXXXXX", "status": "delivered", "delvd_time": "01-01-2026 23:58:59" },
{ "id": "MzQz", "mobile": "XXXXXXXXXX", "status": "delivered", "delvd_time": "01-01-2026 23:59:59" },
{ "id": "MzQz", "mobile": "XXXXXXXXXX", "status": "submitted", "delvd_time": "---" }
]
}
Array
(
[status] => Success
[code] => 004
[totRecord] => 3
[data] => Array
(
[0] => Array ( [id] => MzQz [mobile] => XXXXXXXXXX [status] => delivered [delvd_time] => 01-01-2026 23:58:59 )
[1] => Array ( [id] => MzQz [mobile] => XXXXXXXXXX [status] => delivered [delvd_time] => 01-01-2026 23:59:59 )
[2] => Array ( [id] => MzQz [mobile] => XXXXXXXXXX [status] => submitted [delvd_time] => --- )
)
)
{
"status": "false",
"code": "003",
"description": "Kindly provide a valid message id"
}
Balance API
| Parameter | Description |
|---|---|
apikey | Your API key |
route_id | Route ID to check balance for |
format | json or php — defaults to JSON |
| Code | Status | Description |
|---|---|---|
| 001 | false | Kindly provide a valid API key |
| 002 | false | Kindly provide a valid route ID |
Example — Balance Response
{
"status": "Success",
"code": "003",
"balance": "500000"
}
Array
(
[status] => Success
[code] => 003
[balance] => 500000
)
{
"status": "false",
"code": "001",
"description": "Invalid Api Key"
}
Code Samples
All samples call the same real endpoint shown above. Swap in your own apikey, senderid, and recipient number.
Looking for full working scripts per language, including ASP.NET and VB.NET? See SMS API code examples.
Rate Limits & Sandbox
Rate limits vary by plan — check your account dashboard or ask your account manager for your account's specific limits. New integrations get test credentials during onboarding, so you can validate your integration before sending to real numbers.
Need production credentials, a higher-volume plan, or help debugging a specific error code? Book a free demo and our technical team will walk you through it.
Related
The commercial overview of MetaReach's messaging API for developers.
Go to API Integration →From startups to enterprises — brands that grow with MetaReach