Overview
The ReelRifter Public API gives third-party apps read access to your watchlist and watch history, plus a write endpoint for scrobbling watch events from browser extensions or self-hosted automations.
All requests are authenticated with a Personal Access Token you mint yourself. There's no OAuth flow and no client registration โ generate a token, copy it once, and use it as a bearer header.
> Just want auto-scrobbling on Netflix / Disney+ / Prime Video / Max? You don't need to build anything. Install the official browser extension from /extension and paste a token โ it does the rest.
Generating a Token
1. Go to Settings โ Integrations โ API Tokens. 2. Enter a label (e.g. Home Assistant, Netflix Scrobbler) and click Create. 3. Copy the raw token โ it starts with rr_pat_. We only store the hash, so this is the only time it's shown. 4. Use it in the Authorization header on every request:
Authorization: Bearer rr_pat_xxxxxxxxxxxxxxxxxxxx
You can hold up to 20 active tokens. Revoke any token from the same screen โ anything using it stops working immediately.
Base URL
https://reelrifter.com/api/public/v1
Endpoints
`GET /me`
Returns the identity of the token's owner. Useful for verifying a token works before doing anything else.
`GET /watchlist`
List items from your watchlist. Supports filters and cursor-based pagination.
Query parameters:
- โข
statusโ one ofWANT_TO_WATCH,WATCHING,FINISHED,DROPPED,ON_HOLD - โข
mediaTypeโTVorMOVIE - โข
limitโ 1-200 (default 50) - โข
cursorโnextCursorvalue from a previous response
`GET /history`
Returns a unified timeline of finished watchlist items and individual watched episodes, sorted most-recent first. Supports limit (1-200).
`POST /scrobble`
Log a watch event. Identical to how Plex/Jellyfin webhooks update your watchlist โ the server matches the title against TMDB, then advances your current episode (TV) or marks the title finished (movie).
Body fields:
- โข
title(required) โ show name or movie title - โข
mediaTypeโ optional, inferred from season/episode if omitted - โข
season,episodeโ numbers; presence implies TV - โข
yearโ disambiguates reboots - โข
actionโwatched(default) orwatchingfor play-start events - โข
sourceโ free-form label for your own debugging
If TMDB can't match the title, the response is { "matched": false } with status 200 (rather than 4xx) so clients don't waste retries on titles that will never match.
Rate Limits
There are no published rate limits yet. Please be reasonable โ under 60 requests per minute per token is the soft ceiling. We may add hard limits without notice if abuse appears.
Examples
curl
bash curl https://reelrifter.com/api/public/v1/watchlist?status=WATCHING \ -H "Authorization: Bearer rr_pat_xxxxxxxxxxxx"
Node / fetch
js const res = await fetch("https://reelrifter.com/api/public/v1/scrobble", { method: "POST", headers: { "Authorization": Bearer ${process.env.REELRIFTER_TOKEN}, "Content-Type": "application/json", }, body: JSON.stringify({ title: "Severance", season: 2, episode: 4 }), });
Security
- โขTreat the raw token like a password โ anyone with it can read your watchlist and write scrobble events.
- โขTokens are stored as SHA-256 hashes; we can't recover a lost token, only revoke + reissue.
- โขRevoke tokens you no longer use. The token list shows last-used timestamps so you can spot unused ones.