REST API v1 — Stable

SignalSMS API Reference

Integrate our global SMS gateway into your applications. Send messages, check delivery status, and manage your wallet programmatically via simple REST endpoints.

Base URL https://api.signalsms.com/v1

Authentication

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

Rate Limits

The API enforces rate limits to ensure fair usage and platform stability. Limits are applied per API key.

100
Requests / second
10,000
Requests / hour
500
SMS / batch request

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.

Dispatch SMS

POST /sms/dispatch

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.

Request Body (JSON)

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
  }'

Response

200 OK application/json
{
  "status": "queued",
  "message_id": "msg_7f8a2b4c1e9d3a56",
  "recipients_count": 2,
  "segments": 1,
  "cost": "0.046",
  "currency": "EUR",
  "remaining_balance": "124.454"
}

Check Delivery Status

GET /sms/status/{message_id}

Retrieve the real-time delivery status of a previously dispatched SMS. Returns per-recipient delivery reports including carrier codes and timestamps.

ParameterTypeRequiredDescription
message_id string Required The unique message ID returned from the dispatch endpoint.
200 OK application/json
{
  "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
    }
  ]
}

Wallet Balance

GET /wallet/balance

Returns the current wallet balance and currency for the authenticated account. Use this to monitor spend or implement low-balance alerts.

200 OK application/json
{
  "balance": "124.50",
  "currency": "USDT",
  "last_topup": "2026-05-28T10:15:00Z",
  "last_topup_amount": "50.00"
}

Rate Lookup

GET /rates?country={ISO_CODE}

Retrieve SMS pricing for a specific country or for all 190+ supported destinations. Use ISO 3166-1 alpha-2 country codes.

ParameterTypeRequiredDescription
country string Optional ISO 3166-1 alpha-2 country code (e.g. US, DE, GB). Omit to retrieve all rates.
200 OK application/json
{
  "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" }
  ]
}

Sender IDs

GET /senders

List all registered sender IDs on your account. Sender IDs must be pre-registered before use in dispatch requests.

200 OK application/json
{
  "senders": [
    { "name": "WhiteRaven", "status": "approved", "created_at": "2026-05-10T08:00:00Z" },
    { "name": "SignalSMS", "status": "approved", "created_at": "2026-04-22T12:30:00Z" }
  ]
}

Webhooks

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.

sms.queued Message accepted and queued for delivery
sms.sent Message sent to carrier network
sms.delivered Delivery confirmed by carrier
sms.failed Delivery failed — invalid number or carrier rejection

Webhook Payload Example

POST Your callback URL
{
  "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
}

Error Codes

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 Response Example

401 Unauthorized application/json
{
  "error": "unauthorized",
  "message": "Invalid or expired API key. Generate a new key from Dashboard → Developer Credentials."
}