All errors are returned as JSON with a top-levelDocumentation Index
Fetch the complete documentation index at: https://docs.userepo.com/llms.txt
Use this file to discover all available pages before exploring further.
error field — plus structured fields when they help.
Status code catalog
| Code | Meaning | When |
|---|---|---|
200 | OK | Successful read or idempotent write |
201 | Created | New resource created (key, request, sync run) |
202 | Accepted | Async work queued (sync run) |
204 | No Content | Successful CORS preflight |
302 | Found | OAuth redirect to provider |
400 | Bad Request | Validation failed, missing params, malformed OAuth state |
401 | Unauthorized | Missing or invalid bearer token |
402 | Payment Required | No active subscription (paywalled tiers only) |
403 | Forbidden | Authenticated but lacking the required scope, role, or tier limit |
404 | Not Found | Resource doesn’t exist or you don’t have access to see it |
409 | Conflict | e.g. revoking the key currently in use |
429 | Too Many Requests | Rate limit OR credit budget exceeded |
500 | Internal Server Error | Repo bug or DB failure — file a report |
502 | Bad Gateway | Upstream OAuth provider or LLM error |
503 | Service Unavailable | A required service isn’t configured (e.g. Stripe in dev) |
Common error shapes
Quota exceeded (Builder tier)
Rate limit exceeded
Retry-After — back off with jitter rather than hammering.
Subscription inactive
402 when an org’s subscription is canceled, unpaid, or incomplete_expired. Internal/enterprise tiers never see this.
Tier limit reached (agent/connector)
connector_limit_reached.
Invalid OAuth state
Provider errors (502)
Idempotency
/v1/ingest is idempotent on (organizationId, provider, externalId) — re-posting the same document is a no-op (counted in skipped).
/v1/sync-runs enforces “at most one active run per connector” at the DB level — duplicate queue attempts return the existing run with alreadyActive: true.
Other endpoints (/v1/search, /v1/context, /v1/ask) are not idempotent — each call consumes a credit. If you retry, you’ll burn an extra credit.