API Documentation v1.0
API Operational ← Back to Home
// Getting Started

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.

Built for Speed
Average API response under 25ms. Messages dispatched to carriers within milliseconds of submission. Use message_reference to track any message in real time.
// Connection

Base URL

All API requests are made to the following base URL. Replace [BASE_URL] with your assigned gateway endpoint.

BASE [BASE_URL]/api/sms
// Security

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 */*
// Endpoints

Send SMS Blast

Submit one or more SMS messages to be dispatched immediately. Each message in the array is processed independently.

POST [BASE_URL]/api/sms/blast Send one or more messages
Request Body
JSON
{
  "messages": [
    {
      "message_reference": "string",
      "destination":       "string",
      "sender":            "string",
      "content":           "string",
      "coding":            "string"
    }
  ]
}
Parameters
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
Example Request
cURL
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"
    }
  ]
}'
Responses
200 Success 400/401 Error
JSON · 200 OK
{
  "success": true,
  "message": "Your request was submitted successfully",
  "data":    "Submission accepted: 1 message queued for termination."
}
JSON · Error
{
  "success": false,
  "message": "We failed to process your request",
  "data":    "Api credential is disabled"
}
HTTP Status Codes
200 OK — Processed successfully
400 Bad Request — Invalid format
401 Unauthorized — Bad credentials
403 Forbidden — Access denied
500 Server Error — Try again
// Endpoints

Poll Message Status

Query the current delivery state of any submitted message using its unique reference ID.

GET [BASE_URL]/api/sms/blast/poll/{message_reference} Check delivery status
Path Parameters
Parameter Type Required Description
message_reference string The unique reference ID used when sending the message
Example Request
cURL
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 Response
JSON · 200 OK
{
  "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"
  }
}
Response Fields
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
Possible Status Values
Queued Sent Delivered Failed Expired
// Webhooks

Callbacks

Enable callbacks to receive delivery status updates pushed to your webhook URL automatically — no polling required.

🔔
Recommended for Production
Register a webhook URL with your account manager to receive real-time delivery receipts. Callbacks eliminate the need to poll and reduce API calls significantly.
Callback Payload

Your registered endpoint will receive a POST request with the following JSON array:

JSON · Webhook POST Body
[
  {
    "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"
  }
]
// Errors

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
⚠️
Note on success: true
A 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.
// Guidelines

Best Practices

Follow these recommendations to maximize delivery rates and build a reliable integration.

  • Unique References: Always use unique message_reference values per message to avoid conflicts and enable accurate tracking.
  • E.164 Phone Format: Format all destination numbers as countrycode + number with no spaces or symbols (e.g. 255600000000).
  • Check the success field: Never assume success based on HTTP status alone — always inspect "success": true/false in 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.
// Limits

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.

📊
Need higher throughput?
Contact your account manager to discuss your volume requirements and get a rate limit tailored to your use case. Notiverse supports up to 10,000+ messages per second on enterprise configurations.