---
title: Playback progress
description: Read, write, and delete resume points for in-progress playback.
section: Your data
order: 3
---

# Playback progress

Manage resume points directly: read the active ones, write a single one, or delete one by id.

> [!REQUIRED]
> `GET /v3/sync/playback` needs the `read` scope. `POST` and `DELETE` need `write`. See [Authentication](/dev/authentication).

> [!TIP]
> Most integrations playing video want the scrobble lifecycle instead. See [Scrobbling](/dev/scrobbling) for real-time playback tracking. This page is for apps that manage resume points on their own, independently of that lifecycle.

## Reading resume points

`GET /v3/sync/playback` returns the in-progress items the user hasn't finished or abandoned.

:::tabs
```bash
curl -H "Authorization: Bearer $TOKEN" \
  "https://flicklist.tv/api/v3/sync/playback"
```
```javascript
const res = await fetch('https://flicklist.tv/api/v3/sync/playback', {
  headers: { Authorization: `Bearer ${token}` }
});
const resumePoints = await res.json();
```
```python
import requests
r = requests.get(
    "https://flicklist.tv/api/v3/sync/playback",
    headers={"Authorization": f"Bearer {token}"},
)
resume_points = r.json()
```
:::

```json
[
  {
    "media_type": "episode",
    "title": "Breaking Bad",
    "season_number": 1,
    "episode_number": 1,
    "episode_name": "Pilot",
    "progress": 42.5,
    "paused": false,
    "updated_at": "2026-05-14T02:10:33.000Z",
    "ids": { "fldb": "flt_9f2c8a1b", "slug": "breaking-bad", "tmdb": 1396, "imdb": "tt0903747", "tvdb": 81189, "anilist": null }
  }
]
```

`ids` is `null` when a resume point has no resolved catalog match. Your own progress value is still meaningful without one.

## Writing a resume point

`POST /v3/sync/playback` upserts a single resume point, without the stale-sibling cleanup that `POST /v3/scrobble/start` performs. The resolved item needs a TMDB-linked catalog row, same as scrobbling. Build `ids` per [The ids object](/dev/ids).

```json
{ "ids": { "tmdb": 1396 }, "media_type": "movie", "progress": 42.5 }
```

Add `season` and `episode` to target one episode of a show. `paused` defaults to `false` when omitted.

```json
{ "id": 4471, "progress": 42.5, "paused": false }
```

A request that resolves to an item with no TMDB link, or an API key missing `write`, is a 400. An `ids` block that doesn't resolve to any catalog item at all is a 404.

## Deleting a resume point

`DELETE /v3/sync/playback/{id}` removes one resume point by its own row id, not by media identity. Use the `id` from `GET /v3/sync/playback` or from a prior write's response. Deleting another user's resume point id 404s, the same as a nonexistent one. A successful delete returns `204` with no body.
