Skip to content
Clan LabsAPIv2
GuidesWebsite Open dashboard
OverviewAuthenticationAPI keysRequestsErrorsMigrationEndpoints
API reference
API v2
  • API overview
  • Authentication
  • API keys and scopes
  • Requests and responses
  • Errors and rate limits
  • Versioning and migration
  • Swagger migration
Troubleshooting
  • Authentication failures
  • Request and rate-limit errors
Members
  • GETList members
  • GETFetch one member
  • POSTChange a member's experience
  • POSTChange a member's quota points
  • PUTSet a member's rank
  • POSTPromote a member one rank
  • POSTDemote a member one rank
  • POSTAward a medal
  • DELETERemove a medal
  • POSTAward a qualification
  • DELETERemove a qualification
  • GETList a member's suspensions
  • POSTSuspend a member
  • POSTRestore a member's active suspension
  • POSTCancel a member's active suspension
Configuration
  • GETList ranks
  • GETFetch one rank
  • GETList medals
  • GETFetch one medal by name
  • GETList qualifications
  • GETFetch one qualification by name
Moderation
  • GETList blacklist entries
  • POSTCreate a blacklist entry
  • GETFetch one blacklist entry
  • PATCHUpdate a blacklist entry's description
  • DELETERemove a blacklist entry
  • GETList warnings
  • POSTIssue a warning
  • GETFetch one warning
  • PATCHUpdate a warning
  • DELETEDelete a warning
Events
  • GETList events
  • POSTCreate and announce an event
  • GETList curated event types
  • GETList approved event locations
  • GETFetch one event
  • POSTCancel an event
  • POSTFinish an event
  • POSTCreate a fresh Discord announcement
GuidesClan Labs websiteOpen dashboard Support
API v2
  • API overview
  • Authentication
  • API keys and scopes
  • Requests and responses
  • Errors and rate limits
  • Versioning and migration
  • Swagger migration
Troubleshooting
  • Authentication failures
  • Request and rate-limit errors
Members
  • GETList members
  • GETFetch one member
  • POSTChange a member's experience
  • POSTChange a member's quota points
  • PUTSet a member's rank
  • POSTPromote a member one rank
  • POSTDemote a member one rank
  • POSTAward a medal
  • DELETERemove a medal
  • POSTAward a qualification
  • DELETERemove a qualification
  • GETList a member's suspensions
  • POSTSuspend a member
  • POSTRestore a member's active suspension
  • POSTCancel a member's active suspension
Configuration
  • GETList ranks
  • GETFetch one rank
  • GETList medals
  • GETFetch one medal by name
  • GETList qualifications
  • GETFetch one qualification by name
Moderation
  • GETList blacklist entries
  • POSTCreate a blacklist entry
  • GETFetch one blacklist entry
  • PATCHUpdate a blacklist entry's description
  • DELETERemove a blacklist entry
  • GETList warnings
  • POSTIssue a warning
  • GETFetch one warning
  • PATCHUpdate a warning
  • DELETEDelete a warning
Events
  • GETList events
  • POSTCreate and announce an event
  • GETList curated event types
  • GETList approved event locations
  • GETFetch one event
  • POSTCancel an event
  • POSTFinish an event
  • POSTCreate a fresh Discord announcement
  1. API reference
  2. /
  3. API v2
API v2

Errors and rate limits

Handle API v2 error envelopes, status codes, scope failures, and retry timing.

Last updated 3 September 2026

API v2 returns machine-readable errors in one envelope:

json
{
  "error": {
    "code": "validation_failed",
    "message": "Request validation failed",
    "details": {
      "issues": []
    }
  }
}

Branch application logic on error.code, not on human-readable message. The wording can improve without changing the condition. details is optional and varies by error.

Status codes

StatusMeaning
200 OKA read or completed action returned data.
201 CreatedA resource was created.
202 AcceptedWork was accepted and can complete asynchronously. Read the returned state.
204 No ContentThe action succeeded without a JSON body.
400 Bad RequestInput validation failed. Inspect error.details.issues when supplied.
401 UnauthorizedCredentials are missing or cannot be authenticated.
403 ForbiddenThe key, API switch, scope, subscription, plan, trial, or feature blocks access.
404 Not FoundThe route or requested community resource does not exist.
409 ConflictCurrent state conflicts with the write, such as a duplicate blacklist entry.
429 Too Many RequestsWait for the response’s retry interval.
500 Internal Server ErrorA service error prevented the request. Reconcile state before retrying a write.

Each generated endpoint page lists the responses declared by its current route schema.

Important error codes

Authentication and entitlement codes include missing_credentials, api_disabled, key_disabled, legacy_key_unsupported, insufficient_scope, entitlement_required, api_access_unavailable, and feature_unavailable. Routing and validation can return route_not_found and validation_failed.

An insufficient_scope response also sets WWW-Authenticate with the required scope and includes required and granted scopes in details.

Rate limiting

Rate limits protect both unauthenticated traffic and authenticated keys. The values are deployment-configurable, so clients must not assume a fixed number from old examples.

A limited response uses 429 rate_limit_exceeded, sets Retry-After in seconds, and includes values such as:

json
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Too Many Requests",
    "details": {
      "limit": 100,
      "remaining": 0,
      "resetMs": 30000
    }
  }
}

The numbers above illustrate the shape only. Always use the values in the actual response.

Wait at least Retry-After, add jitter when many workers share a key, reduce polling, and avoid retry storms. A 429 does not justify rotating keys.

For a diagnostic checklist, see API request errors.

PreviousRequests and responsesNext Versioning and migration
On this page
  1. Status codes
  2. Important error codes
  3. Rate limiting