---
title: Favorites
description: Read, add, and remove favorites for an account.
section: Your data
order: 6
---

# Favorites

Read, add, and remove favorites for the signed-in user.

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

## Reading favorites

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

```json
[
  {
    "title": "The Shawshank Redemption",
    "year": 1994,
    "media_type": "movie",
    "favorited_at": "2026-05-14T02:10:33.000Z",
    "ids": { "fldb": "flm_7d3a95e0", "slug": "the-shawshank-redemption", "tmdb": 278, "imdb": "tt0111161", "tvdb": null, "anilist": null }
  }
]
```

## Adding favorites

`POST /v3/sync/favorites` adds up to 1000 items in one batch. Build each item's `ids` block per [The ids object](/dev/ids).

```json
{ "items": [ { "ids": { "tmdb": 278 }, "media_type": "movie" } ] }
```

Upsert semantics apply: an item already favorited still counts as `added`, since the call still succeeded idempotently.

```json
{ "added": 1, "not_found": [] }
```

## Removing favorites

`DELETE /v3/sync/favorites` takes the same body shape and removes the matching entries.

```json
{ "removed": 1, "not_found": [] }
```

> [!WARNING]
> Batches are capped at 1000 items per request. An item whose `ids` don't resolve lands in `not_found` rather than failing the whole batch.
