Skip to main content
Most teams want every Parlay call in their own warehouse or CRM. The reliable way is two steps: one initial load, then a change feed you read on a schedule.
Do not sync by asking for “calls recorded since yesterday”. Calls can finish processing hours after they were recorded, and scores or outcomes can change later. The change feed catches all of that. A date window does not.

The change feed

GET /calls/changes returns every change to your organization’s calls in the order it happened.
Events carry ids, not call data, and one event can stand for several changes. So for every event except call.deleted, re-read both the call and its transcript. A transcript can arrive before the call finishes (you’ll only see call.completed), and an edited or removed transcript arrives as call.updated. Re-reading both is simple and always ends with your copy matching Parlay.

Step 1: initial load

Page through GET /calls (100 per page) and fetch GET /calls/{call_id}/transcript for each call you want text for. Your full history back to when your organization joined Parlay is available. If you load with GET /calls, then on your first feed run call GET /calls/changes with no cursor. The feed starts from the beginning of its history and replays events you may already have. Applying them again is harmless, and it guarantees nothing that changed during your load is missed.

Step 2: read the feed on a schedule

1

Load your saved checkpoint

Use the checkpoint from your last successful run. On the first run, send no cursor.
2

Read every page

Call GET /calls/changes?cursor=<checkpoint>&limit=100. Repeat with the returned checkpoint while has_more is true.
3

Apply each event

For call.deleted, delete your copy. For anything else, re-read the call and its transcript and overwrite your copy. If either returns 404, delete it locally. Applying the same event twice is harmless.
4

Save the checkpoint last

Only after your database commit succeeds. If the run fails, the next run repeats from the old checkpoint and nothing is lost.

Good to know

  • Run it as often as you like. Hourly or every 15 minutes works well. An empty run costs one request.
  • A checkpoint belongs to your organization, not to one key. After you roll or replace a key, keep using the same checkpoint with the new key. (Ordinary list cursors, like next_cursor on /calls, do belong to the key that made them.)
  • A 404 on a call means remove it. Calls can become invisible to your key, for example when they are deleted.