06 Line
API

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

POST
/v1/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.

Authorization

apiKey
headerAuthorizationBearer <token>

Your API key, 06l_…. For servers only.

Request Body

application/json
  1. body
line_id*LineId
Match^line_[0-9a-z]{26}$
to*PhoneNumber

E.164, e.g. +33612345678.

Match^\+[1-9][0-9]{6,14}$
text*string

Up to 1530 GSM-7 characters or 670 UCS-2 characters (10 segments).

Length1 <= length
client_ref?ClientRef

Your own identifier, 255 bytes at most. Sending the same client_ref twice returns the first result instead of acting twice.

Lengthlength <= 255

Response Body

Already sent with this client_ref; the first message is returned.

application/json
  1. response
id*SmsId
Match^sms_[0-9a-z]{26}$
line_id*LineId
Match^line_[0-9a-z]{26}$
direction*string
Value in"outbound""inbound"
from*Party

Your line when outbound; when inbound, the sender: a number, or a name.

Match^(\+[1-9][0-9]{6,14}|[A-Za-z0-9 .&'_-]{1,11})$
to*PhoneNumber

E.164, e.g. +33612345678.

Match^\+[1-9][0-9]{6,14}$
text*string
encoding*string
Value in"gsm7""ucs2"
segments*integer
Range1 <= value <= 10
status*string

Outbound: queued → sent → delivered, or failed. Some networks never confirm delivery: the message then stays sent. Inbound: always received.

Value in"queued""sent""delivered""failed""received"
error?

Why a message ended failed.

client_ref?ClientRef

Your own identifier, 255 bytes at most. Sending the same client_ref twice returns the first result instead of acting twice.

Lengthlength <= 255
incomplete*boolean

Inbound 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*Timestamp

RFC 3339, UTC.

Formatdate-time
sent_at?Timestamp

RFC 3339, UTC.

Formatdate-time
delivered_at?Timestamp

RFC 3339, UTC.

Formatdate-time
received_at?Timestamp

RFC 3339, UTC.

Formatdate-time
Example Request
curl -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"}'
Example Response
{  "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"}