Letterboxd hub

Letterboxd Watched Films API

A member's watched films, newest first, with their rating and like on each row.

GET /v1/letterboxd/users/{username}/films

1 credit Failed requests are free A not-found answer is still charged

About this endpoint

GET /v1/letterboxd/users/{username}/films returns data.user, data.totalFilms, and data.films. Each row has a film reference (slug, id, shortCode, shortUrl, title, year), the member's rating, and liked. Rows are ordered most recently watched first. One call returns the first 72; there is no page or cursor parameter and no next page. totalFilms is the member's all-time count, so it can be larger than the number of rows returned. An empty list is a valid found response, including for a member who has watched nothing.

Letterboxd Watched Films API FAQ

How many films does one call return?

72. The route takes no page or cursor, so a call always returns the 72 most recently watched. totalFilms is the member's full count.

How do I tell a watched film from a watchlist film?

Watched rows carry the member's rating and liked flag. A watchlist row is a film reference only. The two routes are /users/{username}/films and /users/{username}/watchlist.

Can totalFilms and the row count differ?

Yes. totalFilms is the all-time count, while films holds the first 72 only. That is expected on any member with more than 72 watched films.

How many credits does a lookup cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth.

What does lookupStatus mean here?

found means the member exists, even if films is empty. not_found means the username does not exist, and data.user is null.