Arcmira returns errors in a stable JSON envelope so client logic can switch onDocumentation Index
Fetch the complete documentation index at: https://docs.arcmira.com/llms.txt
Use this file to discover all available pages before exploring further.
error.code without parsing strings.
Envelope
| Field | Description |
|---|---|
type | High-level category. Maps roughly to HTTP class. |
code | Machine-stable error identifier. Switch on this. |
message | Human-readable explanation. Safe to surface in dev consoles. |
param | When present, identifies the offending query/body parameter. |
doc_url | Deep link into these docs. |
request_id | Same value as the X-Request-Id response header. |
Request IDs
Every response — successful or not — carries anX-Request-Id header. The same value lives in error.request_id when errors occur.
When contacting support at hi@arcmira.com, always include the request ID, the endpoint, and the timestamp. It’s the fastest path to a fix.
Status codes
| HTTP | error.type | Common error.code values |
|---|---|---|
| 400 | invalid_request_error | invalid_query, invalid_body, appearances_person_only, invalid_feedback_request |
| 401 | authentication_error | invalid_api_key |
| 402 | quota_exceeded | quota_exceeded |
| 403 | permission_error | api_not_enabled, insufficient_scope, recommendations_not_enabled |
| 404 | not_found | entity_not_found, channel_not_found, recommendation_not_found, not_found |
| 409 | conflict_error | idempotency_conflict |
| 429 | rate_limit_error | rate_limit_exceeded |
| 500 | server_error | server_error |
Error code reference
invalid_query / invalid_body
The request failed Zod validation. error.message contains the validator’s output and error.param (where available) identifies the offending field. Almost always a client-side fix.
appearances_person_only
You called an appearance endpoint or set is_appearance=true for a non-person entity. Only person entities have appearances. Use /v1/mentions or /v1/entities/{id}/mentions instead. See Appearances vs. mentions.
invalid_api_key
The key is missing, malformed, disabled, expired, or has been revoked. Mint a new one in Settings → API Keys.
api_not_enabled
Your plan does not currently include API access. Upgrade your plan or contact hi@arcmira.com.
insufficient_scope
The key is valid but missing the scope required by the endpoint. The message will tell you which scope is needed (e.g. watchlists:write, trackers:write, recommendations:read, recommendations:write). For commercial scopes, the key also needs to be on a Pro+ plan — if it isn’t, you’ll see recommendations_not_enabled first. See Scopes.
recommendations_not_enabled
You called a commercial intelligence route (/v1/recommendations, /v1/channels/{id}/sponsors, /v1/mentions?details=full, POST /v1/feedback, or any recommendations_summary block) on a key whose tier doesn’t include the commercial surface. The tier-level gate (recommendations_api_enabled) is independent of scopes — even a key with recommendations:read will 403 here if the plan is below Pro+.
Fix: upgrade to Pro+ (pro_plus, ultra, teams, or enterprise) or use the non-commercial alternative (e.g. /v1/mentions without details=full).
invalid_feedback_request
POST /v1/feedback rejected the submission shape. Common causes: missing type (query param or JSON body), empty query object, malformed ?query= URL-encoded JSON, or a correction id that doesn’t match the com_* / ent_* pattern for the type. See Feedback for the request shape.
quota_exceeded
Your monthly row pool is exhausted and on-demand spending is disabled. Either enable on-demand in Settings → Billing or wait for the next billing period.
entity_not_found
The entity ID or name didn’t resolve. For lookups, try a different type, broader name, or use /v1/search or /v1/entities/search first.
channel_not_found
The channel ID passed to /v1/channels/{id}/sponsors has no media in the index. Verify the YouTube channel ID (it should be the UC... form, not a slug).
recommendation_not_found
A com_* ID referenced in a feedback correction doesn’t exist (or never did). Re-pull the recommendation row that produced the ID and confirm.
idempotency_conflict
You reused an Idempotency-Key with a different request body. See Idempotency for the resolution.
rate_limit_exceeded
You exceeded per-minute throttle. Honor Retry-After. See Rate limits.
server_error
An unexpected server-side issue. Retry with exponential backoff. If it persists, send us the X-Request-Id.