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
- Create an account in the dashboard and get an approved sender ID (Sender ID).
- Copy your API token: dashboard → Integrations → SMS API. Keep it secret: it gives full access to sending.
- 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.
| Field | Type | Required | Description |
|---|---|---|---|
originator | string | yes | Approved sender ID: up to 11 Latin characters or up to 15 digits. |
phones | array | yes | Numbers in international format without "+" and spaces, e.g. 380501234567. Up to 500. |
text | string | yes | Message 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. |
lifetime | integer | no | How 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 }
} | State | Meaning |
|---|---|
0 | accepted, being sent |
8 | passed to the operator |
1 | delivered |
2 | not delivered |
3 | expired (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
| HTTP | Meaning |
|---|---|
| 400 | a required field is missing or wrong, or the request comes from an IP address that is not in your whitelist |
| 401 | missing or wrong API token, or the API is not enabled for the account |
| 429 | more than 50 requests per second |
| 452 | no number of the request was accepted (reasons in error_details) |
Reasons in error_details:
no_money | not enough balance |
no_user_price | no price for this country / operator in your tariff — ask your manager |
no_source_price | no route to this destination |
incorrect_originator, blocked_sender | the sender ID is too long, not approved for your account, or blocked for the destination |
incorrect_phone, no_mcc_mnc | the number is not valid or its operator is unknown |
phone_in_black_list | the number is in a stop list |
text_blocked | the 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 port | sms.messedo.com:2776 (plain)sms.messedo.com:3776 (TLS 1.2 / 1.3, recommended) |
| system_id / password | your account login and password |
| Bind | transceiver, transmitter + receiver |
| Sessions | up to 10 at the same time per account |
| Encoding | ISO 8859-1 and UCS2; long messages with UDH |
| TON / NPI | source 0, destination 1 |
| enquire_link | every 30 seconds |
| Delivery reports | deliver_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.