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

# Quickstart

> Create a key, check it, and pull your first calls and transcript.

You need an **owner** or **admin** account in your Parlay organization to create a key. Everything after that runs from your server.

> **[Open Settings → API Keys](https://app.goparlay.io/settings/api-keys)**
>
> Opens the Parlay app. Sign in with your normal account if asked, and you come straight back to your keys.

**1. Create a key**

Open [**Settings → API Keys**](https://app.goparlay.io/settings/api-keys) in the Parlay web app. If you aren't signed in, sign in with your normal Parlay account and you'll come straight back. Click **Create key**, name it after the system that will use it (for example `warehouse-sync`), and choose its permissions. For a call sync, pick `calls:read`, `transcripts:read` and `reps:read`.

The full key is shown **once**. Store it in your secret manager right away.

```
pk_org_live_8kq2N4xZ0pLm3Vb7_…
```

**2. Check the key**

`GET /me` returns the key's organization, permissions and expiry.

```bash theme={null}
export PARLAY_KEY="pk_org_live_..."

curl https://app.goparlay.io/api/v1/me \
  -H "Authorization: Bearer $PARLAY_KEY"
```

```json theme={null}
{
  "data": {
    "id": "2c1d…",
    "organization_id": "a91f…",
    "name": "warehouse-sync",
    "public_id": "8kq2N4xZ0pLm3Vb7",
    "permissions": ["calls:read", "transcripts:read", "reps:read"],
    "expires_at": "2027-01-21T17:02:44Z",
    "last_used_at": "2026-10-23T17:05:10Z"
  }
}
```

**3. List recent calls**

```bash theme={null}
curl "https://app.goparlay.io/api/v1/calls?since=2026-10-01T00:00:00Z&limit=25" \
  -H "Authorization: Bearer $PARLAY_KEY"
```

Each call includes scores, summary, action plan and pillar feedback. When `has_more` is `true`, pass `next_cursor` back as `cursor` with the same filters to get the next page.

**4. Read a transcript**

```bash theme={null}
curl https://app.goparlay.io/api/v1/calls/CALL_ID/transcript \
  -H "Authorization: Bearer $PARLAY_KEY"
```

Long transcripts come back in pages of text. Follow `next_cursor` until `has_more` is `false`, then join the `text` values in order. See [transcripts](https://developers.goparlay.io/app-api/guides/transcripts.md).

## Full example

```javascript Node.js theme={null}
const BASE = "https://app.goparlay.io/api/v1";
const headers = { Authorization: `Bearer ${process.env.PARLAY_KEY}` };

async function get(path, params = {}) {
  const url = new URL(BASE + path);
  for (const [k, v] of Object.entries(params)) if (v != null) url.searchParams.set(k, v);
  const res = await fetch(url, { headers });
  const body = await res.json();
  if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message} (${body.error.request_id})`);
  return body;
}

async function* allCalls(since) {
  let cursor;
  do {
    const page = await get("/calls", { since, limit: 100, cursor });
    yield* page.data;
    cursor = page.has_more ? page.next_cursor : undefined;
  } while (cursor);
}

for await (const call of allCalls("2026-10-01T00:00:00Z")) {
  console.log(call.recorded_at, call.rep.first_name, call.scores.overall, call.title);
}
```

```python Python theme={null}
import os, requests

BASE = "https://app.goparlay.io/api/v1"
session = requests.Session()
session.headers["Authorization"] = f"Bearer {os.environ['PARLAY_KEY']}"

def get(path, **params):
    res = session.get(BASE + path, params={k: v for k, v in params.items() if v is not None})
    body = res.json()
    if not res.ok:
        err = body["error"]
        raise RuntimeError(f"{err['code']}: {err['message']} ({err['request_id']})")
    return body

def all_calls(since):
    cursor = None
    while True:
        page = get("/calls", since=since, limit=100, cursor=cursor)
        yield from page["data"]
        if not page["has_more"]:
            break
        cursor = page["next_cursor"]

for call in all_calls("2026-10-01T00:00:00Z"):
    print(call["recorded_at"], call["rep"]["first_name"], call["scores"]["overall"], call["title"])
```

## Next steps

> **[Sync calls daily](https://developers.goparlay.io/app-api/guides/daily-sync.md)**
>
> Use the change feed so you never miss a late or edited call.

> **[Transcripts](https://developers.goparlay.io/app-api/guides/transcripts.md)**
>
> Full text, timed segments and search.


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