Skip to content

Errors and limits

Every error is JSON. Most carry a human-readable detail; where an agent needs to branch on the cause, there is also a stable code.

Status code Meaning What to do
400 — The request body is invalid; the body names each failing field Fix the named fields and resend
400 — A lesson edit did not send updated_at Read the lesson, send its updated_at with your change
401 — No key, or the key is unknown, revoked or expired (Authentication credentials were not provided.) Check the Authorization header; ask for a new key
401 subscription_inactive The organisation has no active paid plan A person must subscribe to a plan
401 org_unverified The organisation has not completed verification A person must finish sign-up
403 — The key's permission for this area is too low Ask for view or edit on that area (permissions)
403 course_limit Creating a course would exceed the plan's course limit; detail says by how much Archive a finished course, or a person moves to a larger plan
404 — Nothing with that id in this key's organisation Check the id; keys only ever see their own organisation
409 stale_lesson The lesson changed since you read it; lesson holds the current version Re-apply your change to lesson and resend with its updated_at
429 — Rate limit reached Wait Retry-After seconds

Limits

  • 300 requests per hour per key. Each key has its own allowance.
  • Plan limits apply exactly as in the web app — for example, the number of courses on your plan. Creating one past the limit is refused with 403 course_limit.
  • Keys can expire. If a person set an expiry date, the key stops working at that date with 401.