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

# Quickstart

> Get an API key, call the Reporting API, and read your first response.

This walks through one end-to-end call against the Reporting API. By the end you'll have a real response in your terminal and know where to go for everything else.

## Prerequisites

* A Monterey API key scoped to at least one organization. {/* TODO: Replace once a client portal mints keys — today an MFS operator provisions them on request. */}
* A way to make an HTTPS request: `curl`, an HTTP client library, or any tool that can send an `Authorization` header.

## 1. Send your API key

Every request carries the same `Authorization` header — your API key, prefixed with `Bearer`:

```http theme={null}
Authorization: Bearer mk_your_key_here
```

<Warning>
  The plaintext key is shown once when it's minted. Store it like a password — only its hash is kept server-side, and a revoked key cannot be recovered.
</Warning>

## 2. Make your first call

Cash Receipts (`/reports/crr`) returns one row per payment within a date range. Pick a small `from`/`to` window for your first call:

<CodeGroup>
  ```bash cURL theme={null}
  curl -H "Authorization: Bearer mk_your_key_here" \
    "https://api.montereyfinancial.app/reports/crr?from=2024-01-01&to=2024-01-31"
  ```

  ```python Python theme={null}
  import httpx

  resp = httpx.get(
      "https://api.montereyfinancial.app/reports/crr",
      params={"from": "2024-01-01", "to": "2024-01-31"},
      headers={"Authorization": "Bearer mk_your_key_here"},
  )
  resp.raise_for_status()
  print(resp.json()["items"][:3])
  ```

  ```typescript TypeScript theme={null}
  type CrrRow = {
    transaction_id: string;
    organization_id: string;
    account_id: string;
    type: string;
    amount_cents: number;
    effective_at: string;
    status: string | null;
  };
  type CrrPage = { items: CrrRow[]; page: { next_cursor: string | null } };

  const res = await fetch(
    "https://api.montereyfinancial.app/reports/crr?from=2024-01-01&to=2024-01-31",
    { headers: { Authorization: "Bearer mk_your_key_here" } },
  );
  const data = (await res.json()) as CrrPage;
  console.log(data.items.slice(0, 3));
  ```
</CodeGroup>

## 3. Read the response

A successful call returns `200` with an `items` array. Each row carries the organization it belongs to so multi-org keys can group their own results:

```json theme={null}
{
  "items": [
    {
      "transaction_id": "01J...",
      "organization_id": "01K...",
      "account_id": "01J...",
      "type": "payment",
      "amount_cents": 12500,
      "effective_at": "2024-01-15",
      "status": null
    }
  ]
}
```

An empty range returns `200` with `{"items": []}` — that is not the same as a 403. See [Authentication](/api-reference/authentication) for the full 401 / 403 split.

## What to read next

<Columns cols={2}>
  <Card title="Authentication" icon="key" href="/api-reference/authentication">
    Org-scoped keys, key rotation, what's logged on every request.
  </Card>

  <Card title="Conventions" icon="book" href="/api-reference/conventions">
    Dates, money in cents, the `organization_id` parameter, error shapes.
  </Card>

  <Card title="All endpoints" icon="list" href="/api-reference/introduction">
    The full API surface — reports, resource endpoints, and payment operations.
  </Card>
</Columns>
