tautulli 3.4.0
tautulli: ^3.4.0 copied to clipboard
A Dart client for the Tautulli API. Provides typed access to activity, history, libraries, users, and more for Plex media server monitoring.
Changelog #
3.4.0 #
Requires Tautulli v2.18.0 or newer. Verified end-to-end against a live v2.18.2 server, with the test fixtures recaptured from that release on 2026-09-28.
Added #
- Added
editionTitletoRecentlyAddedItemandMediaItem.get_metadataalready sentedition_title, andget_recently_addedsends it from Tautulli v2.18.2 on.
Behavior notes #
logoutUserSessionsucceeds on Tautulli v2.18.2 and newer. Earlier servers answerresult: erroreven after logging the session out, because the users-table helper fell through toreturn Falseon success, so the call throwsTautulliServerExceptionthere.downloadDatabasewaits while the server copies the whole database before the first byte is sent, and v2.18.2 writes that copy to the data directory instead of the cache directory. A large database can exceed the default 30-second timeout. SetTautulliConnection.downloadTimeout.
3.3.0 #
Requires Tautulli v2.18.0 or newer. Verified end-to-end against a live v2.18.1 server, with the test fixtures recaptured from that release on 2026-09-03.
Breaking #
- Changed
buildImageUrl'sbackgroundparameter fromint?toString?. The server expects a hex color string such as'282828', and the integer went out throughtoString()as a decimal the server could not use. - Made
friendlyNamerequired onsetMobileDeviceConfig. The server writes the name unconditionally, so a request without it stored an empty name. - Removed
sessionKeyandsessionIdfromserverStatus. The handler reads no arguments and answers with the global connection flag. - Removed
groupingfromgetUsers. The handler builds the user list without arguments. - Removed
usernamefromdeleteAllUserHistoryand changedrowIdstoList<int>?. The handler forwards onlyuser_idandrow_ids. - Removed
msfromgetLogs. The handler never reads it. - Changed
exportMetadata,addNotifierConfigandaddNewsletterConfigto return the new export, notifier and newsletter id asFuture<int>. The server sends it asexport_id,notifier_idandnewsletter_idindata, and the delete and configure calls need it. - Changed
UserTableEntry.durationfromint?seconds toDuration?, matchingLibraryTableEntry.durationfor the same column. - Removed
VideoDynamicRange. No model used it, and the server joinsDolby Vision,HLG,HDR10andHDRwith/, which the twoStringfields onActivitySessionalready carry. - Changed
rating,audienceRatinganduserRatingtonum?onActivitySessionandMediaItem, matchingRecentlyAddedItemandHomeStat. An empty string parses tonull. - Removed
ActivitySession.type. It held thestreamTypeof the last stream-detail dict Tautulli merges into a session (3when a subtitle stream is selected, empty otherwise), never the media type. - Renamed
userIdtouserIds(List<int>?) on everyGraphServicemethod. Each graph handler passesuser_idthrough a condition builder that expects a comma-separated list.
Fixed #
- Stopped sending
refresh=0andreturn_hash=0frombuildImageUrlwhen the flags are false. The handler readsrefreshby bare truthiness, so the string'0'bypassed the image cache on every request, and the API layer returns raw image bytes only whenreturn_hashis absent from the request, soreturn_hash=0sent the bytes through the JSON encoder. - Parsed
RecentlyAddedItem.durationas milliseconds. The server sends Plex durations in milliseconds, so the value came out a thousand times too long. - Read
UserData.userThumbfrom thethumbkey whenuser_thumbis absent.get_userssends the avatar asthumband onlyget_userusesuser_thumb, so the field was always null fromgetUsers().
Added #
- Added
cliptobuildImageUrl, matching the handler's parameter. - Added
totalDurationandfilterDurationtoPagedResult, the human-readable watch timesget_historysends next to its record counts. Other paged commands leave them null. - Added
lastTriggeredandlastSuccesstoNotifierConfigfromget_notifiers, andconfig,configOptions,actions,notifyText,customConditionsandcustomConditionsLogicfromget_notifier_config, which sends noactive. - Added
statTitleandstatTypetoHomeStatGroup, andstopped,libraryThumbandlibraryArttoHomeStatfor themost_concurrentandtop_librariesrows that carry them. - Added
contentRatingandcollectionstoRecentlyAddedItem. - Added
markerstoMediaItem, the chapter markersget_metadatareturns. - Added
referenceIdtogetHistory, the grouped-play filter the handler already applies.
Behavior notes #
regroupHistoryreturns as soon as the server has started the regrouping on a background thread. Success means accepted, not finished.get_server_idwithget_urlortest_websocketanswers HTTP 500 through the API on v2.18.1. The branch callsself.get_server_resources, which only the web interface class defines, so the API object raises.getServerIdoffers neither option and exposes nourlorws.
3.2.0 #
Requires Tautulli v2.18.0 or newer. Verified end-to-end against a live v2.18.1 server. The test fixtures are full sanitized captures from that release, with a few files retained from v2.17.2.
Breaking #
- Requires Tautulli v2.18.0 or newer. The workarounds for v2.17.2 and earlier servers are gone.
- Removed parameters the server no longer accepts:
includeCloudfromgetServerList,agentIdfromsetNotifierConfigandsetNewsletterConfig,syncIdfromgetMetadata, and thedoNotify/doNotifyCreatededit parameters. - Removed
getSyncedItemsanddeleteSyncedItem. Plex retired the Sync feature and Tautulli dropped the commands. - Removed the
doNotify/doNotifyCreatedmodel fields andRegisterDeviceResult.pmsIsCloud, all dropped from the API. getSettingsreturns the raw sectioned JSON map (likegetDateFormats) and theTautulliSettingsmodel is gone. Read the format strings fromgetDateFormats.
Fixed #
getServerList(allServers: false)was silently ignored on every server version: Tautulli testsnot (all_servers == 'false'), so the usual1/0encoding always read as true.allServersis sent as the literal'true'or'false'instead.editUserandeditLibraryare partial updates: every parameter exceptuserId/sectionIdis optional, matchingedit_userandedit_libraryon v2.18.0, which update only the fields provided.getPlexLogaccepts bothget_plex_logresponse shapes: the bare list that shipped in v2.18.0, and the object nesting rows underdata.dataused before and after it.
Added #
- Opt-in
X-Api-Keyheader auth:apiKeyLocation: ApiKeyLocation.headerkeeps the key out of URLs and access logs. The query parameter remains the default. TautulliRedirectException(a subtype ofTautulliConnectionException) for redirect-limit and redirect-loop failures, typically a reverse proxy or access gateway answering an unauthenticated request with a login redirect. Before this release they were indistinguishable from an offline socket error.TautulliRequestExceptionfor a request that cannot be built, most often a custom header whose name or value is not valid HTTP. Earlier releases reported it as a connection failure.pushTokenonregisterDevice, for the Tautulli Remote relay push transport.audioAtmosandstreamAudioAtmosonActivitySession(server keysaudio_atmosandstream_audio_atmos).
Behavior notes #
getMetadatathrowsTautulliServerExceptionfor an unknownrating_key, andgetPlexLogthrows when the log cannot be read. Both are servererrorenvelopes on v2.18.0 and newer. On v2.17.2 an unknownrating_keyreturnedsuccesswith an emptydata.setNotifierConfigandsetNewsletterConfigare partial updates. Never write back a config map read fromgetNotifierConfigorgetNewsletterConfig: the server masks passwords as four spaces, and storing that mask replaces the real password.
3.1.0 #
Every API command was verified end-to-end against a live Tautulli v2.17.2 server. This release repairs calls, corrects method signatures, and rebuilds the test suite on full captured server responses.
Breaking #
- Signatures corrected across services: phantom parameters removed, missing ones added
(
exportMetadata,registerDevice,notify,deleteHistory).Castis no longer exported. Unexpected response shapes throwTautulliBadResponseExceptioninstead of returning empty models.
Fixed #
- Commands that failed or silently did nothing, including
notify,deleteHistory,logoutUserSession,getPlexLog,getHomeStats,getStreamData,docsMd,deleteLibrary, image fallback URLs, and single-sessiongetActivity. editUser/editLibrarycorrupted boolean settings. Their fields are now required because the server overwrites every field on edit.- Models were reading keys the server never sends (22 always-null fields). All
DateTimevalues are now UTC: call.toLocal()for display. - Downloads crashed the app when Tautulli served a file that was actively being written.
Added #
- Web and WASM support (the package no longer requires
dart:io). TautulliConnectionequality andcopyWith, per-call timeouts, a separatedownloadTimeout, chapter markers, typed notifier parameters, and many missing optional command parameters.
Behavior notes #
close()no longer closes an injectedhttp.Client.
3.0.1 #
- Fix unresolved dartdoc reference in
Cast. - Apply
dart formatto all source files. - Expand
pubspec.yamldescription to meet pub.dev guidelines.
3.0.0 #
- Ownership of this package was transferred to the Tautulli team and v3.0.0 is a complete rewrite.
- Full coverage of Tautulli API as documented at: https://github.com/Tautulli/Tautulli/wiki/Tautulli-API-Reference.