English EN
API Reference
API Reference

API Reference

Errors

Every error of the Tentary API has the same format. The message tells you what to do.

On this page

Format

Every error comes as JSON with a matching HTTP status:

{
  "error": {
    "code": "...",
    "message": "...",
    "request_id": "..."
  }
}
  • code is a fixed value from the table below. Your code can react to it.
  • message says in words what is wrong and what you can do.
  • request_id identifies the request. Send it to support if you need help.

Two answers have a shorter body: an unexpected server error answers {"error": "server_error", "request_id": "..."}, and a path outside /v1/ answers {"error": "not_found"}.

Error codes

HTTPcodeMeaning
400bad_inputA parameter is missing, unknown or wrong. The message names it.
400bad_cursorThe cursor is not valid. Start again without a cursor.
400bad_imageThe file or the URL is not a PNG, JPG, GIF or WebP image.
400fetch_failedTentary could not copy the file from the URL, for example because the file is too large or the URL does not answer with HTTP 200. The message says why.
400, 404legacy_courseThe product has an old course. Open it once in the Tentary app first. The message has the link.
400not_possibleThe action is not possible for this object, for example a refund of an old order.
400, 403setup_missingThe account setup is not finished, for example there is no payment provider. See GET /v1/setup.
401unauthorized, invalid_tokenNo key, a wrong key or a revoked key. The answer has the header WWW-Authenticate: Bearer.
403scope_missingThe key does not have the permission. Create a key with the permission.
403owner_only, blocked, plan_limit, not_possibleNot allowed for this account, or not possible through the API. The message says why.
404not_foundNo such object in this account, or no such path.
405method_not_allowedWrong HTTP method. The Allow header names the right one.
409busyThe same write is still running, or Tentary still copies this product. Wait a minute, check, then retry.
409not_uploadedThe file is not in the storage yet. Send the bytes with PUT to the upload_url first, then finish the upload again. See File uploads.
429rate_limitedToo many calls. The Retry-After header gives the seconds to wait. See Rate limits.
429busyToo many calls of this account run at the same time, or Tentary copies another file or image of this account at the moment. See Rate limits. Wait the Retry-After seconds, then retry.
500server_errorAn error on the Tentary side. Send the request_id to support.
503timeoutThe call took too long for this account. Ask for a shorter period, one product (product_id) or fewer items per page.
503unavailableThe help center search is not available now. Try again later.

Retry safely

  • After a 429, wait the Retry-After seconds. Do not retry at once in a loop: a call refused by the per-minute or per-day limit still costs 1 point.
  • After a timeout or a 500 on a write, first read the object or the list to see if the write happened. Only then retry.
  • Create calls (and POST /v1/files) have a short protection: the same create with the same values within 60 seconds returns the first result and does not create a second object. This is not a general guarantee. Updates and calls after 60 seconds run again.

Last updated: October 28, 2026

Start typing to search.