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

# Quickstart

> Mint an API key and call the Ceibo API in five minutes.

This guide takes you from no account to a successful API call.

## 1. Create a developer account

Sign up at [developer.ceibo.me](https://developer.ceibo.me). Anonymous
sessions can browse the dashboard, but minting and managing API keys
requires a real account — keys are tied to a user for billing,
attribution, and revocation.

## 2. Mint an API key

<Steps>
  <Step title="Open the dashboard">
    Once logged in, go to the **API keys** section.
  </Step>

  <Step title="Create a key">
    Give the key a memorable name (e.g. `local-dev`, `staging-api`).
    Names are unique per account.

    <Warning>
      The plaintext key is shown **once**. Copy it immediately and
      store it in a secrets manager — Ceibo never displays it again.
    </Warning>
  </Step>

  <Step title="Note the constraints">
    Each account can have up to **5 active keys** at a time. Revoke
    unused keys to free up slots; revocation is idempotent and the
    `revoked_at` timestamp is preserved for audit.
  </Step>
</Steps>

## 3. Make your first request

The public API lives at `https://api.ceibo.me/v1`. Authenticate every
request with an `x-api-key` header.

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.ceibo.me/v1/countries?limit=5 \
    -H "x-api-key: $CEIBO_API_KEY"
  ```

  ```ts TypeScript theme={null}
  const res = await fetch("https://api.ceibo.me/v1/countries?limit=5", {
    headers: { "x-api-key": process.env.CEIBO_API_KEY! },
  });
  const { data, meta } = await res.json();
  ```

  ```python Python theme={null}
  import os, requests

  res = requests.get(
      "https://api.ceibo.me/v1/countries",
      params={"limit": 5},
      headers={"x-api-key": os.environ["CEIBO_API_KEY"]},
  )
  res.raise_for_status()
  payload = res.json()
  ```
</CodeGroup>

A successful response returns a paginated envelope:

```json theme={null}
{
  "data": [
    {
      "id": 10,
      "name": "Argentina",
      "iso2": "AR",
      "iso3": "ARG",
      "continent": "South America"
    }
  ],
  "meta": { "page": 1, "limit": 5, "total": 195, "totalPages": 39 }
}
```

## Next steps

<CardGroup cols={2}>
  <Card title="Authentication" icon="key" href="/authentication">
    Header format, JWT vs. API keys, rotation, and tier model.
  </Card>

  <Card title="API reference" icon="code" href="/api-reference/introduction">
    Pagination, filtering, error envelope, and every endpoint.
  </Card>

  <Card title="Manage keys" icon="gauge" href="https://developer.ceibo.me">
    Revoke compromised keys, view usage, change tier.
  </Card>

  <Card title="Status" icon="heart-pulse" href="https://api.ceibo.me/v1/health">
    Health endpoint — returns 200 when the API is up.
  </Card>
</CardGroup>
