API

Errors & limits

Stable codes, 120 requests a minute, Retry-After on 429.

Errors come back as { error, code }. The HTTP status tells you whether to retry; the code tells you why.

error body
{
  "error": "This key is read-only. Turn write on in Settings → API.",
  "code": "read_only"
}

Status codes

StatusCodeWhat it means
401unauthorizedMissing or invalid token. Send Authorization: Bearer tb_cus_… from Settings → API.
403no_subscriptionThis shop is not on a plan that can use the API. Start Toolbench Core, then retry.
403read_onlyThis key cannot write. Turn write on in Settings → API. ChatGPT stays in preview until you confirm there.
404not_foundThe record is missing or belongs to another shop. Use an id from GET /contacts, GET /reviews, or GET /actions.
422invalidThe body or query did not match the contract. Check the reference for that path. Issues, if present, name the field.
422no_numberThis shop has no Toolbench number yet. Finish texting setup in the dashboard, then send again.
422texting_inactiveTexting is not active on this shop. Carrier registration has to finish before a text can leave.
429rate_limitedToo many requests in a minute. Wait for Retry-After (seconds) and retry. Cap is 120 per minute per token.

Rate limits

ScopeLimitNote
All /api/v1 calls120 / minuteCounted per token. 429 includes Retry-After.
List pageslimit 1–100Default 25. No cursor. Request the next page by changing filters, not by paging tokens.

A 429 includes Retry-After in seconds. Retry 429 and 5xx. Never retry 400, 401, 403, or 422.