Skip to content
SENDLY by ACTIOSENDLY by ACTIO
Documentation

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.link

Request fields

  • tostring (9–11 digits)required

    Recipient number – numeric string, 9–11 characters (e.g. 48732129001).

  • bodystringrequired

    Message 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.link

Request fields

  • tostring[] (9–11 digits, 1–100)required

    Array of recipient numbers – each a numeric string of 9–11 characters, 1 to 100 elements, numbers must be unique.

  • bodystringrequired

    Message 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

403
Authorization Error
Missing or invalid Bearer Token (details in errors.token).
422
Validation Error
Invalid data – details in errors.to / errors.body (and errors.from if provided). Each field is an array of messages.
429
Too Many Requests
Too many requests in a short time – wait and retry.

Webhooks

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.

AttemptsInterval
Notifications 1–10Every minute
Notifications 11–20Every 3 minutes
Notifications 21–30Every 10 minutes
Notifications 31–35Every hour
Notification 3612 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.