Skip to main content

Errors and limits

Error format​

Errors are returned as application/problem+json:

{
"status": 400,
"title": "Bad Request",
"detail": "a column name is required"
}

detail is written for a person to read and is safe to show to your users. Don't parse it, because the wording may change. Branch on status.

When something goes wrong on our side, detail includes a reference:

{
"status": 500,
"title": "Internal Server Error",
"detail": "The request could not be completed. Quote reference 3fa91c07d2b4 if you report this."
}

Send that reference to [email protected] and we can find exactly what happened.

Status codes​

CodeMeaningWhat to do
200 / 201Success / created.
204Success, no body.
400The request is malformed or a value is invalid. detail says which.Fix the request. Don't retry it unchanged.
401No credentials, or the API key is invalid or revoked.Check the Authorization header and the key.
402Your subscription doesn't allow this: it has lapsed (the account is read-only), you've reached your plan's reader limit, or the feature is an add-on you don't have.See Subscription. Retrying won't help.
403Your role doesn't allow it (API keys can't manage users, keys, the audit log or billing), or the account is suspended.
404That thing doesn't exist on your account.
409Conflicts with the current state. For example, checking out an asset that's already checked out, or renaming a column to a name that's taken.Re-read the current state, then decide.
429Too many requests.Wait for the number of seconds in the Retry-After header.
500 / 502 / 503A problem on our side.Retry with backoff. If it persists, contact support with the reference.

Rate limits​

LimitAllowance
Per API key2,000 requests per minute
Per source IP address (all users and keys combined)1,000 requests per minute

Both apply. If you have several integrations behind one office IP address, they share that address's allowance. Over the limit, you get 429 with Retry-After: 60.

Failed authentication is limited separately. After 30 requests with invalid keys from one IP address within 15 minutes, that address is locked out for 15 minutes (429, Retry-After: 900). This most often happens to a job still running with a revoked key, so update the key rather than retrying.

To stay well inside the limits:

  • Use bulk endpoints. One CSV import replaces thousands of single-tag writes.
  • Use the live event stream instead of polling for changes.
  • Back off on 429 and 5xx responses.

Size limits​

WhatLimit
JSON request body1 MB
CSV import file64 MB and 100,000 rows
Tags per bulk delete10,000
Request duration60 seconds (the event stream is exempt)

Read-only and suspended accounts​

When a subscription lapses, GET requests keep working and every write returns 402 with a detail explaining why. When an account is suspended or closed, every request returns 403. See Subscription.