Transactional SMS Send
Send personalized SMS to one or more recipients with variable text, tracked links and scheduling.
The request consists of two main sections:
default (parameters shared by all recipients) and
specific (array of recipients with individual overrides).
Parameters in specific override those in default for each individual message.
You can send up to 10.000 recipients per request; any additional items are discarded.
Parameters (JSON)
| Parameter | Required | Type | Description |
|---|---|---|---|
| account_code | YES | string (UUID) | Account code — passed in the URL path |
| default | YES | object | Default parameters shared by all recipients |
| specific | YES | array<object> | List of recipients with per-recipient overrides, maximum 10.000 items per request |
default Object
| Parameter | Required | Type | Description |
|---|---|---|---|
| sender_id | YES | string (max 11) | Pre-authorized sender associated with the account pre-authorized |
| text | YES | string | Message text (may contain variable placeholders) |
| sending_time | NO | string (ISO 8601) | Scheduled send time (e.g. 2025-01-30T14:13:24.679Z) |
| validity_time | NO | string (ISO 8601) | Message validity expiry |
| expire_time_rcs | NO | string (ISO 8601) | RCS expiry time |
| ph_delimiter | NO | string |
Variable delimiters in the text (e.g. "# #" → #name#,
or "{{ }}" → {{name}})
|
| meta | NO | object | Shared variables to substitute in the text (e.g. {"company": "Acme"}) |
Items in specific Array
| Parameter | Required | Type | Description |
|---|---|---|---|
| phone_number | YES | string | Recipient number with international prefix (e.g. "+393xxxxxxxxx") |
| meta | NO | object | Per-recipient variables (override default.meta) |
| text | NO | string | Per-recipient text (overrides default.text) |
| ph_delimiter | NO | string | Per-recipient delimiter (overrides default.ph_delimiter) |
| validity_time | NO | string (ISO 8601) | Per-recipient validity expiry |
| expire_time_rcs | NO | string (ISO 8601) | Per-recipient RCS expiry |
Tracked Links
To track click counts on a link included in the message text, use this format:
{{ TRACKED_LINK_https://example.com }}
The platform will automatically replace the tracked link in the message text with a shortlink.
The TRACKED_LINK_ prefix must precede the URL, and the entire expression must be
wrapped in {{ }}.
{{ }} delimiters for tracked links are independent from the ph_delimiter
used for text variables. You can use both in the same request.
Example Request
{
"default": {
"sender_id": "SENDER",
"text": "Hello #name# #surname#, you contacted #company#. Click here: {{ TRACKED_LINK_https://example.com }}",
"sending_time": "2025-01-30T14:13:24.679Z",
"validity_time": "2025-02-28T14:13:24.679Z",
"ph_delimiter": "# #",
"meta": {
"company": "My Company"
}
},
"specific": [
{
"phone_number": "+393331234567",
"meta": {
"name": "Mario",
"surname": "Rossi"
}
},
{
"phone_number": "+393407654321",
"ph_delimiter": "{{ }}",
"text": "Hello {{name}} {{surname}}, welcome to {{company}}! {{ TRACKED_LINK_https://example.com }}",
"meta": {
"company": "Another Company",
"name": "Carlo",
"surname": "Bianchi"
}
}
]
}
Success Response
200 OK
An array with one object per recipient, in the same order as the specific array.
[
{
"success": true,
"uuid": "9a53f419-6475-a191-9b86-xxxxxxxxxxxx",
"index": 0,
"receiver": "393331234567",
"shortlink": "https://l2l.biz/cgRBB8",
"error": null
},
{
"success": true,
"uuid": "a5562ac9-54f7-3c1c-7006-xxxxxxxxxxxx",
"index": 1,
"receiver": "393407654321",
"shortlink": "https://l2l.biz/0vhiZj",
"error": null
}
]
Response Fields
| Field | Type | Description |
|---|---|---|
| success | boolean | Delivery outcome for this recipient |
| uuid | string | Unique message identifier |
| index | integer | Position in the specific array (0-based) |
| receiver | string | Recipient number (without the +) |
| shortlink | string|null | Generated short URL if a tracked link was included |
| error | string|null | Error description (if any) |
Receiving Delivery Updates (DLR)
The uuid field in the response uniquely identifies each sent message.
You can receive real-time delivery status updates (DLR) — such as
DELIVERED, UNDELIVERED, EXPIRED — by configuring an
Http Endpoint on the platform.
uuid and the updated status.
This allows you to keep your systems in sync in real time without polling the API.
{
"uuid":"88442951-e8a7-68fb-450c-a28f16xxxxxx",
"msgId":"e6e53e89-40a8-fa00-8005-c76614xxxxxx",
"event":"DELIVERED",
"partNum":1,
"numParts":1
}