Your data .md

Your lists

You manage a signed-in user's custom lists and their items through the /v3/sync/lists endpoints.

Creating a list#

POST /v3/sync/lists always creates a plain manual list. is_smart is false on every list you create this way, there's no way to create a rule-based smart list through /v3.

Attribute Type Description Default
name string List name, trimmed before the 1-200 character length check. Required. none
description string or null Free text shown with the list. null
privacy string or null One of private, public, unlisted. private
curl -X POST "https://flicklist.tv/api/v3/sync/lists" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Weekend Watchlist", "privacy": "unlisted"}'

What you get back#

{
  "id": 4821,
  "name": "Weekend Watchlist",
  "slug": "weekend-watchlist",
  "description": null,
  "privacy": "unlisted",
  "is_ranked": false,
  "is_smart": false,
  "tags": [],
  "item_count": 0,
  "likes": 0,
  "created_at": "2026-05-14T02:10:33.000Z",
  "updated_at": "2026-05-14T02:10:33.000Z"
}

Reading lists and items#

GET /v3/sync/lists returns metadata only, no items, for every list the caller owns. Fetch items per list with GET /v3/sync/lists/{id}/items, which returns the full list in list order (this endpoint isn't paginated, unlike the public list-items endpoint on Public lists & discovery).

Adding and removing items#

POST /v3/sync/lists/{id}/items and DELETE /v3/sync/lists/{id}/items both take a batch of up to 1000 items, resolved through the same ids object contract used everywhere else on /v3. Send an ids block per item, with media_type required whenever ids doesn't carry fldb.

An item that doesn't resolve to a catalog row lands in not_found, it isn't an error and doesn't fail the rest of the batch. On add, an item already on the list counts as existing, not not_found, so re-running a sync never reads as a failure.

curl -X POST "https://flicklist.tv/api/v3/sync/lists/4821/items" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"items": [{"ids": {"tmdb": 550}, "media_type": "movie"}]}'
{
  "added": 1,
  "existing": 0,
  "not_found": []
}

DELETE on the same path matches items by media identity (plus season and episode for episode-level entries), not by an internal list-item id, and returns removed plus not_found in the same shape.

Deleting a list#

DELETE /v3/sync/lists/{id} cascades to the list's items. A list you don't own 404s the same as a list that doesn't exist, so ownership is never leaked.