Reference

Errors

Every status and machine-readable error code the APIs return.

Every error body has the same shape. Match on code, not on the message text. We may improve a message at any time. A code only changes under a new version path.

json
{
  "error": "This Idempotency-Key was already used with a different request body.",
  "code": "IDEMPOTENCY_MISMATCH"
}

Every response, success or error, carries an x-request-id header. Quote it when you contact support. It is how we find your exact request in our logs.

Error codes#

codeStatusMeaningWhat to do
AUTH_MISSING401No Authorization: Bearer <token> header.Send the header.
AUTH_INVALID401The key is invalid, expired or revoked.Check the key. Create a new one if needed.
API_KEY_KIND_INVALID403A shared internal key was used where a per-client trk_ key is required.Use a per-client key.
SCOPE_MISSING403The key does not carry the scope this endpoint needs.Ask us to grant the scope.
CLIENT_MISMATCH403The x-client-id header does not match the key's client.Remove the header, or send the right one.
CLIENT_ID_MISSING400The endpoint needs a client id and none resolved.Send a per-client key.
VALIDATION_ERROR400The request body failed validation.Read error. Correct the request. Do not retry unchanged.
IDEMPOTENCY_IN_FLIGHT409A request with this Idempotency-Key is still running.Wait, then retry the same request.
IDEMPOTENCY_MISMATCH422This Idempotency-Key already ran with a different body.Use a new key for a new body.
RATE_LIMITED429You passed the rate limit for this key.Wait for Retry-After seconds, then retry.
INTERNAL_ERROR500We failed.Retry with backoff. Quote the x-request-id.

The Partner Metadata API adds three codes of its own: INVALID_IDENTIFIER (400), ASSET_NOT_FOUND (404) and SOURCE_UNAVAILABLE (503).

What returns a 400#

The Catalogue Ingest request schema is strict. These all return 400 VALIDATION_ERROR:

  • An unknown or misspelled field. We reject it. We do not ignore it.
  • A duplicate client_work_ref inside one batch.
  • A publisher-to-writer link that does not resolve.
  • A share outside the 0 to 100 range.
  • A body client_id that does not match your key.
  • A client_artist_ref that conflicts with existing catalogue state.
  • A blocking validation issue, when you sent enforcement: "strict". Nothing is stored. The message names how many works carried one, and mode: "validate" shows you the same issues without storing.

A catalog_id we cannot find for your account returns 404 NOT_FOUND.

A 400 is a problem with your request. Correct it. Retrying the same body will fail the same way.

Which errors to retry#

StatusRetry?
400, 401, 403, 404, 422No. Correct the request first.
409Yes, after a short wait.
429Yes, after Retry-After seconds.
500, 502, 503, 504Yes, with exponential backoff.

Rate limits and retries has a worked retry loop.

Errors are not gaps#

A 2xx response can still report problems with your data. Missing fields arrive in gaps, and data that is present but wrong arrives in validation. Neither blocks the write, and neither is an HTTP error. See Validation and gaps.