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

# Quickstart

> From API key to a full transcript ingest loop in five minutes

## 1. Get an API key

A workspace admin can mint a key in the Parable app under
**Settings → API**. The full token — `parable_` followed by 32 random
characters — is shown exactly once at creation; Parable stores only a hash.

Keys are workspace-scoped and read **all** processed captures in the
workspace. Treat them like passwords.

## 2. Pull the first page

```bash theme={null}
curl -H "Authorization: Bearer parable_..." \
  "https://api.parable.so/api/v1/captures?limit=2"
```

```json theme={null}
{
  "captures": [{ "id": "9f2c...", "title": "Device demo", "segments": [...] }],
  "pageInfo": {
    "endCursor": "djE6NDI",
    "hasNextPage": true
  }
}
```

Each list item is a complete [transcript document](/transcript-document) —
one request is a complete ingest step, no follow-up fetches needed.

## 3. Run the cursor loop

Treat cursors as opaque strings: store and echo them, never interpret them.

```python theme={null}
cursor = load_stored_cursor()          # None on first run
while True:
    url = "https://api.parable.so/api/v1/captures?limit=100"
    if cursor:
        url += f"&after={cursor}"
    page = get(url)                    # with the Authorization header
    ingest(page["captures"])           # append-only; no upserts needed
    if page["pageInfo"]["endCursor"]:
        cursor = page["pageInfo"]["endCursor"]
        store_cursor(cursor)           # persist after each page
    if not page["pageInfo"]["hasNextPage"]:
        break
```

Run that on a cron (for example every minute). The first un-cursored run
pages through full history; after that each run picks up only what's new.

<Note>
  The stream never emits a capture behind a cursor you have already advanced
  past, so this loop cannot skip data. `endCursor` is `null` when a page is
  empty — keep your previous cursor.
</Note>

## 4. Optionally, add a webhook

If you'd rather be pushed to than poll, Parable can POST each finished
transcript to your endpoint — see [Webhooks](/webhooks). The pull API
remains your recovery path: anything that exhausts webhook retries is still
in the stream.
