Skip to main content
EduRails

Online learning made easy. For your whole institution.

Errors

Every non-2xx response carries the same envelope. Code against the code, which is stable; the message is for people and is translated.

The format

{
  "error": {
    "code": "not_found",
    "message": "No encontrado",
    "request_id": "01J9ZC…"
  }
}

Keep the request_id when something fails: it is how your request is found in the logs. A code your client does not know may appear in the future (adding one does not break v1): handle it by its HTTP status.

The most common codes

CodeHTTPWhat to do
unauthorized401The credential is missing or expired. Check the Authorization header.
forbidden403Your role does not allow the action in that organization.
not_found404It does not exist or is not in your organization (deliberately indistinguishable).
validation_error422The body or parameters do not match the contract; the message says which field.
too_many_requests429Wait as long as Retry-After says.
feature_disabled404The organization has that feature off (community, gamification or AI).
organization_suspended403The organization is suspended: talk to its admin.
plan_limit_reached403A plan limit has been reached (seats, courses, storage).
dpa_required409Reserved: no longer returned (EduRails is only for people aged 18 or over).
step_up_required403The action requires confirming your identity again.
credential_read_only403The token or OAuth grant is read-only.
conflict409The resource changed or already exists; read it again.
service_unavailable503Temporary outage: retry after Retry-After.
internal_error500Our fault: keep the request_id and let us know.

The full list is in the ErrorCode schema of the reference.