Send an SMS
Queues an SMS on one of your lines and returns it with `status: queued`. Long texts are split into segments (153 GSM-7 or 67 UCS-2 characters each), up to 10. Delivery is reported by the `sms.status` webhook. Sending the same `client_ref` again returns the first message (`200`) instead of sending a second one; a message saved but never started (the first request failed with `internal`) is sent then. The network tries to deliver a message for 24 hours. For your servers: an ephemeral key gets `403`.
Queues an SMS on one of your lines and returns it with status: queued. Long texts are split into segments
(153 GSM-7 or 67 UCS-2 characters each), up to 10. Delivery is reported by the sms.status webhook.
Sending the same client_ref again returns the first message (200) instead of sending a second one; a message
saved but never started (the first request failed with internal) is sent then. The network tries to deliver a
message for 24 hours. For your servers: an ephemeral key gets 403.
apiKeyAuthorizationBearer <token>Your API key, 06l_…. For servers only.
application/json- body
line_id*LineId^line_[0-9a-z]{26}$to*PhoneNumberE.164, e.g. +33612345678.
^\+[1-9][0-9]{6,14}$text*stringUp to 1530 GSM-7 characters or 670 UCS-2 characters (10 segments).
1 <= lengthclient_ref?ClientRefYour own identifier, 255 bytes at most. Sending the same client_ref twice returns the first result instead of acting twice.
length <= 255Already sent with this client_ref; the first message is returned.
application/json- response
id*SmsId^sms_[0-9a-z]{26}$line_id*LineId^line_[0-9a-z]{26}$direction*string"outbound""inbound"from*PartyYour line when outbound; when inbound, the sender: a number, or a name.
^(\+[1-9][0-9]{6,14}|[A-Za-z0-9 .&'_-]{1,11})$to*PhoneNumberE.164, e.g. +33612345678.
^\+[1-9][0-9]{6,14}$text*stringencoding*string"gsm7""ucs2"segments*integer1 <= value <= 10status*stringOutbound: queued → sent → delivered, or failed. Some networks never confirm delivery: the
message then stays sent. Inbound: always received.
"queued""sent""delivered""failed""received"error?Why a message ended failed.
client_ref?ClientRefYour own identifier, 255 bytes at most. Sending the same client_ref twice returns the first result instead of acting twice.
length <= 255incomplete*booleanInbound only. Some segments never arrived within 10 minutes; missing parts are marked […].
created_by*Who did it. user from the 06 Line dashboard, api_key from your code, agent for what the network sent you, system for 06 Line itself.
created_at*TimestampRFC 3339, UTC.
date-timesent_at?TimestampRFC 3339, UTC.
date-timedelivered_at?TimestampRFC 3339, UTC.
date-timereceived_at?TimestampRFC 3339, UTC.
date-timecurl -X POST 'https://api.06line.com/v1/sms' \ -H 'Content-Type: application/json' \ -d '{ "line_id": "line_01jbq5a3x9e2k7m4t6v8r0c1yb", "to": "+33698765432", "text": "Your appointment is confirmed for tomorrow at 10:00.", "client_ref": "order-4821-confirmation"}'{ "id": "sms_01jbq6c2v8d4n1k5r7t9x3e6za", "line_id": "line_01jbq5a3x9e2k7m4t6v8r0c1yb", "direction": "outbound", "from": "+33612345678", "to": "+33698765432", "text": "Your appointment is confirmed for tomorrow at 10:00.", "encoding": "gsm7", "segments": 1, "status": "queued", "client_ref": "order-4821-confirmation", "incomplete": false, "created_by": { "type": "api_key", "id": "key_01jbq4fz0c8w2n5r7t9y1b3d6f" }, "created_at": "2026-10-21T14:03:11Z"}