# Quickstart

> Make your first authenticated request and read a meeting's notes.

Five minutes, three calls: get a key, see what you have, read one recording.

### Get an API key

Keys are issued from **Dashboard → Developers**. Choose **read only** for anything that just reads — you can issue a second, fuller key later without disturbing the first.

A key is shown **once**, at creation. Store it in your secret manager before closing the dialog; we keep only a digest and cannot show it again.

```bash
export NABRAH_API_KEY="nt_..."
```

### Check the key works

`/me` says which account the key acts as, whether it reaches an organization, and what it is allowed to do. It is the cheapest way to tell a live key from a typo.

```bash
curl https://api-notetaker.nabrah.ai/ext/v1/me \
  -H "Authorization: Bearer $NABRAH_API_KEY"
```

### Read a recording

List what has been recorded, then ask for one by its `runId`.

```bash
curl "https://api-notetaker.nabrah.ai/ext/v1/recordings?limit=5" \
  -H "Authorization: Bearer $NABRAH_API_KEY"
```

## A complete first request

Returns the account's recordings, newest first — from calendar meetings, manual joins and uploads alike.

```bash cURL
curl "https://api-notetaker.nabrah.ai/ext/v1/recordings?limit=2" \
  -H "Authorization: Bearer $NABRAH_API_KEY"
```
```ts Node
const response = await fetch(
  "https://api-notetaker.nabrah.ai/ext/v1/recordings?limit=2",
  { headers: { Authorization: `Bearer ${process.env.NABRAH_API_KEY}` } },
);

const { data } = await response.json();
console.log(data.rows, `${data.total} in total`);
```
```python Python
import os, requests

payload = requests.get(
    "https://api-notetaker.nabrah.ai/ext/v1/recordings",
    params={"limit": 2},
    headers={"Authorization": f"Bearer {os.environ['NABRAH_API_KEY']}"},
).json()["data"]
```
```json Response 200
{
  "data": {
    "rows": [
      {
        "runId": "9f8c2e10-4b71-4d2a-8e93-1c7f5a604b18",
        "reference": "NB-3F2A-9C1D-7E5B",
        "meetingId": "3f2a9c1d-7e5b-4a80-9c11-2d90b8e4c177",
        "title": "Weekly product sync",
        "startsAt": "2026-08-12T09:00:00.000Z",
        "platform": "meet",
        "origin": "calendar",
        "state": "ready",
        "recordingSeconds": 2740,
        "hasNotes": true
      }
    ],
    "total": 128,
    "limit": 2,
    "offset": 0
  }
}
```
```json Response 401
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Missing or invalid API key"
  }
}
```

`hasNotes` is what tells you the summary is ready. Then:

```bash
curl https://api-notetaker.nabrah.ai/ext/v1/recordings/$RUN_ID \
  -H "Authorization: Bearer $NABRAH_API_KEY"
```

The transcript is left out of that response by default — it dwarfs everything else and most callers never read it. Add `?include=transcript`, or page through `/recordings/{runId}/transcript`.

**Tip: Two identifiers, two jobs**

`runId` is what you pass back to the API. `reference` — `NB-3F2A-9C1D-7E5B` — is what a person quotes to support. Use the first in code and show the second to humans.

## Next

- {key} [Authentication](/docs/api/authentication) — Access levels, what a key reaches, and rotation.
- {rocket} [Bots](/docs/api/bots) — Sending the notetaker into a call that is happening now.
- {webhook} [Webhooks](/docs/api/webhooks) — Stop polling; get told when a meeting is ready.
- {terminal} [Errors](/docs/api/errors) — Every code the API can return.
