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

# API Overview

> Base URL, authentication, rate limiting, and error handling for the Unpod REST API - stated once.

The Unpod REST API manages platform resources: spaces, agents, tasks, runs,
call logs, telephony (bridges, numbers, providers), and billing. This page
states the conventions once; the endpoint pages in the sidebar assume them.

<Note>
  Building a voice agent in Python? You likely want the
  [Speech Stack](/get-started/quickstart) instead - the `unpod` SDK wraps
  provisioning and live-call handling. The REST API is for direct integrations
  and non-Python stacks.
</Note>

## Base URL

```
https://unpod.ai/api/v2/platform
```

All endpoint paths in this reference are relative to it.

## Authentication

Every request carries an API token in the `Authorization` header using the
`Token` scheme:

```http theme={null}
Authorization: Token a1b2c3d4e5f6g7h8i9j0...
```

Generate tokens from the [Unpod Dashboard](https://unpod.ai/api-keys/) - see
[Authentication](/api/get-started/authentication) for the step-by-step,
space-token scoping, and error responses.

```bash theme={null}
curl -X GET "https://unpod.ai/api/v2/platform/telephony/bridges/" \
  -H "Authorization: Token $UNPOD_TOKEN"
```

## Rate limiting

Responses include rate-limit headers; exceeding your limit returns
`429 Too Many Requests`:

| Header                  | Meaning                               |
| ----------------------- | ------------------------------------- |
| `X-RateLimit-Limit`     | Max requests in the current window    |
| `X-RateLimit-Remaining` | Requests left in the window           |
| `X-RateLimit-Reset`     | Unix timestamp when the window resets |
| `Retry-After`           | Seconds to wait (only on 429)         |

Handle 429s with exponential backoff, honoring `Retry-After`. Cache reads and
batch writes where you can. Current limits depend on your plan - check the
dashboard.

## Errors

The API uses standard HTTP status codes. Error bodies are JSON with a
machine-readable code and a human-readable message:

```json theme={null}
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Rate limit exceeded. Please try again in 60 seconds."
  }
}
```

Common cases: `401` - token missing, expired, or access denied (see
[Authentication](/api/get-started/authentication)); `404` - resource not
found or outside your space; `429` - rate limited.

## Start here

<CardGroup cols={2}>
  <Card title="API Quickstart" icon="play" href="/api/get-started/quickstart">
    First authenticated requests against bridges, call logs, and providers.
  </Card>

  <Card title="Authentication" icon="key" href="/api/get-started/authentication">
    Tokens, space scoping, and auth errors in detail.
  </Card>
</CardGroup>
