Skip to content
Home API
For developers

SMS API and SMPP

Connect your website, CRM or application to Messedo: a JSON REST API for notifications and one-time codes, SMPP 3.4 for high volumes. Delivery reports come back automatically.

Quick start

  1. Create an account in the dashboard and get an approved sender ID (Sender ID).
  2. Copy your API token: dashboard → Integrations → SMS API. Keep it secret: it gives full access to sending.
  3. Optionally restrict access to your servers' IP addresses (Integrations → IP whitelist) and set the URL for delivery reports (Account → Edit settings).

Every request is an HTTPS POST to https://api.messedo.com with the JSON body and two headers:

Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json

POST/sms/send

Sends one text to up to 500 numbers.

FieldTypeRequiredDescription
originatorstringyesApproved sender ID: up to 11 Latin characters or up to 15 digits.
phonesarrayyesNumbers in international format without "+" and spaces, e.g. 380501234567. Up to 500.
textstringyesMessage text. Up to 160 Latin (GSM) or 70 Cyrillic (Unicode) characters fit in one SMS; longer texts are split into parts (153 / 67 characters each), and each part is billed.
lifetimeintegernoHow long the operator keeps trying to deliver, in seconds.
curl -X POST https://api.messedo.com/sms/send \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"originator":"MyShop","phones":["380501234567"],"text":"Your order is ready"}'

Answer (HTTP 200): the message ID for every accepted number. Keep it to ask for the status and to match delivery reports.

{
  "success_request": {
    "info": { "380501234567": 391876210 }
  }
}

If some numbers were not accepted, the answer also has additional_info and error_details with the numbers per reason (see errors). If no number was accepted, the HTTP code is 452 and the answer has error_request.

POST/sms/status

Statuses of up to 499 messages by their IDs.

{"id_sms": [391876210, 391876211]}
{
  "successful_request": { "391876210": 1, "391876211": 0 }
}
StateMeaning
0accepted, being sent
8passed to the operator
1delivered
2not delivered
3expired (not delivered within its lifetime)

HTTP 453 means none of the IDs were found for your account. POST/sms/statistic returns the statuses of today's messages (up to 1000).

Delivery reports to your URL

Set the URL in the dashboard and Messedo will POST the final statuses as soon as they are known — no polling needed:

POST https://your-site.example/sms-report
Content-Type: application/json

{"result": [{"id_sms": 391876210, "state": 1}, {"id_sms": 391876211, "state": 2}]}
  • Answer with HTTP 200 within 5 seconds. Otherwise the report is repeated every 10 minutes, up to 4 times.
  • Only public addresses are allowed (no private or local networks).
  • Every attempt with your server's answer is visible in the dashboard: Integrations → Delivery reports to your URL; there is also a test report button.

Balance and sender IDs

POST/sms/balance — current balance:

{"successful_request": {"currency": "UAH", "money": 1517.83}}

POST/sms/originator — your approved sender IDs. New ones are requested in the dashboard (SMS → Sender IDs).

Errors and limits

HTTPMeaning
400a required field is missing or wrong, or the request comes from an IP address that is not in your whitelist
401missing or wrong API token, or the API is not enabled for the account
429more than 50 requests per second
452no number of the request was accepted (reasons in error_details)

Reasons in error_details:

no_moneynot enough balance
no_user_priceno price for this country / operator in your tariff — ask your manager
no_source_priceno route to this destination
incorrect_originator, blocked_senderthe sender ID is too long, not approved for your account, or blocked for the destination
incorrect_phone, no_mcc_mncthe number is not valid or its operator is unknown
phone_in_black_listthe number is in a stop list
text_blockedthe text was rejected by moderation

New senders and texts may go through moderation first; such messages are sent after approval. Your API usage and errors are visible in the dashboard: Integrations → API usage.

SMPP 3.4

Host and portsms.messedo.com:2776 (plain)
sms.messedo.com:3776 (TLS 1.2 / 1.3, recommended)
system_id / passwordyour account login and password
Bindtransceiver, transmitter + receiver
Sessionsup to 10 at the same time per account
EncodingISO 8859-1 and UCS2; long messages with UDH
TON / NPIsource 0, destination 1
enquire_linkevery 30 seconds
Delivery reportsdeliver_sm with id:… stat:DELIVRD|UNDELIV|EXPIRED err:…

IP restriction works the same way as for the API. The connection status and limits of your account are visible in the dashboard: Integrations → SMPP connection.

Support

Write to support@messedo.com with your login, the message ID and the approximate time.