Integrate our global SMS gateway into your applications. Send messages, check delivery status, and manage your wallet programmatically via simple REST endpoints.
All API requests require a valid Bearer token in the Authorization header. Generate your API key from the Dashboard → Developer Credentials panel.
Keep your API key secret. Never expose it in client-side code. All requests must be made server-side over HTTPS.
# Include this header in every request Authorization: Bearer sig_live_9a2f1b8c0d9238f90c8831aee892bbcc00fa
The API enforces rate limits to ensure fair usage and platform stability. Limits are applied per API key.
If you exceed rate limits, the API returns 429 Too Many Requests. Implement exponential backoff in your integration. Rate limit headers are included in every response: X-RateLimit-Remaining, X-RateLimit-Reset.
Send one or more SMS messages to any destination worldwide. Supports custom sender IDs, scheduled delivery, and batch sending up to 500 recipients per request.
| Parameter | Type | Required | Description |
|---|---|---|---|
| sender | string | Required | Sender name or number displayed on the recipient's device. Max 11 alphanumeric characters. |
| recipients | array | Required | Array of phone numbers in E.164 format (e.g. +14155552671). Max 500 per request. |
| message | string | Required | The SMS body text. 160 characters per segment (GSM-7). Unicode messages use 70 chars per segment. |
| fast_dispatch | boolean | Optional | Use premium direct routes for fastest delivery. Slightly higher cost per SMS. Default: false. |
| schedule_at | string | Optional | ISO 8601 datetime for scheduled delivery (e.g. 2026-06-15T09:00:00Z). |
| callback_url | string | Optional | Webhook URL for delivery status updates. Must be HTTPS. |
curl -X POST https://api.signalsms.com/v1/sms/dispatch \ -H "Authorization: Bearer sig_live_9a2f1b8c..." \ -H "Content-Type: application/json" \ -d '{ "sender": "WhiteRaven", "recipients": ["+14155552671", "+447700900123"], "message": "Your verification code is 482910.", "fast_dispatch": true }'
{
"status": "queued",
"message_id": "msg_7f8a2b4c1e9d3a56",
"recipients_count": 2,
"segments": 1,
"cost": "0.046",
"currency": "EUR",
"remaining_balance": "124.454"
}
Retrieve the real-time delivery status of a previously dispatched SMS. Returns per-recipient delivery reports including carrier codes and timestamps.
| Parameter | Type | Required | Description |
|---|---|---|---|
| message_id | string | Required | The unique message ID returned from the dispatch endpoint. |
{
"message_id": "msg_7f8a2b4c1e9d3a56",
"status": "delivered",
"created_at": "2026-05-30T14:22:10Z",
"delivered_at": "2026-05-30T14:22:12Z",
"reports": [
{
"recipient": "+14155552671",
"status": "delivered",
"carrier": "T-Mobile US",
"latency_ms": 1840
},
{
"recipient": "+447700900123",
"status": "delivered",
"carrier": "Vodafone UK",
"latency_ms": 2310
}
]
}
Returns the current wallet balance and currency for the authenticated account. Use this to monitor spend or implement low-balance alerts.
{
"balance": "124.50",
"currency": "USDT",
"last_topup": "2026-05-28T10:15:00Z",
"last_topup_amount": "50.00"
}
Retrieve SMS pricing for a specific country or for all 190+ supported destinations. Use ISO 3166-1 alpha-2 country codes.
| Parameter | Type | Required | Description |
|---|---|---|---|
| country | string | Optional | ISO 3166-1 alpha-2 country code (e.g. US, DE, GB). Omit to retrieve all rates. |
{
"rates": [
{ "country": "US", "name": "United States", "price_eur": 0.018, "route": "direct" },
{ "country": "DE", "name": "Germany", "price_eur": 0.068, "route": "direct" },
{ "country": "GB", "name": "United Kingdom", "price_eur": 0.028, "route": "direct" }
]
}
List all registered sender IDs on your account. Sender IDs must be pre-registered before use in dispatch requests.
{
"senders": [
{ "name": "WhiteRaven", "status": "approved", "created_at": "2026-05-10T08:00:00Z" },
{ "name": "SignalSMS", "status": "approved", "created_at": "2026-04-22T12:30:00Z" }
]
}
Receive real-time delivery status updates via HTTP POST to your server. Configure your webhook URL per-message using the callback_url parameter, or set a global webhook URL in your dashboard settings.
{
"event": "sms.delivered",
"message_id": "msg_7f8a2b4c1e9d3a56",
"recipient": "+14155552671",
"status": "delivered",
"carrier": "T-Mobile US",
"delivered_at": "2026-05-30T14:22:12Z",
"latency_ms": 1840
}
The API uses standard HTTP status codes. Errors include a JSON body with error and message fields.
| Code | Status | Description |
|---|---|---|
| 400 | Bad Request | Invalid request body — missing required fields or malformed JSON. |
| 401 | Unauthorized | Missing or invalid API key. Verify your Authorization header. |
| 402 | Payment Required | Insufficient wallet balance. Top up via the dashboard. |
| 404 | Not Found | The requested resource (message ID, sender ID) does not exist. |
| 429 | Too Many Requests | Rate limit exceeded. Retry after the interval in X-RateLimit-Reset header. |
| 500 | Internal Error | Unexpected server error. Retry with exponential backoff. Contact support if persistent. |
| 503 | Service Unavailable | Gateway temporarily unavailable for maintenance. Check status.signalsms.com. |
{
"error": "unauthorized",
"message": "Invalid or expired API key. Generate a new key from Dashboard → Developer Credentials."
}