Subject: Feature request — a "significant change" signal so clients don't waste API calls discovering cosmetic updates
TL;DR: updated_at and /shows/updates fire on any change, including cosmetic ones (votes, rating, translations). Clients can't tell what changed without spending an API call to find out — usually that nothing relevant did. On larger libraries this burns through the 1000-req/5-min limit and stalls user syncs. Please add a server-side way to detect significant changes only (new/removed episodes, airdate changes incl. TBA→real, title changes, status) — ideally a ?changes= filter on /shows/updates, or a separate content_updated_at timestamp. Counts alone aren't enough (placeholder-date→real-date changes don't move the count).
Hi Trakt team,
I maintain a TV tracking app (Television Time) that syncs user libraries against Trakt. I've hit a structural problem with change detection that I think affects any client trying to stay in sync efficiently, and I'd like to propose a way forward.
The problem
To keep a user's library current I need to know which shows have meaningfully changed since their last sync. The signals available are updated_at (on show/season objects) and GET /shows/updates/id/{since}. Both fire on any change to the object — including ones with zero relevance to a tracking client: votes, rating, comment_count, translations, images, and similar. Trakt tells me "this show changed" but not what changed, so my only option is to spend an API call (often a full seasons+episodes fetch) to discover that the only thing that moved was the vote count.
This doesn't scale with library size. A recent real example from my own account:
GET /shows/updates/id/{since} over a ~8-day window reported 28,146 shows updated.
- My library contained 270 intersecting shows; that I then had to verify
- Because most of those "updates" were cosmetic, the majority of the resulting season/episode calls returned data identical to what I already had.
- I hit the 1000 requests / 5 minutes rate limit mid-sync and got
Retry-After: 300. For a user, sync stalls 5+ minutes; on larger libraries it can fail to complete in a session at all.
The rate limit is doing its job — but a large fraction of the calls it throttles are calls Trakt effectively required me to make to rule out irrelevant changes.
What counts as "significant" (and why counts alone aren't enough)
The hard part is that significance isn't just "episode count changed." A very common pattern: an upcoming episode is created with a placeholder/TBA airdate, then later its real airdate and title are filled in. Throughout that, aired_episodes and episode_count stay identical — but the change absolutely matters to my users, who are waiting to see when the episode airs.
So a useful definition of significant would include changes to:
- episode/season added or removed (counts)
- episode airdate (including TBA → real date)
- episode or season title
- show status (e.g. returning → ended/canceled)
- aired/unaired transitions
…and would exclude cosmetic fields: votes, rating, comment_count, translations, images, overview tweaks.
What would fix it
Both of these put classification on the server, which is the only side that can do it without forcing a fetch:
-
A ?changes= filter on the updates endpoint — e.g. GET /shows/updates/id/{since}?changes=episodes,airdates,titles,status, returning only shows where a change in one of those categories occurred. Most direct fix: it lets the client ask exactly the question it has.
-
A separate content_updated_at (or significant_updated_at) timestamp on objects that only bumps for the significant categories above, leaving the existing updated_at as the "anything changed" field. Clients diff against whichever one matters to them. A per-object content hash/ETag covering only the significant fields would serve the same purpose.
Either would dramatically cut the calls clients make against your API — a win for your infrastructure as much as for my users.
Alternatives I've considered and why they fall short
- Comparing
aired_episodes/episode_count myself: I'm already doing this where the data's in hand (list/watched responses). But it can't catch the placeholder-date→real-date or title-correction cases above, where counts don't change, so it's a partial filter at best — not a substitute for a real significance signal.
- Returning counts in the
/shows/updates response: would help the common votes-only case, but has the same blind spot — it can't represent an airdate or title change, so I'd still miss real updates.
- Backing off to less frequent syncs: degrades freshness and doesn't reduce wasted calls, just spreads them out.
Happy to share more detail or real request logs if useful. Thanks for maintaining the API — this is the one piece that would let clients be both fast and gentle on your servers.
Subject: Feature request — a "significant change" signal so clients don't waste API calls discovering cosmetic updates
TL;DR:
updated_atand/shows/updatesfire on any change, including cosmetic ones (votes, rating, translations). Clients can't tell what changed without spending an API call to find out — usually that nothing relevant did. On larger libraries this burns through the 1000-req/5-min limit and stalls user syncs. Please add a server-side way to detect significant changes only (new/removed episodes, airdate changes incl. TBA→real, title changes, status) — ideally a?changes=filter on/shows/updates, or a separatecontent_updated_attimestamp. Counts alone aren't enough (placeholder-date→real-date changes don't move the count).Hi Trakt team,
I maintain a TV tracking app (Television Time) that syncs user libraries against Trakt. I've hit a structural problem with change detection that I think affects any client trying to stay in sync efficiently, and I'd like to propose a way forward.
The problem
To keep a user's library current I need to know which shows have meaningfully changed since their last sync. The signals available are
updated_at(on show/season objects) andGET /shows/updates/id/{since}. Both fire on any change to the object — including ones with zero relevance to a tracking client:votes,rating,comment_count,translations, images, and similar. Trakt tells me "this show changed" but not what changed, so my only option is to spend an API call (often a full seasons+episodes fetch) to discover that the only thing that moved was the vote count.This doesn't scale with library size. A recent real example from my own account:
GET /shows/updates/id/{since}over a ~8-day window reported 28,146 shows updated.Retry-After: 300. For a user, sync stalls 5+ minutes; on larger libraries it can fail to complete in a session at all.The rate limit is doing its job — but a large fraction of the calls it throttles are calls Trakt effectively required me to make to rule out irrelevant changes.
What counts as "significant" (and why counts alone aren't enough)
The hard part is that significance isn't just "episode count changed." A very common pattern: an upcoming episode is created with a placeholder/TBA airdate, then later its real airdate and title are filled in. Throughout that,
aired_episodesandepisode_countstay identical — but the change absolutely matters to my users, who are waiting to see when the episode airs.So a useful definition of significant would include changes to:
…and would exclude cosmetic fields:
votes,rating,comment_count,translations, images, overview tweaks.What would fix it
Both of these put classification on the server, which is the only side that can do it without forcing a fetch:
A
?changes=filter on the updates endpoint — e.g.GET /shows/updates/id/{since}?changes=episodes,airdates,titles,status, returning only shows where a change in one of those categories occurred. Most direct fix: it lets the client ask exactly the question it has.A separate
content_updated_at(orsignificant_updated_at) timestamp on objects that only bumps for the significant categories above, leaving the existingupdated_atas the "anything changed" field. Clients diff against whichever one matters to them. A per-object content hash/ETag covering only the significant fields would serve the same purpose.Either would dramatically cut the calls clients make against your API — a win for your infrastructure as much as for my users.
Alternatives I've considered and why they fall short
aired_episodes/episode_countmyself: I'm already doing this where the data's in hand (list/watched responses). But it can't catch the placeholder-date→real-date or title-correction cases above, where counts don't change, so it's a partial filter at best — not a substitute for a real significance signal./shows/updatesresponse: would help the common votes-only case, but has the same blind spot — it can't represent an airdate or title change, so I'd still miss real updates.Happy to share more detail or real request logs if useful. Thanks for maintaining the API — this is the one piece that would let clients be both fast and gentle on your servers.