An API you understand without reading a PDF.
Everything you need to send your first SMS in 5 minutes. Endpoint, request fields, error codes and webhooks – with examples in 5 languages.
Quickstart
1. Create an account
Sign up via email. 100 SMS free on start, no credit card required.
2. Generate Bearer Token
Generate the token in the client panel (or via customer support). Keep it in a safe place.
3. Send the first SMS
POST /api/sms with JSON payload. Code samples below.
Endpoint: POST /api/sms
Main sending endpoint. Bearer token auth, JSON body (application/json). Returns the message identifier (message_id, 16 hex characters).
Base URL
https://api.sendly.linkRequest fields
tostring (9–11 digits)requiredRecipient number – numeric string, 9–11 characters (e.g. 48732129001).
bodystringrequiredMessage content, min. 1 character. UCS-2 encoding split every 67 characters; optionally GSM-7 (single message, max 160 characters) – enabled in the panel.
fromstring (9–11 digits)Optional. The virtual mobile number in SENDLY (numeric string, 9–11 characters).
curl -X POST https://api.sendly.link/api/sms \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"to": "48732129000",
"body": "Twój kod logowania: 482910"
}'Response (200)
{ "message_id": "a906cff7719bd889" }Bulk send: POST /api/sms-multi
The same message to multiple numbers (1 to 100). Enabled only via customer support. All-or-nothing validation – every number must be a valid Polish mobile number and the numbers must be unique; otherwise the whole request is rejected. The response contains a message_ids array with number + message_id pairs.
Base URL
https://api.sendly.linkRequest fields
tostring[] (9–11 digits, 1–100)requiredArray of recipient numbers – each a numeric string of 9–11 characters, 1 to 100 elements, numbers must be unique.
bodystringrequiredMessage content, min. 1 character.
fromstring (9–11 digits)Optional. The virtual mobile number in SENDLY (numeric string, 9–11 characters).
curl -X POST https://api.sendly.link/api/sms-multi \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"to": ["48732129001", "48732129002"],
"body": "Test SENDLY"
}'Response (200)
{
"message_ids": [
{ "number": "48732129001", "message_id": "a906cff7719bd889" }
]
}Error codes
403422429Webhooks
Sendly does not push statuses or inbound SMS on its own. In the panel (SMS Gateway → Service settings) you enable deliveries and enter a public URL. Both steps are required. Then we send POST application/json – up to 36 attempts, no redirect following, no extra auth, from the current IP of api.sendly.link. A 200 OK response stops retries; 404 and 418 also stop them.
Deliveries
In the client panel, SMS Gateway → Service settings, enable deliveries (outbound status reports).
URL
In the same place enter a publicly reachable endpoint that accepts POST requests.
Without both steps – enabling deliveries and entering the URL – the webhook will not fire. You will get neither DLR nor inbound SMS.
Webhook delivery – up to 36 attempts
MESSAGE and NOTIFICATION callbacks are retried until the webhook responds 200 OK or the attempt limit is reached. Responses 404 (Not Found) and 418 (I’m A Teapot) also stop retries. Redirects are not followed; Sendly does not authenticate to your webhook.
| Attempts | Interval |
|---|---|
| Notifications 1–10 | Every minute |
| Notifications 11–20 | Every 3 minutes |
| Notifications 21–30 | Every 10 minutes |
| Notifications 31–35 | Every hour |
| Notification 36 | 12 hours after the previous notification |
type: MESSAGEInbound message – fields: from (number or sender ID), to, body.type: NOTIFICATIONOutbound status – fields: message_id and status: DELIVERED or ERROR.{
"type": "NOTIFICATION",
"message_id": "a906cff7719bd889",
"status": "DELIVERED"
}Checklist: SMS API + webhook
- Account created and signed in at app.sendly.link
- In the panel: SMS Gateway → Service settings → SMS API – enabled
- Bearer Token in the Authorization header
- Calls to https://api.sendly.link/api/sms (or /api/sms-multi)
- In the panel: deliveries – enabled
- In the panel: a public webhook URL that accepts POST application/json
- The endpoint handles NOTIFICATION (send status) and MESSAGE (inbound SMS)
How to check that an SMS was delivered
The send response includes message_id – store it. When the status changes, Sendly POSTs a NOTIFICATION to your webhook with the same message_id and DELIVERED or ERROR. You then match the callback to that message. You can track every outbound SMS this way.
3CX SMS API
An alternative mode for sending and receiving SMS, compatible with the current 3CX Phone System specification. To enable it, select both options in the client panel: SMS API and 3CX SMS API. It can also be enabled by customer support.
Outbound
In the SMS section in 3CX, provide the token generated in the client panel and the URL: https://api.sendly.link/api/tcx
Inbound
In the client panel, provide the webhook available in your 3CX system (when enabled via customer support, you provide the webhook and receive a token in return).
Start sending SMS today.
100 free messages. No credit card. No subscription. Activation in 30 seconds.