Skip to content
Lumindocs
UseBuildChangelog
Open Lumin

Reference

Error codes

Every Lumin error follows the same shape: an MCP error object with a stable code, a human-readable reason, and (where useful) a recovery hint.

The error shape

json
{
  "isError": true,
  "content": [{
    "type": "text",
    "text": "This tool needs birth data. Call set_birth_profile first."
  }],
  "_meta": {
    "code": "birth_data_missing",
    "recoverable": true
  }
}

The one exception is the rate limit. An exhausted monthly allowance does not arrive as a tool error. It arrives as HTTP 429 with a JSON-RPC error object, code -32000, carrying retryAfterSeconds, limit, remaining, and resetAt in error.data. See rate limits for the full shape.

All codes

CodeHTTPCauseRecovery
-32000429Monthly call allowance used up. A JSON-RPC error object on the response, not a tool errorRead error.data.resetAt, tell the user or buy a call pack, do not sleep-retry
invalid_event_name400Event keyword not recognizedMap to nearest known event or pass house_group override
birth_data_missing400Tool requires birth data and none in contextCall set_birth_profile, then retry once
validation_failed400Schema validation rejected inputFix input, do not retry blindly
auth_invalid401Bearer token rejectedRefresh OAuth or rotate API key
auth_expired401OAuth token expiredRefresh against /token endpoint
user_suspended403Account is suspendedContact support, no automated recovery
engine_unavailable502kp-engine transient failureExponential backoff, max 2 retries
engine_timeout504kp-engine slow responseRetry with timeout extension or skip phase
internal_error500Unhandled MCP-side errorRetry once, then escalate with request id

Idempotency

All Lumin tool calls are pure. Retrying produces the same result, and failed calls do not count against your monthly allowance.