Developer API
Errors

Errors

Errors come back as JSON in the same envelope as success responses, just with status: "error":

{
  "status": "error",
  "code": 401,
  "message": "Invalid API key for this guild"
}

Some endpoints add extra fields like details or retry_after. The status, code, and message fields are always there.

Status codes

CodeMeaningCommon causes
400Bad RequestMissing field, invalid JSON, wrong content-type, missing required header
401UnauthorizedMissing key, invalid key, revoked key
403ForbiddenKey valid but does not match the :guildId in the path
404Not FoundThe resource does not exist, or the guild has not been set up
409ConflictDuplicate (for example a binding that already exists)
422Unprocessable EntityBody is well-formed but breaks a rule
426Upgrade RequiredWebSocket route hit without an Upgrade: websocket header
429Too Many RequestsRate limit. See Rate Limits
500Internal Server ErrorBug on our side. Retry once with backoff.
502 503Upstream issueDiscord or Roblox is unhappy. Retry with backoff.

Common error messages

"Missing API key"

You did not send any of X-API-Key, Authorization: ApiKey ..., or Authorization: Bearer technified_....

"Invalid API key for this guild"

The key was sent but does not match any active key on the target guild. Either the key is wrong, revoked, or you're targeting the wrong guild.

"API key does not match target guild"

The key embeds a guild ID. The :guildId in the path is a different guild. Use the key issued by the guild you're calling.

"Guild ID required for API key (use route :guildId or X-Guild-ID)"

The endpoint has no :guildId in the path (for example /lookup/discord/...). Send the guild ID in the X-Guild-ID header.

"Expected WebSocket upgrade"

You hit a WebSocket URL with a plain HTTP client. Send Upgrade: websocket and Connection: Upgrade. Most WebSocket libraries do this for you.

Retry strategy

  • 429: respect Retry-After, then retry. Slow your call rate.
  • 5xx: retry with exponential backoff. Start at 1 second, cap at 30.
  • 4xx other than 429: fix the request. Retrying the same call will not help.