Download OpenAPI specification:
On these pages you will find our documentation for transmitting messages using the LOX24 SMS Gateway. The documentation helps you to integrate our SMS API into your own applications and therefore to send and receive SMS messages. You can find our SMS API at https://api.lox24.eu. You access the individual functions accordingly with a /function. E.g. https://api.lox24.eu/me for querying your customer account and https://api.lox24.eu/sms to send an SMS. All endpoints require authentication by HTTP Header.
The Content-Type for POST and PUT requests can be set to application/json
or multipart/form-data
(on endpoints with file uploads).
Each API response includes a unique request identifier in the X-LOX24-REQUEST-ID
header.
This 32-character alphanumeric identifier is generated for every request and can be used
for support purposes when reporting issues or tracking specific API calls.
Most of the datetime requests/responses objects are unix timestamps (integer).
If more than three requests are received from an IP address with incorrect authentication data within one minute, all subsequent requests from this IP will receive a response with the 429 status (Too Many Requests) within the next ten minutes.
All endpoints require you to be authenticated. To become authenticated you will need to create an API token from your web-account (http://account.lox24eu “Settings” and “API-Settings”). Once you have your API Key you can pass it as an HTTP header like this:
curl -X GET https://api.lox24.eu/me \
-H 'Host: api.lox24.eu' \
-H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
curl -X POST https://api.lox24.eu/groups/7116/phones \
-H 'Content-Type: application/json' \
-H 'Host: api.lox24.eu' \
-H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx' \
-d '{
"phone": "+4917663804817",
"a": "o2"
}'
We also continue to support the old version of authentication with two headers 'X-LOX24-CLIENT-ID' and ' X-LOX24-AUTH-TOKEN'
curl -X GET https://api.lox24.eu/me \
-H 'Host: api.lox24.eu' \
-H 'X-LOX24-AUTH-TOKEN: e3f3a759b6677959b6ebfcxxxxxxxxxx' \
-H 'X-LOX24-CLIENT-ID: 1234567'
Never share your secret keys. Keep them guarded and secure. If a key is unintentionally published, you can deactivate or delete it at any time in your web account (https://account.lox24.eu) in the "Settings" and "API settings".
User is an assistance interface, e.g. to query the account balance or the credit line. This can be helpful to determine if there is still enough credit to send further SMS.
With this interface, you can check your account balance. If you use a pre-paid Account, you get your available balance (excluded VAT). If you have a post-paid account, you get your remaining sms credit limit. The query response also contains information about your available SMS services and your groups.
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/me \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "id": 1,
- "currency": "EUR",
- "balance_changed_at": 0,
- "is_text_deleted": true,
- "balance_amount": 0,
- "services": [
- "economy"
], - "groups": {
- "24512": "/groups/24512",
- "24513": "/groups/24513",
- "24519": "/groups/24519"
}
}
The sms endpoint is used to send individual SMS. This includes regular SMS but also the dryrun for test purposes. In addition, there are a number of functions to query sent SMS, delete SMS or stop the dispatch.
If you don't want to send single SMS, but want to send bulk SMS via the API, then the endpoint "bulks" is relevant.
The event 'sms.delivery' sends on dlr_code
changes. This allows you to find out whether an SMS has been successfully delivered, rejected, or is still being delivered.
Each SMS has a delivery report code Webhook notifications
id | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Unique entity UUID |
api_version | string (property.common.api_version) Version of the notification webhook data structure |
name | string Value: "sms.delivery" Webhook's event name |
created_at | integer (property.common.created_at) >= 0 Timestamp when the entity was added to the system by the user |
attempt_total | integer (property.common.attempt_total) [ 1 .. 4 ] Total number of notification webhook delivery attempts |
attempt_number | integer (property.common.attempt_number) >= 1 Current webhook notification attempt number |
object Event-specific data payload | |
notification_task_id | string <uuid> Notification task identifier (request identifier) |
Event sent when SMS delivery status changes
{- "id": "a3cd6e19-8af2-498d-ad07-c7840f1b4ac8",
- "api_version": "2022-05-25",
- "name": "sms.delivery",
- "created_at": 1653378603,
- "attempt_total": 4,
- "attempt_number": 1,
- "data": {
- "id": "d6c12ac4-cc7d-11ec-b6da-525400bbb7dc",
- "key_id": 8207,
- "dlr_code": 1,
- "status_code": 100,
- "callback_data": "some data from user's request here"
}, - "notification_task_id": "3378de83-de66-4de8-9d29-2b10d41bb641"
}
The event 'sms.delivery.dryrun' uses per an emulation SMS send. See Simulate sending an SMS (for testing).
Each SMS has delivery report code (DLR).
id | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Unique entity UUID |
api_version | string (property.common.api_version) Version of the notification webhook data structure |
name | string Value: "sms.delivery.dryrun" Webhook's event name |
created_at | integer (property.common.created_at) >= 0 Timestamp when the entity was added to the system by the user |
attempt_total | integer (property.common.attempt_total) [ 1 .. 4 ] Total number of notification webhook delivery attempts |
attempt_number | integer (property.common.attempt_number) >= 1 Current webhook notification attempt number |
object Event-specific data payload | |
notification_task_id | string <uuid> Notification task identifier (request identifier) |
{- "id": "string",
- "api_version": "2022-05-25",
- "name": "sms.delivery.dryrun",
- "created_at": 0,
- "attempt_total": 4,
- "attempt_number": 1,
- "data": {
- "id": "string",
- "key_id": 1,
- "dlr_code": 1,
- "status_code": 0,
- "callback_data": "string"
}, - "notification_task_id": "3378de83-de66-4de8-9d29-2b10d41bb641"
}
Triggered when Email to SMS email is successfully parsed
id | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Unique entity UUID |
api_version | string (property.common.api_version) Version of the notification webhook data structure |
name | string Value: "sms.email.parsing.success" Webhook's event name |
created_at | integer (property.common.created_at) >= 0 Timestamp when the entity was added to the system by the user |
attempt_total | integer (property.common.attempt_total) [ 1 .. 4 ] Total number of notification webhook delivery attempts |
attempt_number | integer (property.common.attempt_number) >= 1 Current webhook notification attempt number |
object Event-specific data payload | |
notification_task_id | string <uuid> Notification task identifier (request identifier) |
Event sent when email to SMS parsing is successful
{- "id": "d6ff9b42-1da5-711f-df20-f0173a4e7df1",
- "api_version": "2022-05-25",
- "name": "sms.email.parsing.success",
- "created_at": 1653378803,
- "attempt_total": 1,
- "attempt_number": 1,
- "data": {
- "sms": [
- {
- "uuid": "f8a34ce6-ee9f-33ae-d8fc-747622ddd9fe",
- "to": "+4915123456789",
- "text": "Hello, this is your SMS message content parsed from email."
}
], - "email": {
- "id": "email-456",
- "from": "sender@example.com",
- "to": "sms@your-domain.com",
- "subject": "SMS Request",
- "body": "Send SMS to +4915123456789: Hello, this is your SMS message content parsed from email."
}
}, - "notification_task_id": "5590fa05-fb88-6fc0-bf3b-4d32f63dd863"
}
Triggered when Email to SMS email parsing fails
id | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Unique entity UUID |
api_version | string (property.common.api_version) Version of the notification webhook data structure |
name | string Value: "sms.email.parsing.fail" Webhook's event name |
created_at | integer (property.common.created_at) >= 0 Timestamp when the entity was added to the system by the user |
attempt_total | integer (property.common.attempt_total) [ 1 .. 4 ] Total number of notification webhook delivery attempts |
attempt_number | integer (property.common.attempt_number) >= 1 Current webhook notification attempt number |
object Event-specific data payload | |
notification_task_id | string <uuid> Notification task identifier (request identifier) |
Event sent when email to SMS parsing fails
{- "id": "a3cd6e19-8af2-498d-ad07-c7840f1b4ac8",
- "api_version": "2022-05-25",
- "name": "sms.email.parsing.fail",
- "created_at": 1653378603,
- "attempt_total": 1,
- "attempt_number": 1,
- "data": {
- "field": "recipient",
- "description": "Invalid phone number format",
- "email": {
- "id": "email-789",
- "from": "sender@example.com",
- "to": "sms@your-domain.com",
- "subject": "SMS Request",
- "body": "Send SMS to invalid-phone: Test message"
}
}, - "notification_task_id": "3378de83-de66-4de8-9d29-2b10d41bb641"
}
Getting the list of messages from the postbox, ordered by the field created_at
in descending order. The postbox contains all sent, not sent and terminated SMS. You can also optionally sort according to the price or the time of transmit to the network operator. You also have the option of transferring different search criteria to limit the output of postbox's messages.
page | integer Default: 1 Current page |
_order[created_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by timestamp when the entity was created |
_order[gateway_sent_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by timestamp when the message was transmitted to the mobile network |
is_sent | boolean Boolean filter SMS by the |
is_unicode | boolean Boolean filter SMS by the |
uuid | string Exact filter by SMS ID |
uuid[] | Array of strings Exact filter by SMS ID |
iso2 | string Exact filter SMS by the phone's country (ISO 3166-1 alpha-2) |
iso2[] | Array of strings Exact filter SMS by the phone's countries (ISO 3166-1 alpha-2) |
dlr_code | integer Exact filter SMS by the delivery report status |
dlr_code[] | Array of integers Exact filter SMS by the delivery report statuses |
status_code | integer Exact filter SMS by the status code |
status_code[] | Array of integers Exact filter SMS by the statuses codes |
gateway_sent_at | integer Exact filter SMS by the send to gateway timestamp |
gateway_sent_at[] | Array of integers Exact and range filter SMS by send to gateway timestamps |
delivery_at | integer Exact filter SMS by the delivery timestamp |
delivery_at[] | Array of integers Exact and range filter SMS by the delivery timestamps |
created_at | integer Exact filter entities by the creation timestamp |
created_at[] | Array of integers Exact and range filter entities by the creation timestamps |
chars_count | integer Range filter SMS by the message chars count |
chars_count[] | Array of integers Exact and range filter SMS by the message chars count |
parts_count | integer Exact filter SMS by the message parts count |
parts_count[] | Array of integers Exact and range filter SMS by the message parts count |
bulk | string Exact filter SMS by the Bulk |
bulk[] | Array of strings Exact and range filter SMS by the Bulk |
source | integer Exact filter SMS by the sources |
source[] | Array of integers Exact and range filter SMS by the sources |
text | string Partial case-insensitive text filter SMS by the message text |
phone | string Partial text filter SMS by the phone number |
sender_id | string Partial text case-insensitive filter SMS by the sender number or text |
ip | string Partial text filter SMS by the IP which created the message |
key_id | integer Exact filter entities by the used API key |
key_id[] | Array of integers Exact filter entities by the used API keys |
callback_data | string Exact filter SMS by |
callback_data[] | Array of strings Exact filter SMS by |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/sms \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "text": "string",
- "sender_id": "+491701234567",
- "phone": "+14155552671",
- "delivery_at": 0,
- "status_code": 0,
- "gateway_sent_at": 0,
- "source": 0,
- "dlr_code": 1,
- "ip": "192.168.1.1",
- "created_at": 0,
- "is_unicode": true,
- "uuid": "string",
- "iso2": "US",
- "voice_lang": "DE",
- "parts_count": 1,
- "chars_count": 0,
- "callback_data": "string",
- "bulk_id": null,
- "key_id": 1,
- "service_code": "direct",
- "is_text_deleted": true,
- "price": 0,
- "is_sent": true,
- "requests": "string",
- "clicks": "string"
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
Send short message data, such as text, destination number and sender identification by sending a POST request and we transfer the message to the destination network.
The new sms resource
text required | string (property.sms.text) The message text can have a length of up to 1530 characters. With a Unicode SMS, the maximum character length is reduced to 670 characters. Internal encoding is UTF-8. |
sender_id required | string (property.messages.sender_id) ^(\+?[1-9]\d{0,14}|[a-zA-Z0-9 ]{1,11})$ Sender ID or phone number |
phone required | string (property.common.phone_number) [ 4 .. 16 ] characters ^\+[1-9]\d{1,14}$ Recipient (international) number:
If the number is not in an E.164 format then the service will convert it based on user's address. To avoid problems with the converting please use E.164 preferentially. |
property.messages.delivery_at (integer) or null | |
source | integer or null (property.messages.source) Message source or origin |
is_unicode | boolean or null (property.messages.is_unicode) True if message contains Unicode characters, False otherwise |
(property.messages.voice_lang (string or null)) or null | |
callback_data | string or null (property.common.callback_data) <= 36 characters String which will be send back to your endpoint. E.g. it can be usable to pass your system message id. |
property.messages.service_code (any) or null | |
property.messages.is_text_deleted (boolean) or null |
Example of a simple SMS message with required fields only
{- "text": "Hello! This is a test SMS message.",
- "sender_id": "+491701234567",
- "phone": "+14155552671"
}
API response for a successfully request with minimum parameters
{- "@context": "/contexts/sms",
- "@id": "/sms/11111111-2222-3333-4444-555555555555",
- "@type": "sms",
- "text": "Hello! This is a test SMS message.",
- "sender_id": "+19388888025",
- "phone": "+14155552671",
- "delivery_at": 0,
- "status_code": 0,
- "gateway_sent_at": 0,
- "source": 0,
- "dlr_code": 0,
- "ip": "139.59.136.251",
- "created_at": 1755868416,
- "is_unicode": false,
- "uuid": "11111111-2222-3333-4444-555555555555",
- "iso2": "US",
- "voice_lang": null,
- "parts_count": 1,
- "chars_count": 34,
- "callback_data": null,
- "bulk_id": null,
- "key_id": 8291,
- "service_code": "direct",
- "is_text_deleted": false,
- "price": 0.056,
- "is_sent": false,
- "requests": "/sms/11111111-2222-3333-4444-555555555555/requests",
- "clicks": "/sms/11111111-2222-3333-4444-555555555555/clicks"
}
This endpoint doesn't send any SMS but emulates the proccess and response. This can be used to get the SMS price or test the API during the integration process. The property uuid
will be always equal to 11111111-2222-3333-4444-55555555555
. No data will be saved at LOX24, therefore you can't extract any SMS info by GET /sms/{id}
. DLR report are send back in same way as per real SMS, if DLR url/email was set-up before, but with statuscode 0.
The new sms resource
text required | string (property.sms.text) The message text can have a length of up to 1530 characters. With a Unicode SMS, the maximum character length is reduced to 670 characters. Internal encoding is UTF-8. |
sender_id required | string (property.messages.sender_id) ^(\+?[1-9]\d{0,14}|[a-zA-Z0-9 ]{1,11})$ Sender ID or phone number |
phone required | string (property.common.phone_number) [ 4 .. 16 ] characters ^\+[1-9]\d{1,14}$ Recipient (international) number:
If the number is not in an E.164 format then the service will convert it based on user's address. To avoid problems with the converting please use E.164 preferentially. |
property.messages.delivery_at (integer) or null | |
source | integer or null (property.messages.source) Message source or origin |
is_unicode | boolean or null (property.messages.is_unicode) True if message contains Unicode characters, False otherwise |
(property.messages.voice_lang (string or null)) or null | |
callback_data | string or null (property.common.callback_data) <= 36 characters String which will be send back to your endpoint. E.g. it can be usable to pass your system message id. |
property.messages.service_code (any) or null | |
property.messages.is_text_deleted (boolean) or null |
Example of a simple SMS message with required fields only
{- "text": "Hello! This is a test SMS message.",
- "sender_id": "+491701234567",
- "phone": "+14155552671"
}
API response for a successfully request with minimum parameters
{- "@context": "/contexts/sms",
- "@id": "/sms/11111111-2222-3333-4444-555555555555",
- "@type": "sms",
- "text": "Hello! This is a test SMS message.",
- "sender_id": "+19388888025",
- "phone": "+14155552671",
- "delivery_at": 0,
- "status_code": 0,
- "gateway_sent_at": 0,
- "source": 0,
- "dlr_code": 0,
- "ip": "139.59.136.251",
- "created_at": 1755868416,
- "is_unicode": false,
- "uuid": "11111111-2222-3333-4444-555555555555",
- "iso2": "US",
- "voice_lang": null,
- "parts_count": 1,
- "chars_count": 34,
- "callback_data": null,
- "bulk_id": null,
- "key_id": 8291,
- "service_code": "direct",
- "is_text_deleted": false,
- "price": 0.056,
- "is_sent": false,
- "requests": "/sms/11111111-2222-3333-4444-555555555555/requests",
- "clicks": "/sms/11111111-2222-3333-4444-555555555555/clicks"
}
With this API you can delete SMS messages that have not yet been sent or interrupt the sending process. For scheduled SMS messages, the transmission time must be in the future. If the SMS is not scheduled, the transmission to the mobile phone provider may take a few seconds, which will possibly allow you to stop the transmission in exceptional cases.
_order[created_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by timestamp when the entity was created |
_order[gateway_sent_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by timestamp when the message was transmitted to the mobile network |
is_sent | boolean Boolean filter SMS by the |
is_unicode | boolean Boolean filter SMS by the |
uuid | string Exact filter by SMS ID |
uuid[] | Array of strings Exact filter by SMS ID |
iso2 | string Exact filter SMS by the phone's country (ISO 3166-1 alpha-2) |
iso2[] | Array of strings Exact filter SMS by the phone's countries (ISO 3166-1 alpha-2) |
dlr_code | integer Exact filter SMS by the delivery report status |
dlr_code[] | Array of integers Exact filter SMS by the delivery report statuses |
status_code | integer Exact filter SMS by the status code |
status_code[] | Array of integers Exact filter SMS by the statuses codes |
gateway_sent_at | integer Exact filter SMS by the send to gateway timestamp |
gateway_sent_at[] | Array of integers Exact and range filter SMS by send to gateway timestamps |
delivery_at | integer Exact filter SMS by the delivery timestamp |
delivery_at[] | Array of integers Exact and range filter SMS by the delivery timestamps |
created_at | integer Exact filter entities by the creation timestamp |
created_at[] | Array of integers Exact and range filter entities by the creation timestamps |
chars_count | integer Range filter SMS by the message chars count |
chars_count[] | Array of integers Exact and range filter SMS by the message chars count |
parts_count | integer Exact filter SMS by the message parts count |
parts_count[] | Array of integers Exact and range filter SMS by the message parts count |
bulk | string Exact filter SMS by the Bulk |
bulk[] | Array of strings Exact and range filter SMS by the Bulk |
source | integer Exact filter SMS by the sources |
source[] | Array of integers Exact and range filter SMS by the sources |
text | string Partial case-insensitive text filter SMS by the message text |
phone | string Partial text filter SMS by the phone number |
sender_id | string Partial text case-insensitive filter SMS by the sender number or text |
ip | string Partial text filter SMS by the IP which created the message |
key_id | integer Exact filter entities by the used API key |
key_id[] | Array of integers Exact filter entities by the used API keys |
callback_data | string Exact filter SMS by |
callback_data[] | Array of strings Exact filter SMS by |
curl -X POST https://api.lox24.eu/sms/ops/batch_cancel?uuid=20f39273-0566-11ea-a637-96000028b339 \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "deleted_sms_count": 0
}
With this API you can delete SMS any messages
_order[created_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by timestamp when the entity was created |
_order[gateway_sent_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by timestamp when the message was transmitted to the mobile network |
is_sent | boolean Boolean filter SMS by the |
is_unicode | boolean Boolean filter SMS by the |
uuid | string Exact filter by SMS ID |
uuid[] | Array of strings Exact filter by SMS ID |
iso2 | string Exact filter SMS by the phone's country (ISO 3166-1 alpha-2) |
iso2[] | Array of strings Exact filter SMS by the phone's countries (ISO 3166-1 alpha-2) |
dlr_code | integer Exact filter SMS by the delivery report status |
dlr_code[] | Array of integers Exact filter SMS by the delivery report statuses |
status_code | integer Exact filter SMS by the status code |
status_code[] | Array of integers Exact filter SMS by the statuses codes |
gateway_sent_at | integer Exact filter SMS by the send to gateway timestamp |
gateway_sent_at[] | Array of integers Exact and range filter SMS by send to gateway timestamps |
delivery_at | integer Exact filter SMS by the delivery timestamp |
delivery_at[] | Array of integers Exact and range filter SMS by the delivery timestamps |
created_at | integer Exact filter entities by the creation timestamp |
created_at[] | Array of integers Exact and range filter entities by the creation timestamps |
chars_count | integer Range filter SMS by the message chars count |
chars_count[] | Array of integers Exact and range filter SMS by the message chars count |
parts_count | integer Exact filter SMS by the message parts count |
parts_count[] | Array of integers Exact and range filter SMS by the message parts count |
bulk | string Exact filter SMS by the Bulk |
bulk[] | Array of strings Exact and range filter SMS by the Bulk |
source | integer Exact filter SMS by the sources |
source[] | Array of integers Exact and range filter SMS by the sources |
text | string Partial case-insensitive text filter SMS by the message text |
phone | string Partial text filter SMS by the phone number |
sender_id | string Partial text case-insensitive filter SMS by the sender number or text |
ip | string Partial text filter SMS by the IP which created the message |
key_id | integer Exact filter entities by the used API key |
key_id[] | Array of integers Exact filter entities by the used API keys |
callback_data | string Exact filter SMS by |
callback_data[] | Array of strings Exact filter SMS by |
#!/usr/bin/env bash curl -X POST https://api.lox24.eu/sms/ops/batch_delete?uuid=20f39273-0566-11ea-a637-96000028b339 \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "deleted_sms_count": 0
}
Getting the single SMS entity by the ID (uuid
). If SMS not found then HTTP code 404 will response.
uuid required | string SMS ID ( |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/sms/20f39273-0566-11ea-a637-96000028b339 \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "text": "string",
- "sender_id": "+491701234567",
- "phone": "+14155552671",
- "delivery_at": 0,
- "status_code": 0,
- "gateway_sent_at": 0,
- "source": 0,
- "dlr_code": 1,
- "ip": "192.168.1.1",
- "created_at": 0,
- "is_unicode": true,
- "uuid": "string",
- "iso2": "US",
- "voice_lang": "DE",
- "parts_count": 1,
- "chars_count": 0,
- "callback_data": "string",
- "bulk_id": null,
- "key_id": 1,
- "service_code": "direct",
- "is_text_deleted": true,
- "price": 0,
- "is_sent": true,
- "requests": "string",
- "clicks": "string"
}
Remove the SMS entity by the ID (uuid
). Endpoint response doesn't contains the body and has HTTP code 204 if SMS was removed or 404 if it doesn't exists. Attention. The SMS is also deleted from the itemised bill. Later complaints are therefore excluded due to lack of traceability.
uuid required | string SMS ID ( |
#!/usr/bin/env bash curl -X DELETE https://api.lox24.eu/sms/20f39273-0566-11ea-a637-96000028b339 \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
The bulks interface is used to send bulk SMS. This includes the correct bulk SMS transmission to multiple phone numbers and/or groups but also the dryrun. In addition, there are a number of functions to query the status of a bulk or to stop the mailing.
If you don't want to send mass SMS but want to send individual SMS via the API, then the endpoint "sms" is relevant.
The event bulk.email.parsing.fail
sends on email parsing error.
id | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Unique entity UUID |
api_version | string (property.common.api_version) Version of the notification webhook data structure |
name | string Value: "bulk.email.parsing.fail" Webhook's event name |
created_at | integer (property.common.created_at) >= 0 Timestamp when the entity was added to the system by the user |
attempt_total | integer (property.common.attempt_total) [ 1 .. 4 ] Total number of notification webhook delivery attempts |
attempt_number | integer (property.common.attempt_number) >= 1 Current webhook notification attempt number |
object Event-specific data payload | |
notification_task_id | string <uuid> Notification task identifier (request identifier) |
Event sent when bulk email parsing fails
{- "id": "d6ff9b42-1da5-711f-df20-f0173a4e7df1",
- "api_version": "2022-05-25",
- "name": "bulk.email.parsing.fail",
- "created_at": 1653378903,
- "attempt_total": 1,
- "attempt_number": 1,
- "data": {
- "field": "to",
- "description": "Invalid phone number format",
- "email": {
- "id": "email-124",
- "from": "sender@example.com",
- "to": "bulk@your-domain.com",
- "subject": "SMS Bulk Request",
- "body": "Invalid message content"
}
}, - "notification_task_id": "6601ab16-ca99-7fe1-cf4c-5e43f74ee974"
}
The event bulk.email.parsing.success
sends on successful parsing Email to SMS Bulk
email.
id | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Unique entity UUID |
api_version | string (property.common.api_version) Version of the notification webhook data structure |
name | string Value: "bulk.email.parsing.success" Webhook's event name |
created_at | integer (property.common.created_at) >= 0 Timestamp when the entity was added to the system by the user |
attempt_total | integer (property.common.attempt_total) [ 1 .. 4 ] Total number of notification webhook delivery attempts |
attempt_number | integer (property.common.attempt_number) >= 1 Current webhook notification attempt number |
object Event-specific data payload | |
notification_task_id | string <uuid> Notification task identifier (request identifier) |
Event sent when bulk email is successfully parsed
{- "id": "d6ff9b42-1da5-711f-df20-f0173a4e7df1",
- "api_version": "2022-05-25",
- "name": "bulk.email.parsing.success",
- "created_at": 1653378803,
- "attempt_total": 1,
- "attempt_number": 1,
- "data": {
- "bulk": {
- "id": "f8a34ce6-ee9f-33ae-d8fc-747622ddd9fe",
- "status": 10,
- "created_at": 1653378803
}, - "email": {
- "id": "email-123",
- "from": "sender@example.com",
- "to": "bulk@your-domain.com",
- "subject": "SMS Bulk Request",
- "body": "Message content here"
}
}, - "notification_task_id": "5590fa05-fb88-6fc0-bf3b-4d32f63dd863"
}
Getting the list of bulks from the postbox, ordered by the field created_at
in descending order. The postbox contains all sent, not sent and terminated SMS. You can also optionally sort according to the price or the time of transmit to the network operator. You also have the option of transferring different search criteria to limit the output of postbox's messages.
page | integer Default: 1 Current page |
_order[created_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by timestamp when the entity was created |
_order[delivery_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by timestamp when the message was/should transmitted to the mobile network |
_order[processed_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by timestamp when the entity was changed last time |
_order[msg_total_count] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by the total counts of the related SMS |
text | string Partial case-insensitive text filter SMS by the message text |
sender_id | string Partial text case-insensitive filter SMS by the sender number or text |
status_code | integer Exact filter Bulks by the status code |
status_code[] | Array of integers Exact filter Bulks by the statuses codes |
created_at | integer Exact filter entities by the creation timestamp |
created_at[] | Array of integers Exact and range filter entities by the creation timestamps |
delivery_at | integer Exact filter SMS by the delivery timestamp |
delivery_at[] | Array of integers Exact and range filter SMS by the delivery timestamps |
processed_at | integer Exact filter entities by the last changes timestamp |
processed_at[] | Array of integers Exact and range filter entities by the last changes timestamps |
msg_total_count | integer Exact filter Bulks by the total count of the SMS in the bulk |
msg_total_count[] | Array of integers Exact and range filter Bulks by the total counts of the related SMS |
source | integer Exact filter SMS by the sources |
source[] | Array of integers Exact and range filter SMS by the sources |
key_id | integer Exact filter entities by the used API key |
key_id[] | Array of integers Exact filter entities by the used API keys |
is_unicode | boolean Boolean filter SMS by the |
is_dryrun | boolean Boolean filter Bulks by the |
exists[is_unicode] | boolean Boolean and exists filter Bulks by the |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/bulks \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "uuid": "string",
- "delivery_at": 0,
- "status_code": 0,
- "msg_total_count": 0,
- "created_at": "string",
- "processed_at": 0,
- "ip": "192.168.1.1",
- "is_unicode": true,
- "is_dryrun": true,
- "service_code": "direct",
- "key_id": 1,
- "source": 0,
- "voice_lang": "DE",
- "is_text_deleted": true,
- "msg_total_cost": 0
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
Create a bulk SMS campaign by sending a POST request with message details and recipient information.
The new bulks resource
property.messages.delivery_at (integer) or null | |
sender_id required | string (property.messages.sender_id) ^(\+?[1-9]\d{0,14}|[a-zA-Z0-9 ]{1,11})$ Sender ID or phone number |
text required | string (property.bulks.text) <= 1785 characters Max text length is 1785 character. But don't forget that the final message text can have a length of up to 1530 characters. With a Unicode SMS, the maximum character length is reduced to 670 characters. Internal encoding is UTF-8. |
phones required | Array of strings or null (property.bulks.phones) [ items [ 4 .. 16 ] characters ^\+[1-9]\d{1,14}$ ] List of the recipients (international) numbers:
If the number is not in an E.164 format then the service will convert it based on user's address. To avoid problems with the converting please use E.164 preferentially. |
msg_groups | Array of integers or null (property.bulks.msg_groups) List of the recipients groups |
is_unicode | boolean or null (property.messages.is_unicode) True if message contains Unicode characters, False otherwise |
property.messages.service_code (any) or null | |
source | integer or null (property.messages.source) Message source or origin |
(property.messages.voice_lang (string or null)) or null | |
property.messages.is_text_deleted (boolean) or null |
{- "delivery_at": 0,
- "sender_id": "+491701234567",
- "text": "string",
- "phones": [
- "+14155552671"
], - "msg_groups": [
- 0
], - "is_unicode": true,
- "service_code": "direct",
- "source": 0,
- "voice_lang": "DE",
- "is_text_deleted": true
}
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "uuid": "string",
- "delivery_at": 0,
- "sender_id": "+491701234567",
- "text": "string",
- "phones": [
- "+14155552671"
], - "msg_groups": [
- 0
], - "status_code": 0,
- "msg_total_count": 0,
- "created_at": 0,
- "processed_at": 0,
- "ip": "192.168.1.1",
- "is_unicode": true,
- "is_dryrun": true,
- "service_code": "direct",
- "key_id": 1,
- "source": 0,
- "voice_lang": "DE",
- "is_text_deleted": true,
- "msg_total_cost": 0
}
This endpoint is used for test purposes to emulate the creating of an Bulk without actually creating SMS and passing them to the network operator for a fee.
The new bulks resource
property.messages.delivery_at (integer) or null | |
sender_id required | string (property.messages.sender_id) ^(\+?[1-9]\d{0,14}|[a-zA-Z0-9 ]{1,11})$ Sender ID or phone number |
text required | string (property.bulks.text) <= 1785 characters Max text length is 1785 character. But don't forget that the final message text can have a length of up to 1530 characters. With a Unicode SMS, the maximum character length is reduced to 670 characters. Internal encoding is UTF-8. |
phones required | Array of strings or null (property.bulks.phones) [ items [ 4 .. 16 ] characters ^\+[1-9]\d{1,14}$ ] List of the recipients (international) numbers:
If the number is not in an E.164 format then the service will convert it based on user's address. To avoid problems with the converting please use E.164 preferentially. |
msg_groups | Array of integers or null (property.bulks.msg_groups) List of the recipients groups |
is_unicode | boolean or null (property.messages.is_unicode) True if message contains Unicode characters, False otherwise |
property.messages.service_code (any) or null | |
source | integer or null (property.messages.source) Message source or origin |
(property.messages.voice_lang (string or null)) or null | |
property.messages.is_text_deleted (boolean) or null |
{- "delivery_at": 0,
- "sender_id": "+491701234567",
- "text": "string",
- "phones": [
- "+14155552671"
], - "msg_groups": [
- 0
], - "is_unicode": true,
- "service_code": "direct",
- "source": 0,
- "voice_lang": "DE",
- "is_text_deleted": true
}
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "uuid": "string",
- "delivery_at": 0,
- "sender_id": "+491701234567",
- "text": "string",
- "phones": [
- "+14155552671"
], - "msg_groups": [
- 0
], - "status_code": 0,
- "msg_total_count": 0,
- "created_at": 0,
- "processed_at": 0,
- "ip": "192.168.1.1",
- "is_unicode": true,
- "is_dryrun": true,
- "service_code": "direct",
- "key_id": 1,
- "source": 0,
- "voice_lang": "DE",
- "is_text_deleted": true,
- "msg_total_cost": 0
}
Getting the single Bulk entity by the ID (uuid
). If Bulk not found then HTTP code 404 will response.
id required | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Bulk ID |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/bulks/da0fa78c-4699-11ea-a637-96000028b339 \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "uuid": "string",
- "delivery_at": 0,
- "sender_id": "+491701234567",
- "text": "string",
- "phones": [
- "+14155552671"
], - "msg_groups": [
- 0
], - "status_code": 0,
- "msg_total_count": 0,
- "created_at": 0,
- "processed_at": 0,
- "ip": "192.168.1.1",
- "is_unicode": true,
- "is_dryrun": true,
- "service_code": "direct",
- "key_id": 1,
- "source": 0,
- "voice_lang": "DE",
- "is_text_deleted": true,
- "msg_total_cost": 0
}
Remove the Bulk entity by the ID . Endpoint response doesn't contains the body and has HTTP code 204 if SMS was removed or 404 if it doesn't exists. Attention. The Bulk is also deleted from the itemised bill. Later complaints are therefore excluded due to lack of traceability.
id required | string Bulk ID |
#!/usr/bin/env bash curl -X DELETE https://api.lox24.eu/bulks/da0fa78c-4699-11ea-a637-96000028b339 \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
Cancel Bulk's processing if it has status_code = 0
(New) or status_code = 5
and related to the Bulk messages with is_sent = False
id required | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Bulk ID |
#!/usr/bin/env bash curl -X PUT https://api.lox24.eu/bulks/da0fa78c-4699-11ea-a637-96000028b339/cancel \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "uuid": "string",
- "delivery_at": 0,
- "status_code": 0,
- "msg_total_count": 0,
- "created_at": "string",
- "processed_at": 0,
- "ip": "192.168.1.1",
- "is_unicode": true,
- "is_dryrun": true,
- "service_code": "direct",
- "key_id": 1,
- "source": 0,
- "voice_lang": "DE",
- "is_text_deleted": true,
- "msg_total_cost": 0
}
Getting short info about Bulk status
id required | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Bulk ID |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/bulks/da0fa78c-4699-11ea-a637-96000028b339/status \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "uuid": "string",
- "delivery_at": 0,
- "status_code": 0,
- "msg_total_count": 0,
- "created_at": "string",
- "processed_at": 0,
- "ip": "192.168.1.1",
- "is_unicode": true,
- "is_dryrun": true,
- "service_code": "direct",
- "key_id": 1,
- "source": 0,
- "voice_lang": "DE",
- "is_text_deleted": true,
- "msg_total_cost": 0
}
This interface is used to query inbound SMS (pull). The list of all incoming SMS, as well as the content of a particular SMS. Please note, however, that you can also receive the SMS as push, as soon as they arrive. The push variant is preferably, since you do not have to check for incoming SMS, but these are sent directly to your script.
The event 'sms.incoming' sends on an incoming/reply SMS (mobile originated - SMS-MO).
id | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Unique entity UUID |
api_version | string (property.common.api_version) Version of the notification webhook data structure |
name | string Value: "sms.incoming" Webhook's event name |
created_at | integer (property.common.created_at) >= 0 Timestamp when the entity was added to the system by the user |
attempt_total | integer (property.common.attempt_total) [ 1 .. 4 ] Total number of notification webhook delivery attempts |
attempt_number | integer (property.common.attempt_number) >= 1 Current webhook notification attempt number |
object Event-specific data payload | |
notification_task_id | string <uuid> Notification task identifier (request identifier) |
Event sent when an incoming SMS is received
{- "id": "d6ff9b42-1da5-711f-df20-f0173a4e7df1",
- "api_version": "2022-05-25",
- "name": "sms.incoming",
- "created_at": 1653378703,
- "attempt_total": 1,
- "attempt_number": 1,
- "data": {
- "id": "e7d23bd5-dd8e-22fd-c7eb-636511ccc8ed",
- "to": "+1234567890",
- "from": "+490987654321",
- "text": "Hello, this is a reply message",
- "received_at": 1653378703,
- "msg_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}, - "notification_task_id": "4489ef94-ef77-5ef9-ae2a-3c21e52cc752"
}
Getting the list of incoming SMS ordered by the field received_at
in descending order. The postbox contains all inbound sms and replies. For SMS replies property 'msg_uuid' filled by correspond /sms entity.
page | integer Default: 1 Current page |
_order[received_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by timestamp when the Incoming sms was received |
text | string Partial case-insensitive text filter SMS by the message text |
from | string Partial case-insensitive text filter by sender's phone number |
to | string Partial case-insensitive text filter by inbound's phone number |
msg_uuid | string Exact filter by initial SMS ID |
msg_uuid[] | Array of strings Exact filter by initial SMS ID |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/incomings \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "uuid": "string",
- "to": "+14155552671",
- "from": "+14155552671",
- "received_at": 0,
- "text": "string",
- "msg_uuid": "string"
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
Getting the entry of incoming SMS. The postbox contains all inbound sms and replies. For SMS replies property 'msg_uuid' filled by correspond /sms entity.
uuid required | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Incoming message ID |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/incomings/20f39273-0566-11ea-a637-96000028b339 \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "uuid": "string",
- "to": "+14155552671",
- "from": "+14155552671",
- "received_at": 0,
- "text": "string",
- "msg_uuid": "string"
}
Received SMS (inbound or reply SMS) can be deleted from the server based on the UUID.
uuid required | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Incoming message ID |
#!/usr/bin/env bash curl -X DELETE https://api.lox24.eu/incomings/20f39273-0566-11ea-a637-96000028b339 \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
The function "Groups" allows you to create bulk SMS mailing lists. Each mailing list represents a group. By using the functions in "Groups" you can create, view, delete and export the mailing lists.
Returns all your groups (SMS distribution list).
page | integer Default: 1 Current page |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/groups \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": 1,
- "name": "string",
- "description": "string",
- "name_a": "string",
- "name_b": "string",
- "name_c": "string",
- "name_d": "string",
- "name_e": "string",
- "count_items": 0,
- "deleted_at": "2019-08-24T14:15:22Z"
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
With this command you create a SMS mailing list which is stored in our system for you. A mailing list has a name, a description and five additional columns which you can add in addition to the phone number.
The new groups resource
name required | string (property.group.name) [ 1 .. 50 ] characters Group name |
description | string or null (property.group.description) <= 255 characters Group description |
name_a | string or null (property.group.column_name) <= 50 characters Name of the column |
name_b | string or null (property.group.column_name) <= 50 characters Name of the column |
name_c | string or null (property.group.column_name) <= 50 characters Name of the column |
name_d | string or null (property.group.column_name) <= 50 characters Name of the column |
name_e | string or null (property.group.column_name) <= 50 characters Name of the column |
object or null | |
deleted_at | string or null <date-time> (property.group.deleted_at) Date and time when group will be deleted |
id | integer (property.group.id) >= 1 Group ID |
count_items | integer (property.group.count_items) >= 0 Count of the item in the group |
{- "name": "string",
- "description": "string",
- "name_a": "string",
- "name_b": "string",
- "name_c": "string",
- "name_d": "string",
- "name_e": "string",
- "phones": {
- "property1": {
- "phone": "string",
- "a": "string",
- "b": "string",
- "c": "string",
- "d": "string",
- "e": "string",
- "callback_data": "string"
}, - "property2": {
- "phone": "string",
- "a": "string",
- "b": "string",
- "c": "string",
- "d": "string",
- "e": "string",
- "callback_data": "string"
}
}, - "deleted_at": "2019-08-24T14:15:22Z",
- "id": 1,
- "count_items": 0
}
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": 1,
- "name": "string",
- "description": "string",
- "name_a": "string",
- "name_b": "string",
- "name_c": "string",
- "name_d": "string",
- "name_e": "string",
- "count_items": 0,
- "deleted_at": "2019-08-24T14:15:22Z"
}
Returns the data of the specific group, such as group and column name.
id required | integer >= 0 Group ID |
#!/usr/bin/env bash curl https://api.lox24.eu/groups/12344 \ -H 'Content-Type: application/json' \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": 1,
- "name": "string",
- "description": "string",
- "name_a": "string",
- "name_b": "string",
- "name_c": "string",
- "name_d": "string",
- "name_e": "string",
- "count_items": 0,
- "deleted_at": "2019-08-24T14:15:22Z"
}
Change the configuration of a group, such as the group name or description.
id required | integer >= 0 Group ID |
The updated groups resource
name required | string (property.group.name) [ 1 .. 50 ] characters Group name |
description | string or null (property.group.description) <= 255 characters Group description |
name_a | string or null (property.group.column_name) <= 50 characters Name of the column |
name_b | string or null (property.group.column_name) <= 50 characters Name of the column |
name_c | string or null (property.group.column_name) <= 50 characters Name of the column |
name_d | string or null (property.group.column_name) <= 50 characters Name of the column |
name_e | string or null (property.group.column_name) <= 50 characters Name of the column |
object or null | |
deleted_at | string or null <date-time> (property.group.deleted_at) Date and time when group will be deleted |
id | integer (property.group.id) >= 1 Group ID |
count_items | integer (property.group.count_items) >= 0 Count of the item in the group |
{- "name": "string",
- "description": "string",
- "name_a": "string",
- "name_b": "string",
- "name_c": "string",
- "name_d": "string",
- "name_e": "string",
- "phones": {
- "property1": {
- "phone": "string",
- "a": "string",
- "b": "string",
- "c": "string",
- "d": "string",
- "e": "string",
- "callback_data": "string"
}, - "property2": {
- "phone": "string",
- "a": "string",
- "b": "string",
- "c": "string",
- "d": "string",
- "e": "string",
- "callback_data": "string"
}
}, - "deleted_at": "2019-08-24T14:15:22Z",
- "id": 1,
- "count_items": 0
}
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": 1,
- "name": "string",
- "description": "string",
- "name_a": "string",
- "name_b": "string",
- "name_c": "string",
- "name_d": "string",
- "name_e": "string",
- "count_items": 0,
- "deleted_at": "2019-08-24T14:15:22Z"
}
Delete the group together with all the associated phone numbers.
id required | integer >= 0 Group ID |
#!/usr/bin/env bash curl -X DELETE https://api.lox24.eu/groups/12344 \ -H 'Content-Type: application/json' \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
This interface serves as a complement to groups. Using phones you can add, delete or modify phone numbers in your SMS mailing list. It is also possible to export the content of a group via this interface.
id | phone | col_A | col_B | col_C | col_D | col_E | callback_data |
---|---|---|---|---|---|---|---|
7848412 | +49123456780 | Name | Second name | Foo | Bar | Zoo | 12345 |
7848413 | +49123456781 | Name | Second name | Foo | Bar | Zoo | 12346 |
7848414 | +49123456782 | Name | Second name | Foo | Bar | Zoo | 12347 |
7848415 | +49123456783 | Name | Second name | Foo | Bar | Zoo | 12348 |
The names of the columns will correspond to the values in the fields
name_X
of the corresponding /group
object. If the corresponding
value is missing, the default is col_X
, where X = (a, b, c, d, e).
id required | integer >= 0 Group ID |
#!/usr/bin/env bash curl https://api.lox24.eu/groups/7116/file/csv \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
Retrieves the collection of Phones by Group ID
id required | integer >= 0 Group ID |
#!/usr/bin/env bash curl https://api.lox24.eu/groups/7116/phones \ -H 'Content-Type: application/json' \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "phone": "string",
- "a": "string",
- "b": "string",
- "c": "string",
- "d": "string",
- "e": "string",
- "callback_data": "string",
- "subscribed_at": 0,
- "unsubscribed_at": 0,
- "unsubscribe_reason": 0
}
]
}
Create an entry with a phone number.
id required | integer >= 0 Group ID |
The new phones resource
phone required | string (property.phone.phone) <= 30 characters Phone number |
a | string or null (property.phone.column) <= 1530 characters Phone column data |
b | string or null (property.phone.column) <= 1530 characters Phone column data |
c | string or null (property.phone.column) <= 1530 characters Phone column data |
d | string or null (property.phone.column) <= 1530 characters Phone column data |
e | string or null (property.phone.column) <= 1530 characters Phone column data |
callback_data | string or null (property.common.callback_data) <= 36 characters String which will be send back to your endpoint. E.g. it can be usable to pass your system message id. |
{- "phone": "string",
- "a": "string",
- "b": "string",
- "c": "string",
- "d": "string",
- "e": "string",
- "callback_data": "string"
}
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "phone": "string",
- "a": "string",
- "b": "string",
- "c": "string",
- "d": "string",
- "e": "string",
- "callback_data": "string",
- "subscribed_at": 0,
- "unsubscribed_at": 0,
- "unsubscribe_reason": 0
}
Instead of sending multiple requests better to send a single request with a list of Phone objects as body request.
id required | integer >= 0 Group ID |
The new groups resource
phone required | string (property.phone.phone) <= 30 characters Phone number |
a | string or null (property.phone.column) <= 1530 characters Phone column data |
b | string or null (property.phone.column) <= 1530 characters Phone column data |
c | string or null (property.phone.column) <= 1530 characters Phone column data |
d | string or null (property.phone.column) <= 1530 characters Phone column data |
e | string or null (property.phone.column) <= 1530 characters Phone column data |
callback_data | string or null (property.common.callback_data) <= 36 characters String which will be send back to your endpoint. E.g. it can be usable to pass your system message id. |
[- {
- "phone": "string",
- "a": "string",
- "b": "string",
- "c": "string",
- "d": "string",
- "e": "string",
- "callback_data": "string"
}
]
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "hydra:totalItems": 0,
- "hydra:member": {
- "status": 0,
- "body": {
- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "phone": "string",
- "a": "string",
- "b": "string",
- "c": "string",
- "d": "string",
- "e": "string",
- "callback_data": "string",
- "subscribed_at": 0,
- "unsubscribed_at": 0,
- "unsubscribe_reason": 0
}
}
}
Query an entry with a phone number.
id required | integer >= 0 Phone identifier |
#!/usr/bin/env bash curl https://api.lox24.eu/phones/12344 \ -H 'Content-Type: application/json' \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "phone": "string",
- "a": "string",
- "b": "string",
- "c": "string",
- "d": "string",
- "e": "string",
- "callback_data": "string",
- "subscribed_at": 0,
- "unsubscribed_at": 0,
- "unsubscribe_reason": 0
}
Edit an entry with a phone number.
id required | integer >= 0 Phone identifier |
The updated phones resource
phone required | string (property.phone.phone) <= 30 characters Phone number |
a | string or null (property.phone.column) <= 1530 characters Phone column data |
b | string or null (property.phone.column) <= 1530 characters Phone column data |
c | string or null (property.phone.column) <= 1530 characters Phone column data |
d | string or null (property.phone.column) <= 1530 characters Phone column data |
e | string or null (property.phone.column) <= 1530 characters Phone column data |
callback_data | string or null (property.common.callback_data) <= 36 characters String which will be send back to your endpoint. E.g. it can be usable to pass your system message id. |
{- "phone": "string",
- "a": "string",
- "b": "string",
- "c": "string",
- "d": "string",
- "e": "string",
- "callback_data": "string"
}
{- "@context": "string",
- "@id": "string",
- "@type": "string",
- "id": "string",
- "phone": "string",
- "a": "string",
- "b": "string",
- "c": "string",
- "d": "string",
- "e": "string",
- "callback_data": "string",
- "subscribed_at": 0,
- "unsubscribed_at": 0,
- "unsubscribe_reason": 0
}
Delete an entry with a phone number.
id required | integer >= 0 Phone identifier |
#!/usr/bin/env bash curl -X DELETE https://api.lox24.eu/phones/12344 \ -H 'Content-Type: application/json' \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
LOX24 allows you to shorten long URLs by replacing them with short URLs using our l24.pw domain.
This makes it also possible to implement powerful marketing campaigns. Thus, a unique short link can be sent with each SMS. This allows you to track which of your customers clicked on the link. With this data, you can interact with customers in a more targeted way or improve your campaigns.
But that's not all! LOX24 also offers special short links that allow the user to subscribe or unsubscribe to your SMS newsletters. This allows you to automate the double opt-in and opt-out in a legally compliant way.
Please check the chapter Create a Short Link Campaign
There are two types of campaigns:
Please read the chapter Creating a signup form campaign.
A special type of short link will be generated that will redirect the user to a signup form on our website (white label). You also need to add a group ID to determine the SMS mailing list. The phone numbers of the users who filled out the signup form will be added to this group.
Please read the chapter Creating an unsubscribe form campaign chapter.
A special short link is created that redirects the user to an unsubscribe form (white label). You can also add a group ID (SMS mailing list) from which the phone numbers of the users who sent the unsubscribe form will be removed. Even if the group is not listed when unsubscribing, the user's number will be added to the blacklist.
Please check the chapter Send the SMS or Create the Bulk for the general funtionality.
To send a SMS with a short link you need to put the following placeholder[slink campaing_id]
in the message text, whereby campaing_id
is the value of the campaign-id. You will receive this value as a return value when you create a campaign. Of course, you can also query the value for existing campaigns. For example, this is what your SMS text would look like for a campaign with the ID eGxoGRMq:
Please check a link [slink eGxoGRMq]
Our system replaces the value of the placeholder with the correct link for each SMS recipient. You can also use SMS dry-run mode to check roughly how the text with the link will look like and what the final price of the SMS will be.
(This information is only available for campaigns with Advanced type)
Number of clicks on an individual SMS can be found by SMS id or list by all SMS.
You are able to get a full list of the short links which were generated by all your campaigns or by some campaign.
There are endpoints which provide detalized information about user requests:
You can create a short link campaign via the campaigns API. A short link campaign is used to create a short link, which you can then use for individual and bulk SMS messages. You can also query the existing short links via the interface and change or delete them.
Retrieve the list of all existing Short Link Campaigns ordered by the field created_at
in descending order.
page | integer Default: 1 Current page |
_order[created_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by timestamp when the entity was created |
name | string Filter short links by name (partial match) |
url | string Partial case-insensitive text filter by a destination URL |
created_at | integer Exact filter entities by the creation timestamp |
created_at[] | Array of integers Exact and range filter entities by the creation timestamps |
type | integer Exact filter short links by type (exact match) |
type[] | Array of integers Range filter short links by type (array of values) |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/short_link_campaigns \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "type": 1,
- "id": "string",
- "name": "string",
- "url": "string",
- "created_at": 0,
- "group_id": 0
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
Create a new Short Link Campaign entity with destination url, type and name
The new short_link_campaigns resource
type required | integer (property.short_link_campaigns.type) Enum: 1 2 Type of the short link campaign |
name required | string (property.short_link_campaigns.name) <= 100 characters Name of the short link campaign |
url required | string (property.short_link_campaigns.url) URL of the short link campaign |
group_id | integer or null (property.short_link_campaigns.group_id) Group ID of the short link campaign |
{- "type": 1,
- "name": "string",
- "url": "string",
- "group_id": 0
}
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "type": 1,
- "id": "string",
- "name": "string",
- "url": "string",
- "created_at": 0,
- "group_id": 0
}
A special type of short link campaign that redirects the user to a subscription form. You can specify the id of the group to which the subscribed users phone numbers will be added.
The new short_link_campaigns resource
name required | string (property.short_link_campaigns.name) <= 100 characters Name of the short link campaign |
group_id required | integer or null (property.short_link_campaigns.group_id) Group ID of the short link campaign |
{- "name": "string",
- "group_id": 0
}
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "type": 1,
- "id": "string",
- "name": "string",
- "url": "string",
- "created_at": 0,
- "group_id": 0
}
A special type of short link campaign that redirects the user to a unsubscription form. You can specify the id of the group from which the subscribed users phone numbers will be removed (if they have been added to it).
The new short_link_campaigns resource
name required | string (property.short_link_campaigns.name) <= 100 characters Name of the short link campaign |
group_id required | integer or null (property.short_link_campaigns.group_id) Group ID of the short link campaign |
{- "name": "string",
- "group_id": 0
}
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "type": 1,
- "id": "string",
- "name": "string",
- "url": "string",
- "created_at": 0,
- "group_id": 0
}
Retrieve a specific Short Link Campaign by it's ID. If the Campaign is not found then the HTTP code response will be 404.
code required | string short_link_campaigns code |
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "type": 1,
- "id": "string",
- "name": "string",
- "url": "string",
- "created_at": 0,
- "group_id": 0
}
Edit the values of a specific Short Link Campaigns. If the Campaign is not found then the HTTP code response will be 404.
code required | string short_link_campaigns code |
The updated short_link_campaigns resource
type required | integer (property.short_link_campaigns.type) Enum: 1 2 Type of the short link campaign |
name required | string (property.short_link_campaigns.name) <= 100 characters Name of the short link campaign |
url required | string (property.short_link_campaigns.url) URL of the short link campaign |
group_id | integer or null (property.short_link_campaigns.group_id) Group ID of the short link campaign |
{- "type": 1,
- "name": "string",
- "url": "string",
- "group_id": 0
}
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "type": 1,
- "id": "string",
- "name": "string",
- "url": "string",
- "created_at": 0,
- "group_id": 0
}
Delete a Short Link Campaign. If the Campaign is not found then the HTTP code response will be 404.
code required | string short_link_campaigns code |
#!/usr/bin/env bash curl -X DELETE https://api.lox24.eu/short_link_campaigns/campaign_id_here \ -H 'Content-Type: application/json' \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
List of all short links which were used in all existing campaigns.
page | integer Default: 1 Current page |
_order[updated_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort a list by 'updated_at' property |
url | string Partial case-insensitive text filter by a destination URL |
updated_at | integer Exact filter entities by the last update timestamp |
updated_at[] | Array of integers Exact and range filter entities by the last update timestamps |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/short_links \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "short_code": "string",
- "url": "string",
- "updated_at": 0,
- "requests": "string"
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
Retrieve all the information about a specific short link.
shortCode required | string Short link code |
#!/usr/bin/env bash curl https://api.lox24.eu/short_links/short_link_id \ -H 'Content-Type: application/json' \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "short_code": "string",
- "url": "string",
- "updated_at": 0,
- "requests": "string"
}
List of all short links which were used in a specific campaign.
code required | string short_link_campaigns code |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/short_link_campaigns/{id}/short_links \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "short_code": "string",
- "url": "string",
- "updated_at": 0,
- "requests": "string"
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
Via requests you can retrieve the results of your short link campaign. Depending on whether you have sent an SMS with simple or advanced tracking, you can determine which phone numbers have clicked how often on the links in your SMS. Through this interface it is possible to find out which recipients or which SMS have scored how well.
List of all requests by a SMS Bulk ID
id required | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Bulk ID |
page | integer Default: 1 Current page |
_order[date] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort a list by 'date' property |
ip | string Partial case-insensitive text filter by a IP address |
url | string Partial case-insensitive text filter by a destination URL |
user_agent | string Partial filter short links by user agent (partial match) |
country | string Exact filter entities by the country code |
country[] | Array of strings Exact filter entities by the country codes |
referer | string Partial case-insensitive text filter by a referer |
date | integer Exact filter short link requests by exact date |
date[] | Array of integers Exact filter short link requests by date (array of values) |
type | integer Exact filter short links by type (exact match) |
type[] | Array of integers Range filter short links by type (array of values) |
browser | string Partial case-insensitive text filter by a browser name |
os | string Partial case-insensitive text filter by a operation system name |
os_version | string Partial case-insensitive text filter by a operation system version |
software_type | string Partial case-insensitive text filter by a software type |
hardware_type | string Partial case-insensitive text filter by a hardware type |
date[between] | string Range filter short link requests by date range |
date[gt] | string Filter short link requests by date greater than |
date[gte] | string Filter short link requests by date greater than or equal |
date[lt] | string Filter short link requests by date less than |
date[lte] | string Filter short link requests by date less than or equal |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/bulks/{bulk_id_here}/requests \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "id": 0,
- "ip": "192.168.1.1",
- "user_agent": "string",
- "url": "string",
- "date": 0,
- "country": "US",
- "referer": "string",
- "type": 0,
- "browser": "string",
- "browser_version": "string",
- "os": "string",
- "os_version": "string",
- "software_type": "string",
- "hardware_type": "string"
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
Lists all clicks on shortlinks for a specific campaign
code required | string short_link_campaigns code |
page | integer Default: 1 Current page |
_order[date] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort a list by 'date' property |
ip | string Partial case-insensitive text filter by a IP address |
url | string Partial case-insensitive text filter by a destination URL |
user_agent | string Partial filter short links by user agent (partial match) |
country | string Exact filter entities by the country code |
country[] | Array of strings Exact filter entities by the country codes |
referer | string Partial case-insensitive text filter by a referer |
date | integer Exact filter short link requests by exact date |
date[] | Array of integers Exact filter short link requests by date (array of values) |
type | integer Exact filter short links by type (exact match) |
type[] | Array of integers Range filter short links by type (array of values) |
browser | string Partial case-insensitive text filter by a browser name |
os | string Partial case-insensitive text filter by a operation system name |
os_version | string Partial case-insensitive text filter by a operation system version |
software_type | string Partial case-insensitive text filter by a software type |
hardware_type | string Partial case-insensitive text filter by a hardware type |
date[between] | string Range filter short link requests by date range |
date[gt] | string Filter short link requests by date greater than |
date[gte] | string Filter short link requests by date greater than or equal |
date[lt] | string Filter short link requests by date less than |
date[lte] | string Filter short link requests by date less than or equal |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu//short_link_campaigns/{campaign_id}/requests \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "id": 0,
- "ip": "192.168.1.1",
- "user_agent": "string",
- "url": "string",
- "date": 0,
- "country": "US",
- "referer": "string",
- "type": 0,
- "browser": "string",
- "browser_version": "string",
- "os": "string",
- "os_version": "string",
- "software_type": "string",
- "hardware_type": "string"
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
Lists all clicks on shortlinks
page | integer Default: 1 Current page |
_order[date] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort a list by 'date' property |
ip | string Partial case-insensitive text filter by a IP address |
url | string Partial case-insensitive text filter by a destination URL |
user_agent | string Partial filter short links by user agent (partial match) |
country | string Exact filter entities by the country code |
country[] | Array of strings Exact filter entities by the country codes |
referer | string Partial case-insensitive text filter by a referer |
date | integer Exact filter short link requests by exact date |
date[] | Array of integers Exact filter short link requests by date (array of values) |
type | integer Exact filter short links by type (exact match) |
type[] | Array of integers Range filter short links by type (array of values) |
browser | string Partial case-insensitive text filter by a browser name |
browser_version | string Partial case-insensitive text filter by a browser version |
os | string Partial case-insensitive text filter by a operation system name |
os_version | string Partial case-insensitive text filter by a operation system version |
software_type | string Partial case-insensitive text filter by a software type |
hardware_type | string Partial case-insensitive text filter by a hardware type |
date[between] | string Range filter short link requests by date range |
date[gt] | string Filter short link requests by date greater than |
date[gte] | string Filter short link requests by date greater than or equal |
date[lt] | string Filter short link requests by date less than |
date[lte] | string Filter short link requests by date less than or equal |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/short_link_requests \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "id": 0,
- "ip": "192.168.1.1",
- "user_agent": "string",
- "url": "string",
- "date": 0,
- "country": "US",
- "referer": "string",
- "type": 0,
- "browser": "string",
- "browser_version": "string",
- "os": "string",
- "os_version": "string",
- "software_type": "string",
- "hardware_type": "string"
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
Retrieve the detail information about a short link click
id required | string Short link request ID |
#!/usr/bin/env bash curl https://api.lox24.eu/short_link_requests/request_id_here \ -H 'Content-Type: application/json' \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "id": 0,
- "ip": "192.168.1.1",
- "user_agent": "string",
- "url": "string",
- "date": 0,
- "country": "US",
- "referer": "string",
- "type": 0,
- "browser": "string",
- "browser_version": "string",
- "os": "string",
- "os_version": "string",
- "software_type": "string",
- "hardware_type": "string"
}
List of all requests by a short link campaign code
shortCode required | string Short link code |
page | integer Default: 1 Current page |
_order[date] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort a list by 'date' property |
ip | string Partial case-insensitive text filter by a IP address |
url | string Partial case-insensitive text filter by a destination URL |
user_agent | string Partial filter short links by user agent (partial match) |
country | string Exact filter entities by the country code |
country[] | Array of strings Exact filter entities by the country codes |
referer | string Partial case-insensitive text filter by a referer |
date | integer Exact filter short link requests by exact date |
date[] | Array of integers Exact filter short link requests by date (array of values) |
type | integer Exact filter short links by type (exact match) |
type[] | Array of integers Range filter short links by type (array of values) |
browser | string Partial case-insensitive text filter by a browser name |
browser_version | string Partial case-insensitive text filter by a browser version |
os | string Partial case-insensitive text filter by a operation system name |
os_version | string Partial case-insensitive text filter by a operation system version |
software_type | string Partial case-insensitive text filter by a software type |
hardware_type | string Partial case-insensitive text filter by a hardware type |
date[between] | string Range filter short link requests by date range |
date[gt] | string Filter short link requests by date greater than |
date[gte] | string Filter short link requests by date greater than or equal |
date[lt] | string Filter short link requests by date less than |
date[lte] | string Filter short link requests by date less than or equal |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/short_links/{short_link_id}/requests \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "id": 0,
- "ip": "192.168.1.1",
- "user_agent": "string",
- "url": "string",
- "date": 0,
- "country": "US",
- "referer": "string",
- "type": 0,
- "browser": "string",
- "browser_version": "string",
- "os": "string",
- "os_version": "string",
- "software_type": "string",
- "hardware_type": "string"
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
List of all requests by a single SMS ID
uuid required | string SMS ID ( |
page | integer Default: 1 Current page |
_order[date] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort a list by 'date' property |
ip | string Partial case-insensitive text filter by a IP address |
url | string Partial case-insensitive text filter by a destination URL |
user_agent | string Partial filter short links by user agent (partial match) |
country | string Exact filter entities by the country code |
country[] | Array of strings Exact filter entities by the country codes |
referer | string Partial case-insensitive text filter by a referer |
date | integer Exact filter short link requests by exact date |
date[] | Array of integers Exact filter short link requests by date (array of values) |
type | integer Exact filter short links by type (exact match) |
type[] | Array of integers Range filter short links by type (array of values) |
browser | string Partial case-insensitive text filter by a browser name |
os | string Partial case-insensitive text filter by a operation system name |
os_version | string Partial case-insensitive text filter by a operation system version |
software_type | string Partial case-insensitive text filter by a software type |
hardware_type | string Partial case-insensitive text filter by a hardware type |
date[between] | string Range filter short link requests by date range |
date[gt] | string Filter short link requests by date greater than |
date[gte] | string Filter short link requests by date greater than or equal |
date[lt] | string Filter short link requests by date less than |
date[lte] | string Filter short link requests by date less than or equal |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/sms/{sms_id}/requests \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "id": 0,
- "ip": "192.168.1.1",
- "user_agent": "string",
- "url": "string",
- "date": 0,
- "country": "US",
- "referer": "string",
- "type": 0,
- "browser": "string",
- "browser_version": "string",
- "os": "string",
- "os_version": "string",
- "software_type": "string",
- "hardware_type": "string"
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
By using this interface, you will be able to measure the number of clicks of your SMS mailings.
Retrieves the list of sms which contain a short link and the number of clicks on these links.
page | integer Default: 1 |
_order[created_at] | string Default: "asc" Enum: "asc" "desc" Sort a list by 'created_at' property |
requests_count | integer Exact filter by the requests count value |
requests_count[] | Array of integers Exact and range filter by the requests count value |
created_at | integer Exact filter by SMS creating date |
created_at[] | Array of integers Exact and range filter by SMS creating date |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/sms/clicks \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "uuid": "string",
- "created_at": 0,
- "requests_count": 0
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
Returns the number of clicks on a short link for a specific SMS. If SMS doesn't exists or doesn't contain then HTTP code 404 will response.
uuid required | string SMS ID ( |
#!/usr/bin/env bash curl https://api.lox24.eu/sms/clicks/sms_uuid_here \ -H 'Content-Type: application/json' \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "uuid": "string",
- "created_at": 0,
- "requests_count": 0
}
The Fraud Detection API helps to identify suspicious requests to your service. The API receives data such as phone number, email and IP address of your potential customer from you in compliance with data protection regulations in Europe. Our system checks them using databases, algorithms and artificial intelligence. The API finally gives an assessment about the risk of a fraud. The risk is measured as the probability of fraud from 0 to 100, where 0
represents a small probability of fraud (good risk value) and 100
represents an extremely high probability of fraud (bad risk value).
The service also allows you to check each part of the request separately yourself, for example by passing only the phone data.
In addition to the risk score, the Fraud Detection AP response also contains additional information to help you with your own risk assessment:
Depending on the chosen tariff 'direct' the response and the processing speed of the request are different. Economy requests are suitable e.g. for a simple login. Pro requests for a new customer registration and direct requests for a product sale:
Since scoring takes some time, the request is processed in asynchronous mode and after processing the service sends the request data back in JSON format to the HTTP URL or email you specified. You can set this value in the web account under Settings and Notifications (Event Notifications). You can also check the status of the request by its ID by sending a request to the API. However, we strongly recommend that you use the notification system (webhook), as the service might block your requests if there are a large number of requests from your side.
Triggered when a Fraud Detection request is completed
id | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Unique entity UUID |
api_version | string (property.common.api_version) Version of the notification webhook data structure |
name | string Value: "fraud-check.done" Webhook's event name |
created_at | integer (property.common.created_at) >= 0 Timestamp when the entity was added to the system by the user |
attempt_total | integer (property.common.attempt_total) [ 1 .. 4 ] Total number of notification webhook delivery attempts |
attempt_number | integer (property.common.attempt_number) >= 1 Current webhook notification attempt number |
object Event-specific data payload | |
notification_task_id | string <uuid> Notification task identifier (request identifier) |
Event sent when fraud detection check is completed
{- "id": "a7bc0d53-2ab6-822c-df31-a1284b5f8ea2",
- "api_version": "2022-05-25",
- "name": "fraud-check.done",
- "created_at": 1653379003,
- "attempt_total": 1,
- "attempt_number": 1,
- "data": {
- "check_id": "fraud-check-123",
- "result": "clean",
- "confidence_score": 0.95
}, - "notification_task_id": "7712ab27-cd00-8ef2-da5d-6f54f85ff085"
}
Retrieves the list of all previous Fraud Check requests
page | integer Default: 1 Current page |
_order[created_at] | string (order.ordering) Default: "asc" Enum: "asc" "desc" Sort by timestamp when the entity was created |
id | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Exact filter by Fraud request ID |
id[] | Array of strings (property.common.uuid) [ items^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... ] Exact filter by Fraud request ID |
callback_data | string Partitial filter entities by the |
request_phone.phone | string Partial filter by the request's phone value |
request_email.email | string Partial filter by the request's email value |
request_ip.ip | string Partial filter by the request's IP value |
status_code | integer Exact filter Fraud requests by the status code |
status_code[] | Array of integers Exact filter Fraud requests by the status codes |
#!/usr/bin/env bash curl -X GET https://api.lox24.eu/fraud-checks \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "hydra:member": [
- {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "id": "string",
- "status_code": 0,
- "risk_score": 100,
- "service_code": "economy",
- "created_at": 0,
- "updated_at": 0,
- "callback_data": "string",
- "request_phone": {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "status_code": 0,
- "phone": "+14155552671",
- "created_at": 0,
- "updated_at": 0,
- "is_possible": true,
- "is_valid": true,
- "region": "US",
- "number_type": "string"
}, - "request_email": {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "status_code": 0,
- "email": "user@example.com",
- "created_at": 0,
- "updated_at": 0,
- "is_possible": true,
- "is_anonymous": true
}, - "request_ip": {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "status_code": 0,
- "ip": "strings",
- "created_at": 0,
- "updated_at": 0,
- "iso2": "US",
- "state": "US",
- "city": "string",
- "postcode": "string",
- "geolocation": [
- 0
], - "isp_name": "string",
- "isp_risk_score": 100,
- "proxy_type": "VPN",
- "connection_type": "dialup",
- "is_ok": true
}, - "request_address": {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "status_code": 0,
- "iso2": "US",
- "city": "string",
- "postcode": "string",
- "street_number": "string",
- "street_name": "string",
- "created_at": 0,
- "updated_at": 0
}, - "price": 0
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "string",
- "type": "string",
- "hydra:first": "string",
- "hydra:last": "string",
- "hydra:previous": "string",
- "hydra:next": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}
Send a Fraud Check request and get risk score value back.
The new fraud-check resource
service_code required | string (property.fraud-check.service_code) Enum: "economy" "pro" "direct" Service code defines the type of fraud query you make. Economy contains only a risk value, while Pro and Direct contain more details about the results, so you can make your own decision. Direct queries are also processed with priority. (see /me) |
(property.common.callback_data (string or null)) or null | |
property.common.phone_number (string) or null | |
property.fraud-check.email (string) or null | |
property.fraud-check.ip (string) or null | |
schema.fraud-check-address-fraud_request_write (object) or null |
{- "service_code": "economy",
- "callback_data": "string",
- "phone": "+14155552671",
- "email": "string",
- "ip": "strings",
- "address": {
- "iso2": "US",
- "city": "string",
- "postcode": "string",
- "street_number": "string",
- "street_name": "string"
}
}
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "id": "string",
- "status_code": 0,
- "risk_score": 100,
- "service_code": "economy",
- "created_at": 0,
- "updated_at": 0,
- "callback_data": "string",
- "request_phone": {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "status_code": 0,
- "phone": "+14155552671",
- "created_at": 0,
- "updated_at": 0,
- "is_possible": true,
- "is_valid": true,
- "region": "US",
- "number_type": "string"
}, - "request_email": {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "status_code": 0,
- "email": "user@example.com",
- "created_at": 0,
- "updated_at": 0,
- "is_possible": true,
- "is_anonymous": true
}, - "request_ip": {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "status_code": 0,
- "ip": "strings",
- "created_at": 0,
- "updated_at": 0,
- "iso2": "US",
- "state": "US",
- "city": "string",
- "postcode": "string",
- "geolocation": [
- 0
], - "isp_name": "string",
- "isp_risk_score": 100,
- "proxy_type": "VPN",
- "connection_type": "dialup",
- "is_ok": true
}, - "request_address": {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "status_code": 0,
- "iso2": "US",
- "city": "string",
- "postcode": "string",
- "street_number": "string",
- "street_name": "string",
- "created_at": 0,
- "updated_at": 0
}, - "price": 0
}
Returns the data of a specific Fraud Check request
id required | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Fraud Check request ID |
#!/usr/bin/env bash curl https://api.lox24.eu/fraud-checks/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee \ -H 'Content-Type: application/json' \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
{- "@id": "string",
- "@type": "string",
- "@context": "string",
- "id": "string",
- "status_code": 0,
- "risk_score": 100,
- "service_code": "economy",
- "created_at": 0,
- "updated_at": 0,
- "callback_data": "string",
- "request_phone": {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "status_code": 0,
- "phone": "+14155552671",
- "created_at": 0,
- "updated_at": 0,
- "is_possible": true,
- "is_valid": true,
- "region": "US",
- "number_type": "string"
}, - "request_email": {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "status_code": 0,
- "email": "user@example.com",
- "created_at": 0,
- "updated_at": 0,
- "is_possible": true,
- "is_anonymous": true
}, - "request_ip": {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "status_code": 0,
- "ip": "strings",
- "created_at": 0,
- "updated_at": 0,
- "iso2": "US",
- "state": "US",
- "city": "string",
- "postcode": "string",
- "geolocation": [
- 0
], - "isp_name": "string",
- "isp_risk_score": 100,
- "proxy_type": "VPN",
- "connection_type": "dialup",
- "is_ok": true
}, - "request_address": {
- "@id": "string",
- "@type": "string",
- "@context": "string",
- "status_code": 0,
- "iso2": "US",
- "city": "string",
- "postcode": "string",
- "street_number": "string",
- "street_name": "string",
- "created_at": 0,
- "updated_at": 0
}, - "price": 0
}
Remove all information about a previous Fraud Check request.
id required | string (property.common.uuid) ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... Fraud Check request ID |
#!/usr/bin/env bash curl -X DELETE https://api.lox24.eu/fraud-checks/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee \ -H 'Content-Type: application/json' \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx'
LOX24 API provides a generic system to apply filters and sort criteria on collections. You can see which filters you can use in the property description.
The API uses two types of the text filters:
Note: Search filters with the exact strategy can have multiple values for the same property (in this case the condition will be similar to a SQL IN clause).
Find sms which phone
property contains "4979" and text
property
contains *"hello":
curl -X GET https://api.lox24.eu/sms?phone=4979&text=hello \
-H 'Host: api.lox24.eu' \
-H 'X-LOX24-AUTH-TOKEN: e3f3a759b6677959b6ebfcxxxxxxxxxx' \
-H 'X-LOX24-CLIENT-ID: 1234567'
Find sms with country iso2
property equal 'DE' OR 'CH' and status_code
= 0
curl -X GET https://api.lox24.eu/sms?iso2[]=DE&iso2[]=CH&status_code=0 \
-H 'Host: api.lox24.eu' \
-H 'X-LOX24-AUTH-TOKEN: e3f3a759b6677959b6ebfcxxxxxxxxxx' \
-H 'X-LOX24-CLIENT-ID: 1234567'
The boolean filter allows to search on boolean fields and values.
Syntax: ?property=<true|false|1|0>
Get sms which wasn't sent to the mobile operator yet:
curl -X GET https://api.lox24.eu/sms?sent=0 \
-H 'Host: api.lox24.eu' \
-H 'X-LOX24-AUTH-TOKEN: e3f3a759b6677959b6ebfcxxxxxxxxxx' \
-H 'X-LOX24-CLIENT-ID: 1234567'
The exists filter allows to select items based on a nullable field value
Syntax: ?exists[property]=<true|false|1|0>
Get bulks which has property is_unicode=null
(sms encoding auto-detection):
curl -X GET https://api.lox24.eu/bulks?exists[is_unicode]=0 \
-H 'Host: api.lox24.eu' \
-H 'X-LOX24-AUTH-TOKEN: e3f3a759b6677959b6ebfcxxxxxxxxxx' \
-H 'X-LOX24-CLIENT-ID: 1234567'
The range filter allows to filter by a value lower than, greater than, lower than or equal, greater than or equal and between two values.
Syntax: ?property[<lt|gt|lte|gte|between>]=value
Filter sms collection by the field created_at
between 1575158400 (2019-12-01)
and 1575676800 (2019-12-07):
curl -X GET https://api.lox24.eu/sms?created_at[between]=1575158400..1575676800 \
-H 'Host: api.lox24.eu' \
-H 'X-LOX24-AUTH-TOKEN: e3f3a759b6677959b6ebfcxxxxxxxxxx' \
-H 'X-LOX24-CLIENT-ID: 1234567'
The order filter allows you to sort a collection against the given properties.
Order parameter _order
.
Sort sms collection by the field 'created_at' in descending order:
curl -X GET https://api.lox24.eu/sms?_order[created_at]=desc \
-H 'Host: api.lox24.eu' \
-H 'X-LOX24-AUTH-TOKEN: e3f3a759b6677959b6ebfcxxxxxxxxxx' \
-H 'X-LOX24-CLIENT-ID: 1234567'
Description of the sms status codes (property status_code
):
Status code | Description |
---|---|
0 | New just created message |
100 | Message was successfuly transmitted to the mobile operator |
208 | The destination network/country is blocked |
400 | The message could not be delivered during maintenance |
410 | The message was stopped before transmission via web account |
2000 | No connection to landline possible at the moment |
3000 | Not enough money on the user balance to send the message |
5000 | No mobile operator found for this message |
6000 | The message was stopped before transmission via API |
For each transmitted SMS there is a delivery report (DLR). There are two ways to get these delivery reports:
Event notifications
for more information.GET /sms/{id}
(id - SMS id) and check the parameter dlr_code
.dlr_code
):Status code | Description |
---|---|
0 | NONE: There is no delivery report available |
1 | DELIVERY_OK: The message was successfully delivered |
2 | DELIVERY_QUEUE: The message is scheduled for later sending |
4 | DELIVERY_SUBMIT_ACK: The message is enroute |
8 | DELIVERY_EXPIRED: The SMSC was unable to deliver the message in a specified amount of time. For instance when the phone was turned off |
16 | DELIVERY_REJECTED: The message was rejected. The provider could have blocked phone numbers in this range |
Generally, the SMS text has to be transfered with UTF-8 encoding to the gateway. You have the option to use the parameter "is_unicode" to decide if you want to send a normal 7 bit or UCS-2 SMS.
The basic character set contains all characters that can be transmitted with a normal 7 bit SMS. Each of this characters counts as 1 character. The extended character set can also be transferred, but requires 2 characters for transmission. SMS which contain more than 160 characters are delivered to the handset as multiple SMS, each with 153 characters, and concatenated by the phone to one message. If you send an SMS explicitly with the GSM 03.38 charset and your message contains characters which are not part of the GSM charset, our system will try to convert your text using transliteration.
Basic Character Set
0x00 | 0x10 | 0x20 | 0x30 | 0x40 | 0x50 | 0x60 | 0x70 | |
---|---|---|---|---|---|---|---|---|
0x00 | @ | Δ | SP | 0 | ¡ | P | ¿ | p |
0x01 | £ | _ | ! | 1 | A | Q | a | q |
0x02 | $ | Φ | " | 2 | B | R | b | r |
0x03 | ¥ | Γ | # | 3 | C | S | c | s |
0x04 | è | Λ | ¤ | 4 | D | T | d | t |
0x05 | é | Ω | % | 5 | E | U | e | u |
0x06 | ù | Π | & | 6 | F | V | f | v |
0x07 | ì | Ψ | ' | 7 | G | W | g | w |
0x08 | ò | Σ | ( | 8 | H | X | h | x |
0x09 | Ç | Θ | ) | 9 | I | Y | i | y |
0x0A | LF | Ξ | * | : | J | Z | j | z |
0x0B | Ø | ESC | + | ; | K | Ä | k | ä |
0x0C | ø | Æ | , | < | L | Ö | l | ö |
0x0D | CR | æ | - | = | M | Ñ | m | ñ |
0x0E | Å | ß | . | > | N | Ü | n | ü |
0x0F | å | É | / | ? | O | § | o | à |
Extended Character Set
0x00 | 0x10 | 0x20 | 0x30 | 0x40 | 0x50 | 0x60 | 0x70 | |
---|---|---|---|---|---|---|---|---|
0x00 | ||||||||
0x01 | ||||||||
0x02 | ||||||||
0x03 | ||||||||
0x04 | ^ | |||||||
0x05 | € | |||||||
0x06 | ||||||||
0x07 | ||||||||
0x08 | { | |||||||
0x09 | } | |||||||
0x0A | FF | |||||||
0x0B | SS2 | |||||||
0x0C | [ | |||||||
0x0D | CR2 | ~ | ||||||
0x0E | ] | |||||||
0x0F | | |
With UCS-2 it is possible to transmit 1,112,064 characters. These characters represent nearly every spoken language. Each character counts as 1 character, but Unicode SMS can only consist of 70 characters, or consist of multiple concatenated SMS, each with 67 characters.
For technical reasons, with one sms only 160 characters of text (70 characters Unicode text) can be transferred. If you send an SMS with more characters, then you send a so-called concatenated SMS. Overlong text messages / Multi-SMS (concatenated SMS, Long SMS) are part messages and transmitted separately. Each part is a separate text message. The receiver converts the parts again into a coherent text. To determine that the message is a concatenated message and which part belongs to which part 7 characters (or 3 in Unicode) of the available characters are needed. This is the reason why one part of an overlong SMS can only consist 153 characters (or 67 for Unicode) of your text. The maximum is 1530 characters with one concatenated message (or 670 characters for Unicode).
You can get incoming SMS (mobile originated - SMS-MO) sent via push to a script on your web server. You can receive incoming SMS for your individual inbound number. You can order it in your web account under Settings and Inbound number. You can also receive free replies to Economy SMS sent to Germany.
You can specify an individual endpoint (HTTPS or mail) for each phone number. Alternatively, you can receive all incoming messages using our Event Notification Service.
Push service means that our gateway sends HTTP requests with data to a script on your host. On response with HTTP status code < 200
or >= 300
, service will do additional attempts but maximum three. The response of your script is not taken into account, so you need to monitor your script. In case of malfunctions we will not notify you. You can enter the URL for all push services in your LOX24 web account page (Settings -> API settings). Alternatively, you can also receive info about incoming SMS by e-mail.
Inbound SMS are sent as HTTP GET with the parameters sender_id
for the sender's phone number, text
for the message text and time
as time when message was sent in Unix timestamp format. For reply SMS to Economy SMS you also receive uuid
as assignment to the initial SMS. For an inbound phone number, phone
contains inbound (receiver) phone number and id
contains the ID of the incoming SMS.
Inbound SMS by mail contains a JSON object with the same parameters.
Parameter | Type | Description |
---|---|---|
id | integer | Inbound SMS identifier (not for Economy reply SMS) |
phone | string | Inbound phone number (not for Economy reply SMS) |
sender_id | string | Sender's phone number of the incoming SMS |
text | string | Message text |
time | integer | Time at which the SMS was received by LOX24 |
uuid | UUID | ID of the message that a reply has come (only for Economy reply SMS) |
This is a guide to set up and connect our SMS API to your Kannel client.
If you use Kannel to route messages to different SMS gateways you can easily add an additional SMSC module without changing your application architecture.
Support: berlin@lox24.eu
To send messages with Kannel you need to create an authentication key on the account page with the type 'Kannel API'. Please go to "Settings" -> "API-Settings" and click on "Create new key". You have to choose as type "Kannel API".
There are two types of SMSC configurations possible to send SMS with LOX24 via Kannel:
Note: What's about a DLR request you can read here:
LOX24 API will send delivery reports directly back to your endpoint without bypassing Kannel.
To use the Kannel API just create a new SMSC config:
group = smsc
smsc = http
system-type = kannel
smsc-id = "lox24"
allowed-smsc-id = "lox24"
port = 10443
send-url = "https://lox24.eu/api/kannel/{SERVICE_CODE}.php"
smsc-username = "{USER_ID}"
smsc-password = "{API_KEY}"
max-sms-octets = 1530
Where:
We will send delivery reports back to Kannel which will then send DLRs back to your endpoint.
To use the Kannel API just create a new SMSC config:
group = smsc
smsc = http
system-type = kannel
smsc-id = "lox24"
allowed-smsc-id = "lox24"
port = 10443
send-url = "https://lox24.eu/api/kannel/{SERVICE_CODE}.php"
smsc-username = "{USER_ID}"
smsc-password = "{API_KEY}"
dlr-url = "http://youhosthere.com:10443/?username={USER_ID}&password={API_KEY}"
connect-allow-ip = "127.0.0.1;213.133.127.70;116.203.64.153;85.10.245.*"
max-sms-octets = 1530
Where:
If you set-up API v2 Status URL/E-mail in the lox24 web-account you are
able to skip parameter dlr-url
and get messages notifications in same
way as if you sent SMS by our normal API v2 directly to a script on your
server or by mail docs
In the SMSC config samples are using port 10443, but it can be any port which you like. We are highly recommend blocking it by the firewall and allow TCP connections from LOX24 servers (116.203.64.153,213.133.127.70,85.10.245.*) and well-known hosts.
LOX24 Kannel API is a minimal Kannel implementation and does support only the following variables:
%d - Kannel report type (integer):
%q - The international phone number (E.164), who will receive the message.
%T - The time of the delivery report expressed as seconds since UNIX epoch.
Note: You can use any other variables, but we can't guarantee the correctness of the data.
(required)
Sender-ID of the message. Can be a number (up to 15 digits) or a text (up to 11 character). In case of a number please use preferentially E.164 phone number format. A sender of text may contain spaces but no other special characters. Please note that some countries do not support own sender IDs or do require pre-registration. Our system automatically tries to detect whether a sender ID is a text or a phone number. Avoid special characters in a number and enter it the same way as it would be dialed on a phone.
(required)
The message text can have a length of up to 1530 characters. With a Unicode SMS, the maximum character length is reduced to 670 characters. Internal encoding is UTF-8.
(optional)
You can send a SMS with parameter 'coding':
0 - GSM 03.38 (default), 1 - 8-bit or 2 - UCS-2 encoding.
In our case 8-bit and UCS-2 are the same (is_unicode = true) and will be handled as unicode SMS.
(optional)
Specify an URL and have us call it with delivery status reports. If parameter 'dlr-url' is missed then will be using API v2 DLR endpoint from user's settings (if them set).
(optional)
If given, the SMS center will postpone the message to be delivered at now plus this amount of minutes. If skipped then SMS will send ASAP.
That example of get request which user sends to his Kannel smsbox which is listen on port 9001.
Add to a DLR url custom parameter with internal message ID for proper DLR
request processing. In our example that's a customid
= 1234567.
Voice language will be detected automatically by the destination phone number
if property voice_lang
is set null
by the following rules:
If default language isn't set, then German will be used for destination phone numbers with prefix: '+49', '+41', '+43', '+79'.
If default language isn't set, then Spanish will be used for destination phone numbers with prefix: '+52', '+57', '+34', '+54', '+51', '+58', '+56', '+593', '+502', '+53', '+591', '+504', '+595', '+503', '+505', '+506', '+507', '+598', '+240'.
The API now supports a subset of SSML (Speech Synthesis Markup Language) for advanced voice message formatting.
<break>
- Insert pauses in speech<say-as>
- Control pronunciation of text<break>
Tagtime
(e.g., "1s", "500ms")<say-as>
Taginterpret-as="characters"
- Spell out text character by characterWrap your message content with the <speak>
root element:
<speak>
Your verification code is <say-as interpret-as="characters">A1B2C3</say-as>.
<break time="1s"/>
Please enter it now.
</speak>
You can send SMS messages by email in two different ways: sending a single SMS to a specific phone number, or sending an SMS to a group of phone numbers.
To send a single SMS, the email should be formatted as follows:
{{user_id}}.{{api_key}}.{{phone}}.{{service_code}}.{{sender_id}}.{{text_source}}.{{encoding}}.{{max_sms_parts}}@mail2sms.lox24.eu
To send an SMS to phone numbers from a specific group, use the following format:
{{user_id}}.{{api_key}}.{{group_id}}.{{service_code}}.{{sender_id}}.{{text_source}}.{{encoding}}.{{max_sms_parts}}@email2bulk.lox24.eu
Order | Label | Description |
---|---|---|
1 | user_id | User Id (integer), identical to the login to LOX24 |
2 | api_key | "Email2SMS" API key from the API Key settings page ("Settings" -> "API Settings") |
3 | phone/group_id | For single SMS, this is the phone number in E.164 format without leading "+" (e.g. "491701234567"). For group SMS, this is the Group Id you can find in your web-account or request by API |
4 | service_code | Service code 'text2speech' or 'direct' (default) |
5 | sender_id | Sender Id: an integer from 1 to 6 (default 1). Selection of the sender from the senders previously saved in the account ("Settings" -> "Sender-IDs") If sender id wasn't found, then the default value is 'email2sms'. |
6 | text_source | Text source: 0 - subject and body (by default), 1 - subject only, 2 - body only |
7 | encoding | An integer: 0 - normal GSM (default), 1 - unicode, 2 - auto-detecting (by the whole text from request) |
8 | max_sms_parts | An integer between 1 and 10. Default value is 1. There's a limit to the length of text when parsing the email. Extra characters are used for concatenation in messages longer than the standard limits. |
Send SMS to phones by a group id = 12345 (minimum parameters)
1234567.e3f3a759b6677959b6ebfcxxxxxxxxxx.12345@email2bulk.lox24.eu
Send SMS to phones by a group id = 12345 with service 'direct'
1234567.e3f3a759b6677959b6ebfcxxxxxxxxxx.12345.direct@email2bulk.lox24.eu
Send SMS to phones by a group id = 12345 with service 'direct' and with sender id = 2
1234567.e3f3a759b6677959b6ebfcxxxxxxxxxx.12345.direct.2@email2bulk.lox24.eu
Send SMS to phones by a group id = 12345 with service 'direct', with sender id = 2, and text from email's subject
1234567.e3f3a759b6677959b6ebfcxxxxxxxxxx.12345.direct.2.1@email2bulk.lox24.eu
Send SMS to phones by a group id = 12345 with service 'direct', with sender id = 2, with text from email's subject, and encoding auto-detection
1234567.e3f3a759b6677959b6ebfcxxxxxxxxxx.12345.direct.2.1.2@email2bulk.lox24.eu
Send SMS to a single phone number "+1234567890" (minimum parameters)
1234567.e3f3a759b6677959b6ebfcxxxxxxxxxx.1234567890@mail2sms.lox24.eu
Send SMS to a single phone number "+1234567890" with service 'direct'
1234567.e3f3a759b6677959b6ebfcxxxxxxxxxx.1234567890.direct@mail2sms.lox24.eu
Send SMS to a single phone number "+1234567890" with service 'direct' and sender id = 2
1234567.e3f3a759b6677959b6ebfcxxxxxxxxxx.1234567890.direct.2@mail2sms.lox24.eu
Send SMS to a single phone number "+1234567890" with service 'direct', with sender id = 2, and text from email's subject
1234567.e3f3a759b6677959b6ebfcxxxxxxxxxx.1234567890.direct.2.1@mail2sms.lox24.eu
Send SMS to a single phone number "+1234567890" with service 'direct', with sender id = 2, with text from email's subject, and encoding auto-detection
1234567.e3f3a759b6677959b6ebfcxxxxxxxxxx.1234567890.direct.2.1.2@mail2sms.lox24.eu
Most errors are ignored to reduce unwanted flooding, including authentication-related errors. But for some errors, the system sends a JSON response with an error description.
Error JSON
Property | Description |
---|---|
field | Error field in request |
description | Error description |
request | EMail address to which the request was sent |
{"field":"group_id","description":"Group with id = 12345 was not found!","request":"1234567.e3f3a759b6677959b6ebfcxxxxxxxxxx.12345.direct@email2bulk.lox24.eu"}
Please note that the mail gateway does not work with email forwarding. The email must be sent directly to the Mail2SMS gateway mailbox.
The event messaging system is a replacement for the outdated inbound sms and delivery report notification system (these old systems are considered obsolete, will not be improved, and are not recommended for use).
The event messaging system allows you to send information about events to URIs (http or email). You can customize the system to send notifications of one event to different URIs. You can also send different events to the same URI.
To configure the notifications, open the settings page (account.lox24.eu -> Settings -> Notifications), click "Create webhook" and enter in the URI field the http address or e-mail where you want to receive notifications. By default, all events will be sent to the specified URI. If you want to be notified only about certain events, check the box next to the events you want to be notified about.
If additional webhooks are required, repeat the instructions above. A maximum of five individual notification settings can be created.
The event information will be transmitted in the JSON object format, which has the same format for all events and differs only in the data of the event itself.
Field | Type | Description |
---|---|---|
id | string (36 chars) | Event ID |
api_version | string | Version of the data structure |
name | string | Event name, e.g. 'sms.delivery' |
created_at | integer | Unix timestamp when event was created |
attempt_total | integer | Total number of attempts (re-tries). |
attempt_number | integer | Current number of attempt |
data | object | Event's data (see list of events) |
notification_task_id | string (36 chars) | Notification task ID (request identifier) |
{
"id": "a3cd6e19-8af2-498d-ad07-c7840f1b4ac8",
"data": {
"id": "d6c12ac4-cc7d-11ec-b6da-525400bbb7dc",
"key_id": 8207,
"dlr_code": 1,
"status_code": 100,
"callback_data": "some data from user's request here"
},
"name": "sms.delivery",
"created_at": 1653378603,
"api_version": "2022-05-25",
"attempt_number": 1,
"attempts_total": 4,
"notification_task_id": "3378de83-de66-4de8-9d29-2b10d41bb641"
}
The notification system can send event information in two ways (transports): HTTPS and E-mail.
The json is sent as the body of the http request with the header Content-Type: application/json
.
The service will continue to attempt to send the request (at increasing time intervals) until it receives a response
with a status code >= 200 and < 300 or the number of attempts reaches the value specified in the attempt_number
field.
NOTE: The response of your endpoint script is not taken into account therefore you have to monitor your script. In the case of malfunctions there is no notification by us.
The json is sent as the email's body with a single attempt from an email no-reply@lox24.eu
.
Alerts are sent from the following hosts 162.55.80.140
and 162.55.80.141
. If you use a firewall,
don't forget to whitelist those IP addresses.
Release Notes tell you what’s new in API. As always, we welcome your feedback.
X-LOX24-REQUEST-ID
header for support and tracking purposessms.email.parsing.success
and sms.email.parsing.fail
is_text_deleted
of endpoint Simulate sending an SMS (for testing) and Create the Bulkmax_sms_parts
of endpointbulk.email.parsing.success
and bulk.email.parsing.fail
is_text_deleted
to the endpoint GET /me
.callback_data
of endpoint Retrieves the collection of SMSmax_sms_parts
of endpointbulk.email.parsing.success
and bulk.email.parsing.fail
subscribed_at
, unsubscribed_at
and unsubscribed_reason
(see Phone API)received_at
field.X-LOX24-AUTH-TOKEN
, header X-LOX24-AUTH-CLIENT-ID
is deprecated and not recommended for use.voice_lang
property to SMS and Bulk request/response objects.GET /bulks
by the property is_dryrun
.balance_changed_at
to the endpoint GET /me
.GET /incomings
and GET /incomings/{id}
to retrieve info about incoming and related SMS.POST /sms/dryrun
request.key_id
on GET /bulks
and GET /sms
./sms
, /bulks
and /incomings
endpoints.GET /sms
by the property bulk
GET /bulks
by the property source
sms
and bulks
responsesprice
to SMS response objectAPI v2.0 has been developed in accordance with industry standards to make integration as easy as possible. In addition, you can now transmit large quantities of SMS with one query and retrieve detailed information about the messages at any time.
The extensive group functionality allows you to manage your mailing lists in our high-performance cloud and thus save your own resources. All this is still compliant with European data protection standards and the German Telecommunications Act.
You can find the new API description at https://doc.lox24.eu/