Substy Developers

Errors

Diagnose failed requests and decide when a retry is appropriate.

Errors use a consistent JSON envelope:

{
  "error": {
    "code": "BAD_REQUEST",
    "message": "Correct the listed fields using the endpoint schema.",
    "requestId": "request-identifier",
    "fields": [{ "path": "limit", "reason": "Use a valid value." }]
  }
}

Additional context can include operationId, requiredAccess, reason, or retryAfterSeconds. These fields are present only when relevant. Keep the request identifier when reporting an issue.

HTTP statusMeaningNext step
400Invalid inputCorrect the indicated fields.
401Authentication failedCheck the key and its expiration or revocation.
403Access deniedCheck agency, category grants, role, and creator access.
404Resource unavailableVerify the resource identifier and access.
409Conflict or operation stateRead the message and inspect any operation receipt.
412Required precondition missingComplete the prerequisite described in the error.
413Request body too largeReduce the payload.
429Rate or concurrency limitRespect the Retry-After header.
503Dependency or service unavailableRetry reads with backoff; inspect write receipts first.

Other domain-specific errors can occur. Treat the HTTP status as the broad category and the error body as the actionable explanation.

Uncertain outcomes

A network timeout does not prove a write failed. If you received an operationId, check its status before resubmitting. If you did not receive a receipt, reconcile the resulting resource before retrying a consequential action.

Do not include keys, fan conversation text, or connection credentials in logs or support reports. Share the request identifier and the non-sensitive error code instead.

On this page