‼️ Upcoming API Changes: Watched Endpoints Pagination & Extended Defaults #775
Replies: 17 comments 18 replies
-
|
Hello, Thanks for the heads-up! I have some questions :) 1 Episode trakt idPrevious parameter value returned only season-number+episode-number and not the episode-id directly when fetching progress. It would ease the transition if traktid was returned in the meantime so. 2 Episodes typeAlso, what will be returned when using the new "episodes" type ? 3 Shape of the replyCan you confirm that the body of the answer will stay unchanged ? 4 Number of playsMy app currently uses the number of plays and display it to the user. |
Beta Was this translation helpful? Give feedback.
-
Here are also the use cases in SeriesGuide to maybe help make decisions on what values to include in the
Thanks for your help! |
Beta Was this translation helpful? Give feedback.
-
I'd also like to give my feedback as a developer who has maintained Trakt integration for the last 5 years. I have been following all the changes you have made recently. All of this should have been rolled out as a new version of API with a 6-12 months deprecation notice for the current version of the API. Due to recent changes paired with recent downtimes, inconsistent http cache behavior, longer loading times, connection timeouts, many users have already chosen to turn off Trakt sync completely or move to a different service for sync or just use the in built sync Syncler provides. Do what you will with that information. |
Beta Was this translation helpful? Give feedback.
-
|
I'm afraid 30 days notice is not reasonable in any way regardless of what your opinion on this would be. You aren't seeing how us app developers are having to restructure so many complex elements all the time to get around the extreme limitations this API already has. I will have to restructure and rewrite a large % of my code that I spent months cleverly getting API calls down thanks to TMBDs generous API, which without this would make the trakt API completely useless. You need to reconsider this 30 day timeframe. |
Beta Was this translation helpful? Give feedback.
-
|
If my app currently requests a limit of 1000 items per page on some requests, will the API safely return the max limit of 250 items and also give me the correct number of total pages back basis the new limit of 250 and not 1000? e.g. there are 2000 items: |
Beta Was this translation helpful? Give feedback.
-
|
Hi Trakt team, I’m testing pagination on the Example request:
The response seems to return the same full/unpaginated watched movies payload instead of page 31 with 250 items. I also don’t seem to get useful pagination headers for this endpoint. I wanted to confirm the expected behavior:
For context, this endpoint can return a large number of watched movies for long-time users, so pagination would help avoid very large sync responses. Thanks! |
Beta Was this translation helpful? Give feedback.
-
|
Hey, I had a concern/question about the new dynamic pagination behavior for What are clients supposed to do if page sizes change over time for the same request? For example, say my app is requesting Or even while the user is actively browsing the list:
Now the page boundaries shift mid-session, which can cause:
This seems especially problematic for Android/iOS apps where restoring previous pagination state is common. Should clients basically treat page-number pagination as unstable now and fully refetch/dedupe everything every time? Or is the returned ordering/page composition expected to remain stable for the same limit? By making the |
Beta Was this translation helpful? Give feedback.
-
|
Perhaps you can allow more on the sync/ratings/episodes and movies endpoint? 1000 would be good if okay on you end? Personally, for episodes, I need 75 pages at 250 per page: { |
Beta Was this translation helpful? Give feedback.
-
|
Looks like there is a bug for the new The |
Beta Was this translation helpful? Give feedback.
-
|
I'm seeing |
Beta Was this translation helpful? Give feedback.
-
|
@martinr92 Should have a fix out this week to make sure @AJDev77 Should have a fix out this week to make sure specials are returned on the default endpoint. |
Beta Was this translation helpful? Give feedback.
-
|
Thanks everyone for all the feedback. We’re extending the transition window for these watched endpoint changes. Pagination is already enabled and optional, so you can start testing your apps/integrations with The new behavior will not be enforced until after June 30, 2026. I’ll update the original announcement to reflect the new target date. |
Beta Was this translation helpful? Give feedback.
-
|
@kevincador |
Beta Was this translation helpful? Give feedback.
-
|
I'm attempting to try out the pagination on /sync/watched/shows, and currently use extended=images,noseasons. Though the new pagination endpoint does seem to still work with noseasons, the images aren't returned. Will the images be returned when using the default extended after this June 30th cutoff or is the intended method to fetch images for shows individually using /shows/{id}? This would result in much higher volume of api requests. I've noticed the /sync/collection/shows has already removed the images, and have the same predicament if I want to get the poster for collected shows. |
Beta Was this translation helpful? Give feedback.
-
|
Update: thanks to everyone who tested this and shared feedback. The watched endpoint changes are now live for Final behavior:
Please continue to page through results until you have everything you need, and do not assume one request returns a complete watched history unless you are intentionally using Thanks again for the feedback 🙌 |
Beta Was this translation helpful? Give feedback.
-
|
@kevincador Following the pagination + extended changes in this thread,
I understand the announcement saying full item information is returned by default and extended=progress adds season progress — which reads as "full item info + season progress." In practice The impact: clients that need both season progress and show metadata now have to make two calls (default + progress) and merge by ID, or fall back to per-show lookups. If this is a bug — like the season-0 omission and null reset_at reported above — a fix would let progress serve as a single source. If it's intended, updating the docs to state that progress returns a minimal (not full) show object would save others the surprise. |
Beta Was this translation helpful? Give feedback.
-
|
Hi @kevincador, Is there a way to add a movie to the watchlist via the API with a custom listed_at date? I would like to set a specific backdated timestamp for when the item was added to the watchlist, rather than the system defaulting to the current UTC time. If this isn't currently supported by the API, are there any plans to add a timestamp parameter for watchlist syncs in the future? Thanks in advance! |
Beta Was this translation helpful? Give feedback.

Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hi developers,
We’re sharing an early heads-up about upcoming changes to the watched endpoints.
This follows the pagination work already announced for lists, watchlist, favorites, collection/library, and other paginated endpoints. We’ve seen the feedback around timing, app release cycles, testing, and sync behavior, so we want to be more explicit here.
The (very) short version: paginate
/watchedand use the rightextendedparameter for your needs.Update May 27, 2026: Based on developer feedback, we’re extending the rollout window. These changes will now be enforced after June 30, 2026 instead of May 30. Pagination is already available and optional, so apps/integrations can use them now.
Pagination changes
Pagination will be added and enforced on the watched endpoints:
/users/{id}/watched/{type}/sync/watched/{type}This applies to all supported types:
moviesshowsepisodestypeOnce enabled, these endpoints will return paginated responses instead of returning everything in one request.
Please don’t assume a single request returns a user’s full watched history.
You should explicitly send
pageandlimitand keep requesting pages until you have everything you need.Example:
Then continue with:
and so on until you have loaded all pages. We recommend stopping when you get an empty array
[]response. You can also look at the pagination headers to get the total number of pages, but make sure your stop logic is robust.Pagination defaults without limits
Pagination is currently enabled and optional. You can use
pageandlimitnow to test your integration before enforcement.Max page size
The current target maximum page size is
250when you request alimit.For most paginated requests, that will be the upper limit per page.
However, we may reduce the effective page size when using heavier response modes, especially
extended=progress(more on this one below), because that requires significantly more computation and returns much more data.On the other hand, we may still return all watched data when you request
extended=min(again more on this one below).So, your integration should always send pagination information (except for
extended=minif your intention is to get everything) and should never assume the requested limit is always the applied limit.Extended changes
We’re also changing the default behavior of the
extendedparameter for these watched endpoints.Current expectation
Today’s behavior is the following:
extendedparameters are requested: regular show information is returned with heavy season progress informationextended=full: full show information is returned with heavy season progress informationextended=noseason: regular show information is returned with no season progress informationextended=full,noseason: full show information is returned with no season progress informationThe problem with this is that a lot of apps use the default (nothing) or
fullresponse mode without needing the heavy season progress data.New default
Going forward, the watched endpoints will return full show information with no season progress information.
So this:
will behave like the current
extended=full,noseason.Deprecated extended parameters
Sending
extended=full,extended=noseason, orextended=full,noseasonwill no longer have any effect. Those parameters will be ignored and you will get the default.Season progress information
If your app needs season progress data, you can explicitly request:
extended=progressExample:
Keep in mind that this request will return a lot of information and will be slower. Actual page limits may be lower than the 250 upper limit.
Minimal watched information
There is also a currently undocumented
extended=minoption that apps can start using now if they only need minimal watched information.This returns a compact response with the Trakt ID as the key and an array of watched dates as the value.
Example response:
{ "1342606": ["2026-02-27T22:17:00.000Z"] }This can be useful for apps that only need to compare watched states or sync dates without loading the full movies, shows or episodes metadata.
New extended behavior
So the new behavior is:
extended=progress: includes season progress informationextended=min: returns minimal watched informationWhy we’re making this change
Watched history can get very large, especially for long-time users or apps doing full syncs.
Returning everything in one response is expensive, slower, and harder to scale reliably. It also makes it harder for us to keep the API consistent across endpoints.
Pagination makes the behavior clearer and more predictable:
The
extendedchanges are also meant to make the default response more useful while keeping heavier computed data explicit and the min option really minimal.What you should do now
Please review any code using:
/users/{id}/watched/{type}or:
/sync/watched/{type}and make sure you:
pageandlimit250or1000or anything else will return that many itemsextended=progressonly when you actually need season progress dataextended=minif you only need minimal watched informationTiming
The goal of posting this now is to give everyone enough time to adjust, especially apps that need a full app release cycle and user updates before API behavior changes.
Expect these changes to take effect on May 30. We may extend that date if needed, so let us know if you need more time and why.
Pagination is enabled and optional on these endpoints, so you can start testing
pageandlimitnow. Pagination will become required after June 30, 2026.TLDR
/users/{id}/watched/{type}and/sync/watched/{type}are getting paginationmovies,shows, andepisodes250when requesting a limit,100without a limit except forextended=minextended=fullis no longer requiredextended=progressnoseasonbecomes the default and won’t have any effect anymoreextended=mincan be used for a compact response with Trakt IDs and watched dates onlyPlease review your integrations and let us know if anything looks off.
Thanks for building with Trakt ✨
Beta Was this translation helpful? Give feedback.
All reactions