Business SMS API: send, schedule and track your messages
Send a text with one request, know the segment count up front and receive every status change. Custom quote pricing.
Custom quote
The SMS API sends text messages to your contacts from your application. You provide the sender, the recipient, the text and the message nature: transactional or marketing.
One SMS is not always one message for the network. A long text, or one with certain characters such as emoji, is split into segments, and each segment counts. The API returns the encoding chosen (GSM-7 or UCS-2) and the number of segments.
Statuses come back as processing goes on: queued, sent, delivered, undelivered or unknown. "Delivered" means the carrier handed the message to the handset, not that the person read it.
How it flows
Practical uses
Codes and alerts
Send confirmation codes, delivery notifications or service alerts.
Appointment reminders
Schedule a message the day before, at the recipient's local time.
Framed marketing messages
Keep marketing and transactional messages apart so the right rules apply.
Customer replies
Receive replies on a compatible number and handle them in your application.
Features
- Single or scheduled sending, with a time zone
- Segment and encoding estimate before sending
- Message nature: transactional or marketing
- Sender check and test to a verified destination
- Statuses queued, sent, delivered, undelivered and unknown
- Inbound SMS on a compatible number
Limits to know
- A long SMS is billed as several segments. Text with emoji or uncommon accented characters switches to UCS-2, which shrinks each segment.
- "Delivered" does not mean "read". Delivery is never guaranteed: it depends on the recipient's carrier.
- Receiving SMS requires a compatible number and country. A number that can place calls cannot always receive SMS.
- Custom sender IDs, their format and their registration vary by country and carrier.
- The unknown status means the carrier gave no final answer. It is neither a success nor a failure.
curl -X POST "https://api.example.test/v1/messages" \
-H "Authorization: Bearer tq_test_EXEMPLE" \
-H "Idempotency-Key: 7b1d2c4e-0000-4000-8000-000000000003" \
-H "Content-Type: application/json" \
-d '{
"from": "+33199001234",
"to": "+33199001235",
"text": "Your appointment is confirmed for tomorrow at 10:00.",
"nature": "transactional",
"scheduled_at": "2026-11-20T09:00:00",
"timezone": "Europe/Paris"
}'
# => { "id": "msg_example", "status": "queued", "segments": 1,
# "encoding": "GSM-7", "simulated": true }Technical details
| Send | POST /messages, Idempotency-Key required |
|---|---|
| Nature | transactional or marketing |
| Encoding | GSM-7 or UCS-2, returned with the segment count |
| Scheduling | scheduled_at and timezone |
| Events | message.sent, message.delivered, message.undelivered |
Frequently asked questions
Why does my message count as several segments?
Either the text is longer than one segment, or it contains characters that force UCS-2, a stricter encoding. The API returns the segment count when you create the message.
What does the unknown status mean?
The carrier has not reported a final status. The message may or may not have arrived. Treat it as neither a success nor a definitive failure.
Can I receive replies from my contacts?
Yes, where the number and country allow it. Inbound SMS is not available everywhere. You can check it when you search for the number.
Related use cases
Documentation
Related services
Plan your SMS sending
Tell us the countries, the message types and the volumes. We will prepare a quote that details conditions per destination.