Sending

Send an SMS with POST /v1/messages

POST/v1/messages

Send one text to one number. The cost is taken from the balance when the request is accepted.

Request body

  • tostringrequired

    The number in international format, for example +14155550123. Spaces, dashes, brackets and a 00 prefix are cleaned.

  • textstringrequired

    The message. Up to 10 segments; see Text and segments.

  • referencestringoptional

    Your own id, up to 100 characters. It comes back in the message object and in every webhook.

  • send_atstringoptional

    ISO 8601 time to send, 2 minutes to 45 days ahead. Without it the message is queued at once.

Add an Idempotency-Key header to make retries safe: see Idempotency.

curl https://bulksmsapi.cc/v1/messages \
  -H "Authorization: Bearer $BULKSMSAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+14155550123",
    "text": "Your Northwind code is 482913. It expires in 10 minutes.",
    "reference": "login-7781"
  }'
202 AcceptedJSON
{
  "id": "msg_8F3K2Q9TZ1MX",
  "object": "message",
  "batch_id": "bat_4M7Q1X0PK2RS",
  "to": "+14155550123",
  "country": "US",
  "text": "Your Northwind code is 482913. It expires in 10 minutes.",
  "segments": 1,
  "price": "0.00507",
  "currency": "USD",
  "status": "queued",
  "error": null,
  "reference": "login-7781",
  "created_at": "2026-11-07T09:30:12.418Z",
  "sent_at": null,
  "done_at": null
}

The message object

Fields

  • idstring

    Message id, msg_ followed by 12 characters.

  • objectstring

    Always message.

  • batch_idstring

    The batch the message belongs to (a single message also gets a batch).

  • tostring

    The number in E.164 format, after cleaning.

  • countrystring

    ISO 3166 code of the country the number was priced as.

  • textstring

    The text as sent, merge fields filled.

  • segmentsinteger

    Number of SMS segments the text uses.

  • pricestring

    Price of this message in USD, 5 decimals (price per segment times segments).

  • currencystring

    Always USD.

  • statusstring

    scheduled, queued, sent, delivered, failed or canceled.

  • errorobject or null

    For failed or canceled messages: code and message.

  • referencestring or null

    Your own reference from the request.

  • created_atstring

    When the request was accepted (ISO 8601, UTC).

  • sent_atstring or null

    When the message was handed to the network.

  • done_atstring or null

    When the final status (delivered, failed or canceled) was set.

Retrieve a message

GET/v1/messages/{id}

One message by its msg_ id. Messages of other accounts answer 404.

curl https://bulksmsapi.cc/v1/messages/msg_8F3K2Q9TZ1MX \
  -H "Authorization: Bearer $BULKSMSAPI_KEY"

List messages

GET/v1/messages

Messages of the account, newest first.

Query parameters

  • batch_idstringoptional

    Only messages of this bat_ batch.

  • statusstringoptional

    scheduled, queued, sent, delivered, failed or canceled.

  • limitintegeroptional

    1 to 100, default 20.

  • starting_afterstringoptional

    A msg_ id: the page starts after it. Use the last id of the previous page.

curl "https://bulksmsapi.cc/v1/messages?status=failed&limit=50" \
  -H "Authorization: Bearer $BULKSMSAPI_KEY"
200 OKJSON
{
  "object": "list",
  "data": [ { "id": "msg_8F3K2Q9TZ1MX", "object": "message", "status": "failed", "...": "..." } ],
  "has_more": false
}
Send an SMS with POST /v1/messages | BulkSMSAPI Docs