Skip to content
CaptiFi Connect

Developer docs

API reference

Every endpoint in version 1 of the API, built from the OpenAPI 3.1 document. New to it? Start with the quickstart.

The basics

Base URL https://captificonnect.co.uk/api/v1. Send Authorization: Bearer <api key> on every request, and JSON bodies with Content-Type: application/json, up to 1 MB. Each key can make 20 requests a second, with bursts up to 40.

Successful responses are { "data": ..., "meta": ... }. Lists are newest first, 25 to a page by default (up to 100 with limit); pass meta.next_cursor back as cursor for the next page. Errors are described in errors, and events in webhooks.

List messages

get/api/v1/messages

Parameters

NameTypeAbout
limitqueryinteger

Items per page, 1 to 100 (default 25).

cursorquerystring

The meta.next_cursor of the previous page.

directionqueryone of outbound, inbound
statusqueryMessageStatus
qquerystring

A number (any format) or text to find in the body.

campaign_idquerystring
batch_idquerystring
client_refquerystring
sincequerydate-time
untilquerydate-time

Responses

  • 200A page of messages.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Send texts

post/api/v1/messages

Sends one text to every recipient given in to, contact_ids and list_id together. Numbers are checked and de-duplicated; refused numbers are listed in rejected and not charged. Merge fields such as {first_name} are filled from contacts. Credits are taken when the request is accepted (one per SMS part) and refunded for any text that fails before leaving.

Parameters

NameTypeAbout
Idempotency-Keyheaderstring

Up to 200 characters. Makes a retried request safe.

Request body (JSON)

NameTypeAbout
tostring or array of string

UK numbers in any common format. A string may hold several, separated by commas or new lines.

contact_idsarray of string
list_idstring
bodystring

Up to 10 SMS parts. Merge fields: {first_name}, {last_name}, {full_name}, {phone}, {email}.

template_idstring

Used when body is empty.

senderstring or null

An approved sender name. Leave out to send from a number people can reply to.

schedule_atdate-time or null

Up to a year ahead.

client_refstring or null

Your own reference, echoed back in webhooks.

append_opt_outboolean

Adds the account opt-out line (for marketing texts).

Example request body
{
  "to": [
    "07412 000001",
    "+447412000002"
  ],
  "body": "Hi {first_name}, your order is ready.",
  "client_ref": "order-881"
}

Responses

  • 200An idempotent replay of an earlier request.
  • 201Accepted. Texts are queued (or scheduled).
  • 401Missing, wrong or revoked key.
  • 402Not enough credit. details.needed and details.balance say by how much.
  • 403The account is pending approval (account_pending) or suspended (account_suspended).
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Price a send without sending

post/api/v1/messages/quote

Takes the same body as POST /messages and returns what it would charge.

Request body (JSON)

NameTypeAbout
tostring or array of string

UK numbers in any common format. A string may hold several, separated by commas or new lines.

contact_idsarray of string
list_idstring
bodystring

Up to 10 SMS parts. Merge fields: {first_name}, {last_name}, {full_name}, {phone}, {email}.

template_idstring

Used when body is empty.

senderstring or null

An approved sender name. Leave out to send from a number people can reply to.

schedule_atdate-time or null

Up to a year ahead.

client_refstring or null

Your own reference, echoed back in webhooks.

append_opt_outboolean

Adds the account opt-out line (for marketing texts).

Responses

  • 200The quote.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Get a message with its status timeline

get/api/v1/messages/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The message id.

Responses

  • 200The message.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.
Example 200 response
{
  "data": {
    "id": "msg_01J9Z8X7W6V5T4S3R2Q1P0N9M8",
    "direction": "outbound",
    "status": "delivered",
    "to": "+447412000001",
    "from": "+447700900321",
    "contact_number": "+447412000001",
    "body": "Your table for 4 at 7pm is confirmed.",
    "encoding": "gsm7",
    "segments": 1,
    "credits": 1,
    "route": "sim",
    "sender": null,
    "client_ref": "booking-1042",
    "batch_id": "bat_01J9Z8X7W6V5T4S3R2Q1P0N9M7",
    "campaign_id": null,
    "contact_id": null,
    "error_code": null,
    "error_message": null,
    "test": false,
    "scheduled_at": null,
    "sent_at": "2026-10-16T09:00:02.000Z",
    "delivered_at": "2026-10-16T09:00:06.000Z",
    "failed_at": null,
    "cancelled_at": null,
    "received_at": null,
    "read_at": null,
    "created_at": "2026-10-16T09:00:00.000Z",
    "events": [
      {
        "status": "queued",
        "detail": null,
        "at": "2026-10-16T09:00:00.000Z"
      }
    ]
  },
  "meta": null
}

Cancel a scheduled text

post/api/v1/messages/{id}/cancel

Works while the text is scheduled or still queued. Its credits are refunded.

Parameters

NameTypeAbout
idpathrequiredstring

The message id.

Responses

  • 200Cancelled.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 409Already on its way.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Export messages as CSV

get/api/v1/messages/export

Accepts the list filters. Up to 50,000 rows.

Responses

  • 200CSV file.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Conversations

Two-way threads, one per number that replied.

List conversations

get/api/v1/conversations

One entry per number that has texted you, newest activity first.

Parameters

NameTypeAbout
limitqueryinteger

Items per page, 1 to 100 (default 25).

cursorquerystring

The meta.next_cursor of the previous page.

unreadqueryone of true, false
qquerystring

Responses

  • 200Conversations.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Get one conversation

get/api/v1/conversations/{phone}

Parameters

NameTypeAbout
phonepathrequiredstring

The number in E.164, URL-encoded (%2B447412000001).

Responses

  • 200The last 200 texts, oldest first.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Mark a conversation read

post/api/v1/conversations/{phone}/read

Parameters

NameTypeAbout
phonepathrequiredstring

Responses

  • 200How many texts were marked read.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

List custom field names

get/api/v1/contacts/fields

The distinct custom field names in use across your contacts, so a text can merge them as {field_name}.

Responses

  • 200Field names, sorted.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.
Example 200 response
{
  "data": [
    "booking_ref",
    "branch"
  ],
  "meta": null
}

List contacts

get/api/v1/contacts

Parameters

NameTypeAbout
limitqueryinteger

Items per page, 1 to 100 (default 25).

cursorquerystring

The meta.next_cursor of the previous page.

qquerystring
list_idquerystring

Responses

  • 200A page of contacts.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Create a contact

post/api/v1/contacts

Request body (JSON)

NameTypeAbout
phonerequiredstring
first_namestring or null
last_namestring or null
emailstring or null
notesstring or null
customobject
Example request body
{
  "phone": "07412 000001",
  "first_name": "Priya",
  "last_name": "Shah"
}

Responses

  • 201Created.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 409That number is already a contact.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Get a contact

get/api/v1/contacts/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The contact id.

Responses

  • 200The contact and its list ids.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Update a contact

patch/api/v1/contacts/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The contact id.

Request body (JSON)

NameTypeAbout
phonerequiredstring
first_namestring or null
last_namestring or null
emailstring or null
notesstring or null
customobject

Responses

  • 200Updated.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Delete a contact

delete/api/v1/contacts/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The contact id.

Responses

  • 204Deleted.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Import contacts

post/api/v1/contacts/import

Upserts up to 20,000 rows by number. Blank fields leave stored values alone.

Request body (JSON)

NameTypeAbout
rowsrequiredarray of ContactInput
list_idstring or null

Responses

  • 200What happened to each row.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

List lists

get/api/v1/lists

Parameters

NameTypeAbout
limitqueryinteger

Items per page, 1 to 100 (default 25).

cursorquerystring

The meta.next_cursor of the previous page.

Responses

  • 200Lists.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Create a list

post/api/v1/lists

Request body (JSON)

NameTypeAbout
namerequiredstring
descriptionstring or null

Responses

  • 201Created.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Get a list

get/api/v1/lists/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The list id.

Responses

  • 200The list.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Rename a list

patch/api/v1/lists/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The list id.

Request body (JSON)

NameTypeAbout
namerequiredstring
descriptionstring or null

Responses

  • 200Updated.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Delete a list (contacts stay)

delete/api/v1/lists/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The list id.

Responses

  • 204Deleted.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

List members

get/api/v1/lists/{id}/contacts

Parameters

NameTypeAbout
idpathrequiredstring

The list id.

limitqueryinteger

Items per page, 1 to 100 (default 25).

cursorquerystring

The meta.next_cursor of the previous page.

Responses

  • 200Members.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Add members

post/api/v1/lists/{id}/contacts

By contact id or by number (new numbers become contacts).

Parameters

NameTypeAbout
idpathrequiredstring

The list id.

Request body (JSON)

NameTypeAbout
contact_idsarray of string
phonesarray of string

Responses

  • 200How many were added.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Remove a member

delete/api/v1/lists/{id}/contacts/{contactId}

Parameters

NameTypeAbout
idpathrequiredstring

The list id.

contactIdpathrequiredstring

Responses

  • 204Removed.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

List campaigns

get/api/v1/campaigns

Parameters

NameTypeAbout
limitqueryinteger

Items per page, 1 to 100 (default 25).

cursorquerystring

The meta.next_cursor of the previous page.

Responses

  • 200Campaigns with message counts.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Create a draft campaign

post/api/v1/campaigns

Request body (JSON)

NameTypeAbout
namerequiredstring
bodyrequiredstring
list_idrequiredstring
senderstring or null
append_opt_outboolean

Responses

  • 201The draft.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Get a campaign

get/api/v1/campaigns/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The campaign id.

Responses

  • 200The campaign.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Edit a draft

patch/api/v1/campaigns/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The campaign id.

Request body (JSON)

NameTypeAbout
namerequiredstring
bodyrequiredstring
list_idrequiredstring
senderstring or null
append_opt_outboolean

Responses

  • 200Updated.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Delete a draft

delete/api/v1/campaigns/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The campaign id.

Responses

  • 204Deleted.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Send or schedule a draft

post/api/v1/campaigns/{id}/send

Parameters

NameTypeAbout
idpathrequiredstring

The campaign id.

Request body (JSON)

NameTypeAbout
schedule_atdate-time or null

Responses

  • 200Launched.
  • 401Missing, wrong or revoked key.
  • 402Not enough credit. details.needed and details.balance say by how much.
  • 404No such resource in this account.
  • 409Already launched.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Cancel a scheduled or sending campaign

post/api/v1/campaigns/{id}/cancel

Texts not yet taken by a route are cancelled and refunded.

Parameters

NameTypeAbout
idpathrequiredstring

The campaign id.

Responses

  • 200Cancelled.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

List templates

get/api/v1/templates

Parameters

NameTypeAbout
limitqueryinteger

Items per page, 1 to 100 (default 25).

cursorquerystring

The meta.next_cursor of the previous page.

qquerystring

Responses

  • 200Templates.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Create a template

post/api/v1/templates

Request body (JSON)

NameTypeAbout
namerequiredstring
bodyrequiredstring

Responses

  • 201Created.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Get a template

get/api/v1/templates/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The template id.

Responses

  • 200The template.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Update a template

patch/api/v1/templates/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The template id.

Request body (JSON)

NameTypeAbout
namerequiredstring
bodyrequiredstring

Responses

  • 200Updated.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Delete a template

delete/api/v1/templates/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The template id.

Responses

  • 204Deleted.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Opt-outs

Numbers that must not be texted.

List opt-outs

get/api/v1/opt-outs

Parameters

NameTypeAbout
limitqueryinteger
offsetqueryinteger
qquerystring

Responses

  • 200Opt-outs.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Add an opt-out

post/api/v1/opt-outs

Request body (JSON)

NameTypeAbout
phonerequiredstring
notestring or null

Responses

  • 200Already opted out.
  • 201Added.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Remove an opt-out

delete/api/v1/opt-outs/{phone}

Only when the person has asked to hear from you again.

Parameters

NameTypeAbout
phonepathrequiredstring

Responses

  • 204Removed.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Sender names

Alphanumeric senders (approval needed).

List sender names

get/api/v1/sender-ids

Responses

  • 200Sender names and their review state.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Ask for a sender name

post/api/v1/sender-ids

Request body (JSON)

NameTypeAbout
valuerequiredstring
purposestring

Responses

  • 201Waiting for review.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

List webhooks

get/api/v1/webhooks

Responses

  • 200Webhooks.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Create a webhook

post/api/v1/webhooks

The response includes secret, shown only this once.

Request body (JSON)

NameTypeAbout
urlstring
eventsarray of one of message.sent, message.delivered, message.failed, message.received, opt_out.created
descriptionstring or null
enabledboolean
rotate_secretboolean
Example request body
{
  "url": "https://example.com/connect/events",
  "events": [
    "message.delivered",
    "message.received"
  ]
}

Responses

  • 201Created.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Update a webhook

patch/api/v1/webhooks/{id}

rotate_secret: true issues a new secret, returned once.

Parameters

NameTypeAbout
idpathrequiredstring

The webhook id.

Request body (JSON)

NameTypeAbout
urlstring
eventsarray of one of message.sent, message.delivered, message.failed, message.received, opt_out.created
descriptionstring or null
enabledboolean
rotate_secretboolean

Responses

  • 200Updated.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Delete a webhook

delete/api/v1/webhooks/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The webhook id.

Responses

  • 204Deleted.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Send a test event now

post/api/v1/webhooks/{id}/test

Parameters

NameTypeAbout
idpathrequiredstring

The webhook id.

Responses

  • 200What your endpoint answered.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Recent deliveries

get/api/v1/webhooks/{id}/deliveries

Parameters

NameTypeAbout
idpathrequiredstring

The webhook id.

limitqueryinteger

Items per page, 1 to 100 (default 25).

cursorquerystring

The meta.next_cursor of the previous page.

Responses

  • 200Deliveries.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

List dedicated numbers

get/api/v1/numbers

The UK mobile numbers dedicated to the account. Texts on the SIM route go from one of them and every reply to it belongs to the account. Each is rented monthly in credits (rental_credits, taken every 30 days from rental_charged_at). Ask for one, or release one, from the Numbers page in the dashboard.

Responses

  • 200Dedicated numbers.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.
Example 200 response
{
  "data": [
    {
      "id": "gw_01J9Z8X7W6V5T4S3R2Q1P0N9M8",
      "phone_number": "+447700900321",
      "online": true,
      "rental_credits": 250,
      "monthly_credits": 250,
      "rental_charged_at": "2026-10-16T09:00:00.000Z",
      "assigned_at": "2026-10-16T09:00:00.000Z"
    }
  ],
  "meta": null
}

Credit balance

get/api/v1/balance

Responses

  • 200Balance.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.
Example 200 response
{
  "data": {
    "credits": 1240,
    "account_status": "active"
  },
  "meta": null
}

Totals for a period

get/api/v1/stats/summary

Parameters

NameTypeAbout
daysqueryinteger
fromquerydate-time
toquerydate-time

Responses

  • 200Sent, delivered, received and credits, with the change on the period before.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Daily counts for a period

get/api/v1/stats/timeseries

Parameters

NameTypeAbout
daysqueryinteger

Responses

  • 200One row per day.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Keywords

Words people text in for an automatic reply and a list.

List keywords

get/api/v1/keywords

Parameters

NameTypeAbout
limitqueryinteger

Items per page, 1 to 100 (default 25).

cursorquerystring

The meta.next_cursor of the previous page.

Responses

  • 200Keywords.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Create a keyword

post/api/v1/keywords

A keyword is matched against the first word of an inbound text, ignoring case and punctuation. When it matches, the sender becomes a contact, is added to add_to_list_id when set, and gets reply as a text from your number (one credit per part, nothing to an opted-out number). STOP, STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT, OPTOUT, START and UNSTOP are reserved and refused with reserved_keyword. On a shared number a keyword works for people you texted in the last 30 days; on a dedicated number it works for anyone.

Request body (JSON)

NameTypeAbout
keywordrequiredstring

Letters and digits; stored upper-case. Not an opt-out or opt-in word.

replystring or null

Sent back from your number when the keyword matches. Leave empty for no reply.

add_to_list_idstring or null

A list of yours the sender is added to.

enabledboolean
Example request body
{
  "keyword": "JOIN",
  "reply": "Thanks, you are on the list.",
  "add_to_list_id": "lst_01J9Z8X7W6V5T4S3R2Q1P0N9M2"
}

Responses

  • 201Created.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 409That keyword already exists on the account (keyword_exists).
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.
Example 201 response
{
  "data": {
    "id": "kw_01J9Z8X7W6V5T4S3R2Q1P0N9M1",
    "keyword": "JOIN",
    "reply": "Thanks, you are on the list. Reply STOP at any time to leave.",
    "add_to_list_id": "lst_01J9Z8X7W6V5T4S3R2Q1P0N9M2",
    "enabled": true,
    "match_count": 12,
    "last_matched_at": "2026-10-16T09:12:00.000Z",
    "created_at": "2026-10-01T10:00:00.000Z",
    "updated_at": "2026-10-01T10:00:00.000Z"
  },
  "meta": null
}

Get a keyword

get/api/v1/keywords/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The keyword id.

Responses

  • 200The keyword.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Edit a keyword

patch/api/v1/keywords/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The keyword id.

Request body (JSON)

NameTypeAbout
keywordrequiredstring

Letters and digits; stored upper-case. Not an opt-out or opt-in word.

replystring or null

Sent back from your number when the keyword matches. Leave empty for no reply.

add_to_list_idstring or null

A list of yours the sender is added to.

enabledboolean

Responses

  • 200Updated.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 409That keyword already exists on the account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.

Delete a keyword

delete/api/v1/keywords/{id}

Parameters

NameTypeAbout
idpathrequiredstring

The keyword id.

Responses

  • 204Deleted.
  • 401Missing, wrong or revoked key.
  • 404No such resource in this account.
  • 422The request is not valid; details lists the fields.
  • 429Over 20 requests a second (burst 40). Retry after the Retry-After header.