Skip to content
ChatVendor ChatVendor

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

Scope: messages:send

Parameters

Idempotency-Keyheader · string

Retrying with the same key returns the original response instead of sending twice

Body (application/json)

tostringrequired

International format; local numbers need default_region

messagestringrequired
device_idstring

Send from this phone only — fails rather than silently using another

sim_idstring

A specific SIM of that device

prioritystring: low | normal | high

high jumps the queue; rate limits still apply

client_referencestring

Your own id, returned and filterable

schedule_atstring (date-time)

Send at this time (ISO 8601)

expires_ininteger

Seconds (30–86400): expires instead of arriving late

callback_urlstring (uri)

Per-message webhook (unsigned)

consent_categorystring: transactional | otp | notification | marketing
default_regionstring

Two-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

Scope: messages:read

Parameters

statusquery · string
toquery · string
device_idquery · string
client_referencequery · string
per_pagequery · integer

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 \
  -H "Authorization: Bearer cv_live_xxxxxxxxxxxx"
GET /messages/{message} SMS status and timeline

Scope: messages:read

Parameters

messagepath · stringrequired

Message 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

Scope: messages:send

Parameters

messagepath · stringrequired

Message 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

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

Scope: devices:read

Parameters

devicepath · stringrequired

Device 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"