Errors

Status codes and the error object.

Errors use standard HTTP status codes and one JSON shape:

{
  "error": {
    "code": "SCOPE_DENIED",
    "message": "This API key is not allowed to: edit library (scope library:write). An organisation admin can grant it in Settings → Organisation → API keys.",
    "details": {}
  }
}

message is written to be shown to a person. Branch your code on code, not on message.

Every response, error or not, carries an x-request-id header. Quote it when you contact support. You can also send your own x-request-id (8–64 letters, digits, - or _) and Ingenee will use it.

StatuscodeMeaning
400VALIDATIONThe body isn't valid JSON, or a parameter is malformed
401UNAUTHENTICATEDMissing, invalid, revoked or expired key, or its creator has lost access
403SCOPE_DENIEDThe key doesn't have the scope this endpoint needs
403FORBIDDENThe key's role is too low for this action, for example a viewer key writing
403MODULE_NOT_ENABLEDThe organisation's plan doesn't include this module
403ORG_SUSPENDED / ORG_CANCELEDThe organisation isn't active
404NOT_FOUNDNo such resource in this organisation, or no such endpoint
409CONFLICTThe change conflicts with current state, for example editing a field a person has locked
409INSUFFICIENT_CREDITSA Studio operation needs more media credits than the organisation has
413TOO_LARGEThe request body or media file is over the limit
422VALIDATION and othersThe body is well-formed but not acceptable; message says why
429RATE_LIMITEDToo many requests. Wait for the number of seconds in Retry-After
5xxINTERNALSomething failed on Ingenee's side. Retry with backoff

Some endpoints return more specific codes, such as CATALOG_REQUIRED when an upload has no catalog. The reference lists them where they apply.