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

# Quickstart

> Get a key and make your first Croma API call in three steps.

<Steps>
  <Step title="Get an API key">
    Croma keys are issued per **organization** at
    [platform.usecroma.com](https://platform.usecroma.com). A key looks like
    `croma_live_…` (or `croma_test_…` outside production). Treat it as a
    secret. It carries your org's full API access.

    <Note>
      Personal keys are rejected. The API only accepts organization-scoped
      keys. See [Authentication](/authentication) for details.
    </Note>
  </Step>

  <Step title="Call an endpoint">
    Every data endpoint is a versioned `POST` path (for example
    `/co/rama-judicial/cases-by-entity/v1`) on `https://api.croma.run`. It
    takes a small JSON body and the key in an `Authorization: Bearer` header.

    <CodeGroup>
      ```bash cURL theme={"dark"}
      curl https://api.croma.run/co/rama-judicial/cases-by-entity/v1 \
        -H "Authorization: Bearer $CROMA_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{ "name": "PEDRO CIFUENTES", "entity_type": "natural", "page": 1 }'
      ```

      ```ts TypeScript theme={"dark"}
      const res = await fetch("https://api.croma.run/co/rama-judicial/cases-by-entity/v1", {
        method: "POST",
        headers: {
          Authorization: `Bearer ${process.env.CROMA_API_KEY}`,
          "Content-Type": "application/json",
        },
        body: JSON.stringify({ name: "PEDRO CIFUENTES", entity_type: "natural", page: 1 }),
      });

      const { data } = await res.json();
      ```

      ```python Python theme={"dark"}
      import os, requests

      res = requests.post(
          "https://api.croma.run/co/rama-judicial/cases-by-entity/v1",
          headers={"Authorization": f"Bearer {os.environ['CROMA_API_KEY']}"},
          json={"name": "PEDRO CIFUENTES", "entity_type": "natural", "page": 1},
      )
      body = res.json()
      ```
    </CodeGroup>
  </Step>

  <Step title="Read the response">
    Successful responses wrap the payload under `data`:

    ```json theme={"dark"}
    {
      "data": { }
    }
    ```

    Rate-limit state and a request id come back as response headers; there's
    no `meta` object in the body:

    ```
    X-RateLimit-Limit: 100
    X-RateLimit-Remaining: 99
    X-RateLimit-Reset: 2026-05-23T18:00:00.000Z
    X-Request-Id: req_8f3c…
    ```

    Longer lookups resolve as [async jobs](/async-jobs): the same request can
    wait inline, poll, or call you back when done. Failures share one
    [error shape](/errors) across every endpoint.
  </Step>
</Steps>

## Next steps

<CardGroup cols={2}>
  <Card title="MCP server" icon="plug" href="/mcp-server">
    Connect any MCP client to every Croma tool with one URL.
  </Card>

  <Card title="API Reference" icon="code" href="/api-reference/overview">
    Full endpoint reference with an interactive playground.
  </Card>
</CardGroup>
