---
title: "List a recording's playable batches"
method: GET
path: "/v1/recordings/{recordingId}/playback"
tags: ["Recordings"]
---

# List a recording's playable batches

`GET /v1/recordings/{recordingId}/playback`

## Request

- Base URL: `https://api.ironfang.com/analytics`
- URL: `https://api.ironfang.com/analytics/v1/recordings/{recordingId}/playback`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

The committed batches that can be played, in order: in each epoch, those before its first gap. Fetch each from the chunk endpoint. A live viewer passes `after`, the last batch it has, and gets only the batches since. `now` and `live` let a live viewer say how far behind the visitor it is (see LivePlayback). Needs analytics.sessions.read.

## Query parameters

- `after` string

## Response `200`

The batches

- object
  - `chunks` PlaybackChunk[], required
    - `client_wall_time` string, date-time, nullable, required: The browser's clock. From SDK 0.8.0 every change the page recorded up to it is in this batch or an earlier one; before, it was when the batch was compressed, a moment after it was cut.
    - `compressed_bytes` integer, required
    - `contains_full_snapshot` boolean, required
    - `encoding` 'gzip' | 'identity', required
    - `epoch_index` integer, required
    - `event_count` integer, required
    - `expanded_bytes` integer, required
    - `monotonic_end_ms` number, required
    - `monotonic_start_ms` number, required
    - `received_at` string, date-time, required: When the collector received the batch, on its clock.
    - `sequence` integer, required
  - `live` LivePlayback, required: What a live viewer needs beside the batches to say how far behind the visitor it is (plans/analytics-live-delay.md). clock and progress come from SDK 0.8.0 and later, and are null before the recorder has sent them.
    - `clock` object, nullable, required: The collector's clock minus the visitor's, within error_ms either way, from the round trip that bounded it most tightly.
      - `error_ms` integer, required
      - `offset_ms` integer, required
    - `ended` boolean, required: The recording has ended: nothing more will arrive.
    - `last_seen_at` string, date-time, required: When the visitor's page was last heard from, on the collector's clock.
    - `progress` object, nullable, required: The recorder's newest progress report: every change up to through (the visitor's clock) is in a batch up to (epoch_index, sequence). watched says it was uploading at live pace. A quiet page sends one every two seconds while watched.
      - `epoch_index` integer, required
      - `received_at` string, date-time, required: The collector's clock.
      - `sequence` integer, required
      - `through` string, date-time, required
      - `watched` boolean, required
    - `sdk_version` string, nullable, required: The SDK that recorded it; null before its first batch. A recorder before 0.8.0 reports neither clock nor progress.
  - `now` string, date-time, required: This server's clock when it took the request. A viewer bounds its own clock against it by the round trip.

## Other responses

- `400`: An unknown, repeated or malformed query parameter (`invalid_query`).
- `401`: No credential, an invalid one, an expired partner integration key, or a delegated token where none is accepted (`unauthorized`, `invalid_api_key`, `api_key_expired`, `delegated_not_allowed`).
- `403`: The credential lacks the permission or scope, names another organisation, or belongs to a partner integration that is not active (`forbidden`, `insufficient_scope`, `integration_inactive`).
- `404`: No such object in this organisation (`not_found`).

---

[API](https://skmtc.dev/ironfang/apis/ironfang-analytics-api.md) · [All operations](https://skmtc.dev/ironfang/apis/ironfang-analytics-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ironfang/apis/ironfang-analytics-api/revisions/08197080c3d7?raw)
