Errors

Error structure

All errors share one envelope:

{
  "error": {
    "id": "<correlation-id>",
    "code": "<error_code>",
    "message": "<human-readable message>",
    "details": [
      { "code": "<detail_code>", "message": "<detail message>", "data": "<optional>" }
    ]
  }
}
  • id — the request correlation id (also returned as the responseId response header, alongside a timestamp header). Quote it in bug reports.
  • code — a stable, enumerated error code you can branch on.
  • details — present for multi-field validation errors; each entry has its own code, message, and sometimes data (e.g. the list of offending ids).

Status codes you'll see

StatusMeaningTypical codes
400Malformed request / bad valueinvalid_status, missing_required_params
401Not authenticatedunauthorized
403Feature off or insufficient permissionscohorts_not_enabled, forbidden
404Resource not foundcohort_not_found, section_not_found, content_not_found, member_not_found
409Conflict with current statecohort_not_deletable, cohort_expired_modification_not_allowed, cohort_not_active, cohort_expired, content_already_exists, cannot_remove_creator, cannot_leave_mandatory
422Validation failedvalidation_failed, duplicate_card_ids, content_type_not_supported, bulk_limit_exceeded, invite_failed, add_members_failed, add_authors_failed, community_not_topic_based, page_token_not_exclusive, page_token_invalid
503Content service unavailablecontent_service_unavailable

Rule of thumb

422 means your input is wrong; 409 means the input is fine but the cohort's current state won't allow it.