Watchlog
wlog/1.0 application/wlog+json
A neutral, durable format to take your shows and movies wherever you want.
Your watches, your ratings, your reviews: they are your data. Watchlog is a simple, readable, documented file that lets you take them out of one service and replay them in another, losing nothing on the way. We designed it to be open on purpose: any tracking app can write and read it.
What makes it smart
Ids everyone understands
Every work carries its external ids (TMDB, IMDb, TheTVDB, plus MyAnimeList / AniList / Kitsu for anime), never an internal number. So any service can resolve the right show or movie.
A real log, even a fuzzy one
Watches are a dated list. A rewatch is simply one more view; "I watched it but I don't remember when" is a null date. Nothing is invented, nothing is lost.
Ratings that keep their scale
A rating carries its value AND its scale: a 4 out of 5 and an 8 out of 10 coexist without distortion. Each consumer normalizes its own way.
Extensible without breaking
Service-specific richness (emotions, per-episode ratings…) lives in an `extensions` space under that service's name. Another reader politely ignores it: the core stays universal.
Simple, cleanly dated
Plain JSON, versioned at the top of the file, with ISO 8601 (UTC) dates. No exotic tooling, it opens in any editor.
What it looks like
A header object (version, generator, profile), a list of works, a list of lists. Here is one item boiled down to the essentials:
{
"format": "wlog/1.0",
"generator": { "name": "Seenr", "url": "https://seenr.app" },
"profile": { "handle": "kevin", "locale": "fr" },
"items": [
{
"type": "show",
"ids": { "tmdb": 1429, "imdb": "tt1355642", "mal": 5114, "anilist": 5114 },
"title": "Fullmetal Alchemist: Brotherhood",
"year": 2009,
"status": "completed",
"favorite": true,
"tags": ["anime", "shonen"],
"rating": { "value": 10, "scale": 10, "rated_at": "2021-02-01T20:00:00Z" },
"watches": [
{ "season": 1, "episode": 1, "watched_at": "2021-01-05T21:00:00Z" }
],
"season_ratings": [ { "season": 1, "value": 9, "scale": 10 } ],
"episode_ratings": [ { "season": 1, "episode": 5, "value": 10, "scale": 10 } ],
"extensions": { "seenr": { "emotions": ["😭"] } }
}
],
"lists": []
}
The spec
- Version
- wlog/1.0
- Media type
- application/wlog+json
For services that want to adopt it
Watchlog is free to use. Everything you need to implement it is here:
- The JSON schema, to validate a file automatically.
- A complete example, annotated by the schema.
- Seenr is a reference implementation: it exports AND imports Watchlog.
Try it right now
Seenr speaks Watchlog fluently. Grab your library as a file, or replay one here.
Watchlog is an open format, published to be reused. The media type is not yet registered with IANA; the version is authoritative.