SENDLY SMS API
Full reference generated from OpenAPI – always in sync with the spec. Endpoints, field schemas, responses and webhooks.
https://api.sendly.link/api/smsSMS message sending
The default API operating mode, intended for use with applications that support the REST API.
Request body
fromstringThe SENDLY virtual mobile number (optional field).
pattern: ^[0-9]{9,11}$
tostringrequiredThe destination mobile number.
pattern: ^[0-9]{9,11}$
bodystringrequiredThe message content.
min 1
curl -X POST https://api.sendly.link/api/sms \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"from":"48732129000","to":"48732129001","body":"Test SENDLY"}'Response · 200 – The message has been accepted for sending.
{
"message_id": "a906cff7719bd889"
}Response · 403 – Authorization problem.
{
"errors": {
"token": [
"Invalid token"
]
}
}Response · 422 – Data validation problem.
{
"description": "Data validation problem."
}Response · 429 – Request limit exceeded.
{
"description": "Request limit exceeded."
}https://api.sendly.link/api/sms-multiSending a message to multiple numbers
Sending the same message to multiple numbers. This feature is activated for an access token exclusively by contacting customer service. Number validation works on an "all or nothing" basis – each number must be a valid Polish mobile number and the numbers must be unique; otherwise the request is rejected in its entirety.
Request body
fromstringThe SENDLY virtual mobile number (optional field).
pattern: ^[0-9]{9,11}$
toarray<string>requiredThe destination mobile numbers.
1–100 · unique
bodystringrequiredThe message content.
min 1
curl -X POST https://api.sendly.link/api/sms-multi \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"from":"48732129000","to":["48732129001","48732129002"],"body":"Test SENDLY"}'Response · 200 – The message has been accepted for sending.
{
"message_ids": [
{
"number": "48732129001",
"message_id": "a906cff7719bd889"
}
]
}Response · 403 – Authorization problem.
{
"errors": {
"token": [
"Invalid token"
]
}
}Response · 422 – Data validation problem.
{
"description": "Data validation problem."
}Response · 429 – Request limit exceeded.
{
"description": "Request limit exceeded."
}https://api.sendly.link/api/tcx3CX SMS API
3CX SMS API mode: sending and receiving messages based on the current specification of the 3CX Phone System PBX. Activation: enable both options in the client panel (SMS API and 3CX SMS API); in the SMS section in 3CX, provide the token from the panel and this URL. The request/response format complies with the 3CX specification.
Request body
No request parameters.
Response · 200 – In accordance with the 3CX Phone System PBX specification.
{
"description": "In accordance with the 3CX Phone System PBX specification."
}Webhooks
Events SENDLY sends to your webhook URL – inbound messages and delivery confirmations.
inboundMessageReceiving messages (webhook)
Inbound messages go to the webhook from the panel (SMS Gateway → Service settings: deliveries and URL, both required). POST application/json from the IP of api.sendly.link, up to 36 attempts, no redirect following and no extra auth. A 200 OK response stops retries; 404 and 418 also stop them.
typestringThe message type – "MESSAGE" for an incoming message.
= MESSAGE
fromstringThe source number presentation; for an overridden number – the override.
tostringThe destination phone number.
bodystringThe message content.
Payload
{
"type": "MESSAGE",
"from": "48732129000",
"to": "48732129001",
"body": "Test sms"
}deliveryNotificationMessage delivery confirmation (webhook)
After you enable deliveries and enter the URL in the panel (both steps required), Sendly POSTs the status. Up to 36 attempts, no redirect following and no extra auth, from the IP of api.sendly.link. A 200 OK response stops retries; 404 and 418 also stop them. Store message_id from the API response to match the NOTIFICATION to the SMS you sent.
typestringThe message type – "NOTIFICATION" for a status.
= NOTIFICATION
message_idstringThe message identifier returned after acceptance for sending.
statusstringDELIVERED – delivered; ERROR – error.
DELIVERED · ERROR
Payload
{
"type": "NOTIFICATION",
"message_id": "a906cff7719bd889",
"status": "DELIVERED"
}