# Get started

Read stored iOS competitor evidence from your backend, a script, or an AI agent.

## Which surface to use

HTTP and MCP read the same catalogue. Pick the surface that matches the client.

| Surface | Credential | Use it for |
| --- | --- | --- |
| REST API | API key | Read analytics-style catalogue data, save items, and send commands from your backend |
| MCP | OAuth or the same API key | Ask an assistant about competitors, creatives, keywords, and charts |

## Base URL

Every v1 route hangs off this origin. Send the tenancy selector with the credential.

```
https://api.peekpanda.com/v1/
```

## Authenticate requests

Send a PeekPanda API key as a bearer token. Create one under Account → API keys. It is shown once. Do not put it in frontend code or a public repository.

[Create an API key](/docs/api-keys)

```
Authorization: Bearer YOUR_API_KEY
```

## Try a read

Search stored iOS calorie-tracking competitors. Responses are paginated with an opaque next cursor. Keep the original filters when you follow it.

```
curl --get 'https://api.peekpanda.com/v1/competitors' \
  --header "Authorization: Bearer $PEEKPANDA_TOKEN" \
  --header 'x-genviral-tenancy: personal' \
  --data-urlencode 'platform=ios' \
  --data-urlencode 'search=calorie' \
  --data-urlencode 'limit=24'
```

## Errors

Failed requests return an HTTP status and a safe error body. Invalid input is 400, a missing credential is 401, a missing subscription is 402, a missing scope is 403, a missing record is 404, a conflict is 409, and a throttle is 429. Honor Retry-After when it is present. A 429 with daily_call_limit means the plan's API and MCP calls for the day are used: 30 calls a day on Peek and 1,000 on Panda, reset at 00:00 UTC.

[Errors and retries](/docs/errors-and-retries)

## Next steps

Connect an assistant, or open the endpoint index and follow one operation.

[Get started with MCP](/docs/mcp)
