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

# API reference

> One REST API for every channel Dairo sends on.

Every page in this reference is generated from Dairo's [OpenAPI spec](https://docs.dairo.app/openapi.json),
so it always matches the API that is actually deployed.

## Base URL

```text title="Base URL" theme={null}
https://api.dairo.app
```

## Authentication

Every request carries an API key as a bearer token. Keys are scoped, so a key
can only do what you granted it.

<CodeGroup>
  ```bash title="cURL" theme={null}
  curl https://api.dairo.app/v1/inboxes \
    -H "Authorization: Bearer $DAIRO_API_KEY"
  ```

  ```ts title="TypeScript" theme={null}
  import { Dairo } from "dairo";

  const dairo = new Dairo({ apiKey: process.env.DAIRO_API_KEY! });
  ```

  ```python title="Python" theme={null}
  from dairo import Dairo

  dairo = Dairo()  # reads DAIRO_API_KEY
  ```
</CodeGroup>

See [API keys & authentication](/get-started/authentication) for how to create a
key, and [Scopes](/concepts/scopes) for what each one can reach.

## The essentials

<CardGroup cols={2}>
  <Card title="Versioning" icon="code-branch" href="/api-versioning">
    How the API changes, and what counts as breaking.
  </Card>

  <Card title="Idempotency" icon="rotate" href="/concepts/idempotency">
    Retry a send safely without delivering it twice.
  </Card>

  <Card title="Pagination" icon="list" href="/concepts/pagination">
    Cursor your way through long collections.
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/concepts/errors">
    The error envelope, and what each code means.
  </Card>
</CardGroup>
