SMS API
Queue an SMS with one POST; the paired phone sends it through its SIM.
Scopes: messages:send, messages:read, devices:read. Use an Idempotency-Key header so a retried request never sends twice. Test keys (cv_test_) walk the whole flow without touching a SIM.
SMS
Queue an SMS through your own Android phone, check its status, list devices.
Send your key as a bearer token and POST the message; the paired phone sends it through its SIM. Responses are 202 with the message id — poll GET /messages/{id} or use webhooks for the status.
Send an Idempotency-Key header on every send: a retry with the same key returns the original response instead of sending a second SMS. “Sent” means the SIM handed the message to the carrier; “delivered” needs a carrier report, which not every carrier returns.
Base URL: https://chatvendor.net/api/v1 · every response is {"success": true, "data": …}
POST
/messages
Queue an SMS
messages:send
Scope: messages:send
Parameters
Idempotency-Keyheader · stringRetrying with the same key returns the original response instead of sending twice
Body (application/json)
tostringrequiredInternational format; local numbers need default_region
messagestringrequireddevice_idstringSend from this phone only — fails rather than silently using another
sim_idstringA specific SIM of that device
prioritystring: low | normal | highhigh jumps the queue; rate limits still apply
client_referencestringYour own id, returned and filterable
schedule_atstring (date-time)Send at this time (ISO 8601)
expires_inintegerSeconds (30–86400): expires instead of arriving late
callback_urlstring (uri)Per-message webhook (unsigned)
consent_categorystring: transactional | otp | notification | marketingdefault_regionstringTwo-letter country for local-format numbers
Response 202 · SmsMessage
id stringto stringmessage stringstatus string: queued | scheduled | assigned | sent | delivered | failed | cancelled | expireddevice_id stringcreated_at string (date-time)
curl -X POST https://chatvendor.net/api/v1/messages \
-H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
-H "Content-Type: application/json" \
-d '{"to":"+998901234567","message":"Your code is 483921"}'
GET
/messages
List SMS messages
messages:read
Scope: messages:read
Parameters
statusquery · stringtoquery · stringdevice_idquery · stringclient_referencequery · stringper_pagequery · integerResponse 200 · SmsMessage[]
id stringto stringmessage stringstatus string: queued | scheduled | assigned | sent | delivered | failed | cancelled | expireddevice_id stringcreated_at string (date-time)
curl https://chatvendor.net/api/v1/messages \
-H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
GET
/messages/{message}
SMS status and timeline
messages:read
Scope: messages:read
Parameters
messagepath · stringrequiredMessage public id
Response 200 · SmsMessage
id stringto stringmessage stringstatus string: queued | scheduled | assigned | sent | delivered | failed | cancelled | expireddevice_id stringcreated_at string (date-time)
curl https://chatvendor.net/api/v1/messages/123 \
-H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
POST
/messages/{message}/cancel
Cancel a queued SMS
messages:send
Scope: messages:send
Parameters
messagepath · stringrequiredMessage public id
Response 200 · SmsMessage
id stringto stringmessage stringstatus string: queued | scheduled | assigned | sent | delivered | failed | cancelled | expireddevice_id stringcreated_at string (date-time)
curl -X POST https://chatvendor.net/api/v1/messages/123/cancel \
-H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
GET
/devices
List paired phones
devices:read
Scope: devices:read
Response 200 · Device[]
id stringname stringstatus stringlast_seen_at string (date-time)
curl https://chatvendor.net/api/v1/devices \
-H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
GET
/devices/{device}
One device
devices:read
Scope: devices:read
Parameters
devicepath · stringrequiredDevice public id
Response 200 · Device
id stringname stringstatus stringlast_seen_at string (date-time)
curl https://chatvendor.net/api/v1/devices/{device} \
-H "Authorization: Bearer cv_live_xxxxxxxxxxxx"