> ## Documentation Index
> Fetch the complete documentation index at: https://docs.0xarchive.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Choose an interface

> Match your task to REST API, WebSocket, Webhook Alerts, Bulk Exports, an SDK, the CLI, the MCP server, or the Agent skill.

## What to use for each task

| Task | Use |
| - | - |
| Request snapshots or history windows from code | [REST API](/rest-api) |
| Stream live updates, or replay history in order | [WebSocket](/websocket) |
| Receive an event without polling | [Webhook Alerts](/webhooks) |
| Buy Parquet files for a market and date range | [Bulk Exports](/data-catalog), in the Data Catalog |
| Call the API from Python, TypeScript, or Rust | [SDKs](/sdks) |
| Run requests from a shell, cron job, notebook, or CI | [CLI](/cli), the `oxa` command |
| Ask Claude, ChatGPT, Cursor, or another MCP-capable client for market data | [MCP server](/mcp-server), hosted at `https://mcp.0xarchive.io/mcp` |
| Give a coding agent a reusable 0xArchive workflow | [Agent skill](/skill), a `SKILL.md` package |
| Generate a client, or check an exact path and schema | [OpenAPI](/openapi) |
| Give a chat assistant that cannot run code the right page | Any docs page as Markdown (add `.md` to its URL), or [`llms.txt`](/llms.txt) |

## How each one signs in

* **REST API, SDKs, Agent skill:** an API key in `OXARCHIVE_API_KEY`. REST sends it as `X-API-Key`.
* **WebSocket:** the same key, sent as `Authorization: Bearer` when the socket opens.
* **CLI:** the same key, in `OXA_API_KEY`.
* **MCP server:** OAuth through your client's built-in flow, with no 0xArchive API key. The authorization server is `https://auth.0xarchive.io`, and market data needs the `mcp:market.read` scope.
* **Webhook Alerts:** the dashboard, the REST routes with an API key, or the MCP server over OAuth.
* **Bulk Exports:** your dashboard account, in the browser.

Keep API keys in the environment or a secret store, never in browser code or prompts.

## When a call fails

* **`401` on an API-key interface:** check that the key is set in the variable that interface reads, and that it is active.
* **OAuth failure on the MCP server:** repeat the client's OAuth flow. Do not add an API key to the MCP URL.
* **`403`:** check the window against your plan's history, then the exact endpoint and key.
* **`404`:** check the namespace and symbol in [Venue coverage](/venue-coverage).
* **`429`:** read the `error_code`. Retry `rate_limited` within a bounded budget, after its `retry_after` seconds when it has one; stop on `insufficient_credits`. [When you reach a limit](/rate-limits#when-you-reach-a-limit) has the full rule.

Moving a working request from one interface to another? Keep the same symbol, window, and depth, and compare the new result with the old one.

## Next step

Copy a working request for the interface you picked from [Examples](/examples), which has REST, WebSocket, and agent examples and links to the SDK and CLI examples.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.