Skip to content

Errors

Every error is the same JSON, with a status, a stable code and a message for people.

Response 404
{
  "error": {
    "code": "not_found",
    "message": "No account with that id in this workspace."
  }
}

Branch on code. message is for logs and may change.

Codes

StatusCodeMeaning
400invalid_parameterA query parameter is out of range or not one of its values. The message names it.
400invalid_bodyThe body isn't a JSON object of at most 256 KB.
400invalid_urlA webhook url isn't a public https address on the default port.
400refusedTaseli couldn't do what was asked (for example, no competitor by that name). The message says why.
401unauthorizedNo key, or the key is expired, revoked or cut off.
403scopeThe key is read-only and the route writes.
403roleOnly an owner or admin manages webhooks.
403app_tokenWebhooks take a personal key, not a connected app's token.
403client_scopeThe key's owner is limited to one client. The API isn't open to them.
403workspaceThe key's workspace can't be opened anymore.
404not_foundNo such endpoint, or no such object in this workspace.
404not_enabledCompetitor watching isn't on for this business.
405method_not_allowedThe endpoint doesn't take that method. Allow lists the ones it does.
409limitThe workspace already has 5 webhooks.
429rate_limitedOver a limit. Wait Retry-After seconds.
500server_errorTaseli failed. Safe to retry a read after a minute.
503unavailableThe feature isn't available in this environment.

A parameter outside its values is an error, never ignored. Unknown parameters are ignored, so a new parameter can't break an old call.

Retries

RequestRetry?
Any GETYes. Reads change nothing.
429After Retry-After seconds.
500After a minute.
4xx other than 429No. It fails the same way until the request changes.
POST /webhooksNot blindly. There's no idempotency key: after a timeout, list webhooks first, or you may make a second one.
DELETE /webhooks/{id}Yes. A second try answers 404, and the webhook is gone either way.
POST /webhooks/{id}/testYes. It sends another test.

Request-Id

Every response carries a Request-Id header. Log it. When you write to support, send it: Taseli can find any failed request by it.