Use this catalog to handle common failures consistently.

Validation and request errors

StatusExample detailWhat it meansAction
400channel_id is requiredRequired field missingFix request payload
400to is requiredRecipient field missingAdd destination number
400type is requiredMessage operation type missingAdd type
400text is required for type=textTyped payload missing for selected message typeAdd text for type=text
400image.url is required for type=imageImage URL missing in typed payloadAdd image.url
400invalid messageIDPath ID is not valid UUIDSend valid UUID
400invalid conversation_idBody conversation ID invalidFix ID format

Auth and permission errors

StatusExample detailWhat it meansAction
401missing user contextNo valid auth credentialSend X-Api-Key header
401invalid email or passwordLogin credentials invalidRe-check login input
403forbiddenCredential lacks permissionUse credential with required scope/role

Resource and state errors

StatusExample detailWhat it meansAction
404message not foundResource does not existVerify identifier and tenant context
409conflictRequest conflicts with current stateRefresh state, then retry safely
429rate limitedLimit exceededBackoff and retry
500internal server errorUnexpected backend failureRetry with backoff and log request context

Response format

Message endpoint error
{
  "error": {
    "code": "validation_error",
    "message": "text is required for type=text",
    "details": [
      {
        "field": "text",
        "reason": "required"
      }
    ]
  },
  "request_id": "req_123"
}
For /v1/messages*, error responses use { error, request_id }. Some non-message endpoints still use Huma problem+json.