Error codes

Every error is application/problem+json with a stable code and a request_id to quote to support. Back to the API reference.

HTTPcodeWhen
400bad_jsonRequest body is not valid JSON
400bad_cursorcursor param is not from a previous response
400unsupported_media_typeBody sent without Content-Type: application/json
401missing_keyNo API key in Authorization / X-FeatShare-Key
401invalid_keyKey malformed, unknown, or secret mismatch
401key_revokedKey was revoked in the app
401key_expiredKey passed its expiry date
401key_suspendedKey temporarily suspended by an admin (reversible)
403api_disabledAPI not enabled for this business (module flag / pilot allowlist)
403insufficient_scopeKey lacks the scope this endpoint requires
403ip_not_allowedCaller IP outside the key's IP allowlist
403module_offThe business module behind this endpoint is off (e.g. bookkeeping)
404not_foundResource does not exist in this business
405method_not_allowedPath exists under other HTTP methods (see Allow header)
409conflictRequest conflicts with current state
409already_registeredMember already booked into this class
409meeting_fullClass is full (join the waitlist instead)
409idempotency_key_reusedIdempotency-Key reused with a different body
403wrong_endpointCalled on a retired base URL — use https://web.featshare.com/api
422validation_failedField-level validation failed (see errors[])
422business_ruleA business rule blocks the operation (see errors[].code)
429rate_limitedPer-key burst limit exceeded — honor Retry-After
429daily_quota_exceededBusiness daily request quota exhausted
429monthly_quota_exceededBusiness monthly plan quota exhausted
429message_quota_exceededBusiness daily message quota exhausted
500internalUnexpected server error — quote request_id to support
503api_unavailableAPI disabled globally or temporarily unavailable