Why SureTake?Pricing

What's in the recording.ready event

Every delivery is a JSON body shaped like this:

{
  "event": "recording.ready",
  "event_id": "b1f2...",          // unique per delivery, use to de-duplicate retries
  "version": "1",
  "timestamp": "2026-07-05T14:41:00Z",  // when the webhook fired
  "account_id": "...",
  "session_url": "https://app.suretake.io/share/...",  // shareable preview/download page
  "show":    { "id": "...", "name": "My Podcast" },
  "session": {
    "id": "...",
    "name": "Episode 12",
    "date": "2026-07-05",
    "started_at": "2026-07-05T14:03:00Z",  // full timestamp, for sorting
    "notes": "00:12:30 New topic\n00:41:05 Ad read",  // notes + markers, as text
    "notes_url": "https://app.suretake.io/api/share/.../notes"  // same notes as a .txt download
  },
  "client":  { "email": "guest@example.com", "name": "Jane Guest" },
  "track_count": 2,             // number of participant tracks in "tracks" below
  "tracks": [                   // ONLY individual participant recordings, no backup here
    {
      "type": "browser",       // an individual participant's local recording
      "recording_id": "...",
      "participant_id": "...",
      "name": "Host",
      "file_url": "https://.../host.mp4",
      "synced_url": null,       // present only if the participant joined late (time-aligned copy)
      "duration_seconds": 3120
    },
    {
      "type": "browser",
      "recording_id": "...",
      "participant_id": "...",
      "name": "Jane Guest",
      "file_url": "https://.../guest.mp4",
      "synced_url": null,
      "duration_seconds": 3115
    }
  ],
  // media_urls: flat "just grab these" list of participant files (same order as "tracks").
  // A no-code shortcut: map straight into a multi-file field, no code step. Already the
  // right file per track: the synced version when a track needed aligning, else file_url.
  "media_urls": [ "https://.../host.mp4", "https://.../guest.mp4" ],
  // The server-side recording of everyone together, kept OUT of "tracks" on purpose so
  // you can import just the participant recordings. Use it as a safety net if you want it.
  "combined_backup_url": "https://.../combined.mp4",
  "transcript": { "url": "https://.../transcript.docx" }  // or null (see the transcript article)
}

A few notes: tracks holds only the individual participant recordings. It's an array whose length varies with the number of participants, so always iterate it rather than assuming a fixed count.

The combined backup (the single server-side recording of everyone together) is deliberately not in tracks; it's provided separately as combined_backup_url, so you can import just the participant files and treat the backup as an optional safety net.

Still stuck? Email support.