> ## 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 an API key, make your first authenticated request and read the response envelope: your first Croma API call in three steps, with copy-paste curl examples.

<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. See
    [Authentication](/authentication) for details.
  </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": "RAPPI", "entity_type": "juridical", "active_only": true }'
      ```

      ```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: "RAPPI", entity_type: "juridical", active_only: true }),
      });

      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": "RAPPI", "entity_type": "juridical", "active_only": True},
      )
      body = res.json()
      ```
    </CodeGroup>
  </Step>

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

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

    Your plan's credit balance and a request id come back as response headers;
    there's no `meta` object in the body. The limit is the credits your plan
    grants each month, remaining is what is left after this call (a live lookup
    spends 10), reset is when the balance refills:

    ```http theme={"dark"}
    X-RateLimit-Limit: 5000
    X-RateLimit-Remaining: 4990
    X-RateLimit-Reset: 2026-10-01T00: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>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.