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

# Authenticate your agent

> Use a Channel3 API key for Token-tier catalog access, rate limits, and monetizable links

You can use the catalog **with no login** (Anonymous tier). The UCP CLI stays on Anonymous for Channel3 — it cannot send API keys.

For production, use **curl** or an MCP client you control and add a **Channel3 API key** for the **Token** tier: higher rate limits and **affiliate monetization** on `variants[].url` buy links in catalog results (see [Extension reference](/ucp/catalog-global-extension)).

## 1. Create a key

1. Go to the [dashboard](https://trychannel3.com/dashboard).
2. Create an API key.
3. Keep it out of git:

```bash theme={null}
export CHANNEL3_API_KEY="ch3_live_..."
```

## 2. Send it on every MCP request

Add **`x-api-key`** to each POST to `/mcp`:

<CodeGroup>
  ```bash UCP CLI theme={null}
  # Anonymous only on Channel3 — no API key support in ucp-cli.
  ucp catalog search \
    --set /query='wireless headphones' \
    --set '/pagination/limit=3' \
    --format json
  ```

  ```bash curl theme={null}
  curl -sS -X POST https://ucp.trychannel3.com/mcp \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json, text/event-stream' \
    -H "x-api-key: $CHANNEL3_API_KEY" \
    -d '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/call",
      "params": {
        "name": "search_catalog",
        "arguments": {
          "meta": null,
          "catalog": {
            "query": "wireless headphones",
            "pagination": { "limit": 3 }
          }
        }
      }
    }'
  ```
</CodeGroup>

## 3. Check that it worked

Response headers:

```
x-ucp-auth-tier: token
```

In **`structuredContent`**, variant `url` values should use **your** vendor id in the `buy.trychannel3.com` path (not `public_ucp`). Compare with the same search without a key.

Bad or missing keys fall back to anonymous limits (no 401):

```
x-ucp-auth-tier: anonymous
```

## What's next

<CardGroup cols={2}>
  <Card title="Rate limits" icon="gauge" href="/ucp/auth-and-rate-limiting">
    Anonymous vs Token
  </Card>

  <Card title="Search" icon="search" href="/ucp/search-catalog">
    Run a search with your key
  </Card>
</CardGroup>
