SMS Blast API
A high-performance RESTful interface for sending SMS messages at scale and tracking their delivery in real time. Send a single message or a million — the API behaves the same way.
message_reference to track any message in real time.
Base URL
All API requests are made to the following base URL. Replace
[BASE_URL] with your assigned gateway endpoint.
Authentication
Every request must include the following HTTP headers. Missing or invalid
credentials will result in a 401 or 403 response.
| Header | Type | Required | Description |
|---|---|---|---|
profile_id |
integer | ✓ Required | Your numeric profile identifier |
client_id |
string | ✓ Required | Your client ID credential |
client_secret |
string | ✓ Required | Your client secret credential |
Content-Type |
string | ✓ Required | Must be application/json for POST requests |
accept |
string | ✓ Required | Accepted response format — use */* |
Send SMS Blast
Submit one or more SMS messages to be dispatched immediately. Each message in the array is processed independently.
{
"messages": [
{
"message_reference": "string",
"destination": "string",
"sender": "string",
"content": "string",
"coding": "string"
}
]
}
| Field | Type | Required | Description |
|---|---|---|---|
message_reference |
string | ✓ | Unique identifier used for status tracking and deduplication |
destination |
string | ✓ | Recipient phone number — E.164 format recommended (e.g.
255600000000)
|
sender |
string | ✓ | Sender ID or alphanumeric name displayed to the recipient |
content |
string | ✓ | The message body to be delivered |
coding |
string | ✓ | Encoding type: GSM for standard ASCII, UCS2 for
Unicode/emoji |
curl -X 'POST' \
'[BASE_URL]/api/sms/blast' \
-H 'accept: */*' \
-H 'profile_id: 1' \
-H 'client_id: 1234' \
-H 'client_secret: 1234' \
-H 'Content-Type: application/json' \
-d '{
"messages": [
{
"message_reference": "23456789031",
"destination": "255600000000",
"sender": "NOTIVERSE",
"content": "Hello! Your OTP is 483920.",
"coding": "GSM"
}
]
}'
{
"success": true,
"message": "Your request was submitted successfully",
"data": "Submission accepted: 1 message queued for termination."
}
{
"success": false,
"message": "We failed to process your request",
"data": "Api credential is disabled"
}
Poll Message Status
Query the current delivery state of any submitted message using its unique reference ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
message_reference |
string | ✓ | The unique reference ID used when sending the message |
curl -X 'GET' \
'[BASE_URL]/api/sms/blast/poll/23456789031' \
-H 'accept: */*' \
-H 'profile_id: 1' \
-H 'client_id: 1234' \
-H 'client_secret: 1234'
{
"success": true,
"message": "Message found",
"data": {
"reference": "23456789031",
"status": "Delivered",
"status_description":"Success",
"submitted_at": "2025-12-01T16:25:24.89176",
"sent_at": null,
"final_status_at": "2025-12-01T16:25:32.672695"
}
}
| Field | Type | Description |
|---|---|---|
reference |
string | Echo of the submitted message reference ID |
status |
string | Current delivery state — see possible values below |
status_description |
string | Human-readable detail of the status |
submitted_at |
ISO 8601 | When the API received the message |
sent_at |
ISO 8601 | null | When the message was dispatched to the carrier |
final_status_at |
ISO 8601 | Timestamp of the final delivery status update |
Callbacks
Enable callbacks to receive delivery status updates pushed to your webhook URL automatically — no polling required.
Your registered endpoint will receive a
POST request with the following JSON array:
[
{
"reference": "23456789031",
"status": "Delivered",
"status_description": "Success",
"submitted_at": "2025-12-01T16:25:24.89176",
"sent_at": "2025-12-01T16:25:24.89176",
"final_status_at": "2025-12-01T16:25:32.672695"
}
]
Error Handling
Always check the success field before processing a response. When
false, the data field contains a human-readable description of the
failure.
| Error Message | Cause | Resolution |
|---|---|---|
| Api credential is disabled | Your API credentials are inactive or suspended | Contact support to reactivate your account |
| Source name not set in profile | No Sender ID configured for your profile | Contact support to configure a Sender ID |
| Invalid credentials | Incorrect client_id or client_secret |
Verify credentials in your dashboard settings |
200 OK HTTP status does not guarantee message delivery — it means the API
accepted your request. Always verify delivery using the Poll endpoint or callbacks.
Best Practices
Follow these recommendations to maximize delivery rates and build a reliable integration.
- ✓
Unique References: Always use unique
message_referencevalues per message to avoid conflicts and enable accurate tracking. - ✓
E.164 Phone Format: Format all destination numbers as
countrycode + numberwith no spaces or symbols (e.g.255600000000). - ✓
Check the success field: Never assume success based on HTTP status alone — always inspect
"success": true/falsein the JSON response. - ✓
Don't poll immediately: Wait at least a few seconds after submission before polling status — messages take time to reach the carrier.
- ✓
Use callbacks in production: Webhooks are more efficient than polling for high-volume environments — register a callback URL with your account manager.
- ✓
Batch wisely: You can include multiple messages in a single blast request. Batch them for efficiency without sacrificing individual tracking via
message_reference.
Rate Limits
Rate limits are configured per account based on your agreed volume tier. There is no hard global cap — your limit scales with your plan.