Files
plexpy/docs/sdks/timeline/README.md
speakeasybot 5379e2aa2c ## Python SDK Changes Detected:
* `plex_api.butler.start_task()`: 
  *  `request` **Changed** **Breaking** ⚠️
  *  `error` **Changed** **Breaking** ⚠️
* `plex_api.butler.stop_task()`: 
  *  `request` **Changed** **Breaking** ⚠️
  *  `error` **Changed** **Breaking** ⚠️
* `plex_api.updater.apply_updates()`: 
  *  `request` **Changed** **Breaking** ⚠️
  *  `error` **Changed** **Breaking** ⚠️
* `plex_api.general.get_server_info()`: **Added**
* `plex_api.general.get_identity()`: **Added**
* `plex_api.general.get_source_connection_information()`: **Added**
* `plex_api.general.get_transient_token()`: **Added**
* `plex_api.events.get_notifications()`: **Added**
* `plex_api.events.connect_web_socket()`: **Added**
* `plex_api.preferences.get_all_preferences()`: **Added**
* `plex_api.preferences.set_preferences()`: **Added**
* `plex_api.preferences.get_preference()`: **Added**
* `plex_api.rate.set_rating()`: **Added**
* `plex_api.timeline.mark_played()`: **Added**
* `plex_api.timeline.report()`: **Added**
* `plex_api.timeline.unscrobble()`: **Added**
* `plex_api.activities.list_activities()`: **Added**
* `plex_api.activities.cancel_activity()`: **Added**
* `plex_api.butler.stop_tasks()`: **Added**
* `plex_api.butler.get_tasks()`: **Added**
* `plex_api.butler.start_tasks()`: **Added**
* `plex_api.download_queue.create_download_queue()`: **Added**
* `plex_api.download_queue.get_download_queue()`: **Added**
* `plex_api.download_queue.add_download_queue_items()`: **Added**
* `plex_api.download_queue.list_download_queue_items()`: **Added**
* `plex_api.download_queue.get_item_decision()`: **Added**
* `plex_api.download_queue.get_download_queue_media()`: **Added**
* `plex_api.download_queue.remove_download_queue_items()`: **Added**
* `plex_api.download_queue.get_download_queue_items()`: **Added**
* `plex_api.download_queue.restart_processing_download_queue_items()`: **Added**
* `plex_api.hubs.get_all_hubs()`: **Added**
* `plex_api.hubs.get_continue_watching()`: **Added**
* `plex_api.hubs.get_hub_items()`: **Added**
* `plex_api.hubs.get_promoted_hubs()`: **Added**
* `plex_api.hubs.get_metadata_hubs()`: **Added**
* `plex_api.hubs.get_postplay_hubs()`: **Added**
* `plex_api.hubs.get_related_hubs()`: **Added**
* `plex_api.hubs.get_section_hubs()`: **Added**
* `plex_api.hubs.reset_section_defaults()`: **Added**
* `plex_api.hubs.list_hubs()`: **Added**
* `plex_api.hubs.create_custom_hub()`: **Added**
* `plex_api.hubs.move_hub()`: **Added**
* `plex_api.hubs.delete_custom_hub()`: **Added**
* `plex_api.hubs.update_hub_visibility()`: **Added**
* `plex_api.search.search_hubs()`: **Added**
* `plex_api.search.voice_search_hubs()`: **Added**
* `plex_api.library.get_library_items()`: **Added**
* `plex_api.library.delete_caches()`: **Added**
* `plex_api.library.clean_bundles()`: **Added**
* `plex_api.library.ingest_transient_item()`: **Added**
* `plex_api.library.get_library_matches()`: **Added**
* `plex_api.library.optimize_database()`: **Added**
* `plex_api.library.get_random_artwork()`: **Added**
* `plex_api.library.get_sections()`: **Added**
* `plex_api.library.add_section()`: **Added**
* `plex_api.library.stop_all_refreshes()`: **Added**
* `plex_api.library.get_sections_prefs()`: **Added**
* `plex_api.library.refresh_sections_metadata()`: **Added**
* `plex_api.library.get_tags()`: **Added**
* `plex_api.library.delete_metadata_item()`: **Added**
* `plex_api.library.edit_metadata_item()`: **Added**
* `plex_api.library.detect_ads()`: **Added**
* `plex_api.library.get_all_item_leaves()`: **Added**
* `plex_api.library.analyze_metadata()`: **Added**
* `plex_api.library.generate_thumbs()`: **Added**
* `plex_api.library.detect_credits()`: **Added**
* `plex_api.library.get_extras()`: **Added**
* `plex_api.library.add_extras()`: **Added**
* `plex_api.library.get_file()`: **Added**
* `plex_api.library.start_bif_generation()`: **Added**
* `plex_api.library.detect_intros()`: **Added**
* `plex_api.library.create_marker()`: **Added**
* `plex_api.library.match_item()`: **Added**
* `plex_api.library.list_matches()`: **Added**
* `plex_api.library.merge_items()`: **Added**
* `plex_api.library.list_sonically_similar()`: **Added**
* `plex_api.library.set_item_preferences()`: **Added**
* `plex_api.library.refresh_items_metadata()`: **Added**
* `plex_api.library.get_related_items()`: **Added**
* `plex_api.library.list_similar()`: **Added**
* `plex_api.library.split_item()`: **Added**
* `plex_api.library.add_subtitles()`: **Added**
* `plex_api.library.get_item_tree()`: **Added**
* `plex_api.library.unmatch()`: **Added**
* `plex_api.library.list_top_users()`: **Added**
* `plex_api.library.detect_voice_activity()`: **Added**
* `plex_api.library.get_augmentation_status()`: **Added**
* `plex_api.library.set_stream_selection()`: **Added**
* `plex_api.library.get_person()`: **Added**
* `plex_api.library.list_person_media()`: **Added**
* `plex_api.library.delete_library_section()`: **Added**
* `plex_api.library.get_library_details()`: **Added**
* `plex_api.library.edit_section()`: **Added**
* `plex_api.library.update_items()`: **Added**
* `plex_api.library.start_analysis()`: **Added**
* `plex_api.library.autocomplete()`: **Added**
* `plex_api.library.get_collections()`: **Added**
* `plex_api.library.get_common()`: **Added**
* `plex_api.library.empty_trash()`: **Added**
* `plex_api.library.get_section_filters()`: **Added**
* `plex_api.library.get_first_characters()`: **Added**
* `plex_api.library.delete_indexes()`: **Added**
* `plex_api.library.delete_intros()`: **Added**
* `plex_api.library.get_section_preferences()`: **Added**
* `plex_api.library.set_section_preferences()`: **Added**
* `plex_api.library.cancel_refresh()`: **Added**
* `plex_api.library.refresh_section()`: **Added**
* `plex_api.library.get_available_sorts()`: **Added**
* `plex_api.library.get_stream_levels()`: **Added**
* `plex_api.library.get_stream_loudness()`: **Added**
* `plex_api.library.get_chapter_image()`: **Added**
* `plex_api.library.set_item_artwork()`: **Added**
* `plex_api.library.update_item_artwork()`: **Added**
* `plex_api.library.delete_marker()`: **Added**
* `plex_api.library.edit_marker()`: **Added**
* `plex_api.library.delete_media_item()`: **Added**
* `plex_api.library.get_part_index()`: **Added**
* `plex_api.library.delete_collection()`: **Added**
* `plex_api.library.get_section_image()`: **Added**
* `plex_api.library.delete_stream()`: **Added**
* `plex_api.library.get_stream()`: **Added**
* `plex_api.library.set_stream_offset()`: **Added**
* `plex_api.library.get_item_artwork()`: **Added**
* `plex_api.library.get_media_part()`: **Added**
* `plex_api.library.get_image_from_bif()`: **Added**
* `plex_api.collections.create_collection()`: **Added**
* `plex_api.dv_rs.list_dv_rs()`: **Added**
* `plex_api.dv_rs.create_dvr()`: **Added**
* `plex_api.dv_rs.delete_dvr()`: **Added**
* `plex_api.dv_rs.get_dvr()`: **Added**
* `plex_api.dv_rs.delete_lineup()`: **Added**
* `plex_api.dv_rs.add_lineup()`: **Added**
* `plex_api.dv_rs.set_dvr_preferences()`: **Added**
* `plex_api.dv_rs.stop_dvr_reload()`: **Added**
* `plex_api.dv_rs.reload_guide()`: **Added**
* `plex_api.dv_rs.tune_channel()`: **Added**
* `plex_api.dv_rs.remove_device_from_dvr()`: **Added**
* `plex_api.dv_rs.add_device_to_dvr()`: **Added**
* `plex_api.epg.compute_channel_map()`: **Added**
* `plex_api.epg.get_channels()`: **Added**
* `plex_api.epg.get_countries()`: **Added**
* `plex_api.epg.get_all_languages()`: **Added**
* `plex_api.epg.get_lineup()`: **Added**
* `plex_api.epg.get_lineup_channels()`: **Added**
* `plex_api.epg.get_countries_lineups()`: **Added**
* `plex_api.epg.get_country_regions()`: **Added**
* `plex_api.epg.list_lineups()`: **Added**
* `plex_api.live_tv.get_sessions()`: **Added**
* `plex_api.live_tv.get_live_tv_session()`: **Added**
* `plex_api.live_tv.get_session_playlist_index()`: **Added**
* `plex_api.live_tv.get_session_segment()`: **Added**
* `plex_api.log.write_log()`: **Added**
* `plex_api.log.write_message()`: **Added**
* `plex_api.log.enable_papertrail()`: **Added**
* `plex_api.devices.get_available_grabbers()`: **Added**
* `plex_api.devices.list_devices()`: **Added**
* `plex_api.devices.add_device()`: **Added**
* `plex_api.devices.discover_devices()`: **Added**
* `plex_api.devices.remove_device()`: **Added**
* `plex_api.devices.get_device_details()`: **Added**
* `plex_api.devices.modify_device()`: **Added**
* `plex_api.devices.set_channelmap()`: **Added**
* `plex_api.devices.get_devices_channels()`: **Added**
* `plex_api.devices.set_device_preferences()`: **Added**
* `plex_api.devices.stop_scan()`: **Added**
* `plex_api.devices.scan()`: **Added**
* `plex_api.devices.get_thumb()`: **Added**
* `plex_api.provider.list_providers()`: **Added**
* `plex_api.provider.add_provider()`: **Added**
* `plex_api.provider.refresh_providers()`: **Added**
* `plex_api.provider.delete_media_provider()`: **Added**
* `plex_api.subscriptions.get_all_subscriptions()`: **Added**
* `plex_api.subscriptions.create_subscription()`: **Added**
* `plex_api.subscriptions.process_subscriptions()`: **Added**
* `plex_api.subscriptions.get_scheduled_recordings()`: **Added**
* `plex_api.subscriptions.get_template()`: **Added**
* `plex_api.subscriptions.cancel_grab()`: **Added**
* `plex_api.subscriptions.delete_subscription()`: **Added**
* `plex_api.subscriptions.get_subscription()`: **Added**
* `plex_api.subscriptions.edit_subscription_preferences()`: **Added**
* `plex_api.subscriptions.reorder_subscription()`: **Added**
* `plex_api.transcoder.transcode_image()`: **Added**
* `plex_api.transcoder.make_decision()`: **Added**
* `plex_api.transcoder.trigger_fallback()`: **Added**
* `plex_api.transcoder.transcode_subtitles()`: **Added**
* `plex_api.transcoder.start_transcode_session()`: **Added**
* `plex_api.playlist.list_playlists()`: **Added**
* `plex_api.playlist.get_playlist()`: **Added**
* `plex_api.playlist.get_playlist_items()`: **Added**
* `plex_api.library_playlists.create_playlist()`: **Added**
* `plex_api.library_playlists.upload_playlist()`: **Added**
* `plex_api.library_playlists.delete_playlist()`: **Added**
* `plex_api.library_playlists.update_playlist()`: **Added**
* `plex_api.library_playlists.get_playlist_generators()`: **Added**
* `plex_api.library_playlists.clear_playlist_items()`: **Added**
* `plex_api.library_playlists.add_playlist_items()`: **Added**
* `plex_api.library_playlists.delete_playlist_item()`: **Added**
* `plex_api.library_playlists.get_playlist_generator()`: **Added**
* `plex_api.library_playlists.modify_playlist_generator()`: **Added**
* `plex_api.library_playlists.get_playlist_generator_items()`: **Added**
* `plex_api.library_playlists.move_playlist_item()`: **Added**
* `plex_api.library_playlists.refresh_playlist()`: **Added**
* `plex_api.play_queue.create_play_queue()`: **Added**
* `plex_api.play_queue.get_play_queue()`: **Added**
* `plex_api.play_queue.add_to_play_queue()`: **Added**
* `plex_api.play_queue.clear_play_queue()`: **Added**
* `plex_api.play_queue.reset_play_queue()`: **Added**
* `plex_api.play_queue.shuffle()`: **Added**
* `plex_api.play_queue.unshuffle()`: **Added**
* `plex_api.play_queue.delete_play_queue_item()`: **Added**
* `plex_api.play_queue.move_play_queue_item()`: **Added**
* `plex_api.ultra_blur.get_colors()`: **Added**
* `plex_api.ultra_blur.get_image()`: **Added**
* `plex_api.status.list_sessions()`: **Added**
* `plex_api.status.get_background_tasks()`: **Added**
* `plex_api.status.list_playback_history()`: **Added**
* `plex_api.status.terminate_session()`: **Added**
* `plex_api.status.delete_history()`: **Added**
* `plex_api.status.get_history_item()`: **Added**
* `plex_api.updater.check_updates()`: **Added**
* `plex_api.updater.get_updates_status()`: **Added**
* `plex_api.content.get_collection_items()`: **Added**
* `plex_api.content.get_metadata_item()`: **Added**
* `plex_api.content.get_albums()`: **Added**
* `plex_api.content.list_content()`: **Added**
* `plex_api.content.get_all_leaves()`: **Added**
* `plex_api.content.get_arts()`: **Added**
* `plex_api.content.get_categories()`: **Added**
* `plex_api.content.get_cluster()`: **Added**
* `plex_api.content.get_sonic_path()`: **Added**
* `plex_api.content.get_folders()`: **Added**
* `plex_api.content.list_moments()`: **Added**
* `plex_api.content.get_sonically_similar()`: **Added**
* `plex_api.content.get_collection_image()`: **Added**
* `plex_api.library_collections.add_collection_items()`: **Added**
* `plex_api.library_collections.delete_collection_item()`: **Added**
* `plex_api.library_collections.move_collection_item()`: **Added**
* `plex_api.server.get_server_capabilities()`: **Deleted** **Breaking** ⚠️
* `plex_api.server.get_server_preferences()`: **Deleted** **Breaking** ⚠️
* `plex_api.server.get_available_clients()`: **Deleted** **Breaking** ⚠️
* `plex_api.server.get_devices()`: **Deleted** **Breaking** ⚠️
* `plex_api.server.get-server-identity()`: **Deleted** **Breaking** ⚠️
* `plex_api.server.get_my_plex_account()`: **Deleted** **Breaking** ⚠️
* `plex_api.server.get_resized_photo()`: **Deleted** **Breaking** ⚠️
* `plex_api.server.get-media-providers()`: **Deleted** **Breaking** ⚠️
* `plex_api.server.get_server_list()`: **Deleted** **Breaking** ⚠️
* `plex_api.media.mark_played()`: **Deleted** **Breaking** ⚠️
* `plex_api.media.mark_unplayed()`: **Deleted** **Breaking** ⚠️
* `plex_api.media.update_play_progress()`: **Deleted** **Breaking** ⚠️
* `plex_api.media.get-banner-image()`: **Deleted** **Breaking** ⚠️
* `plex_api.media.get-thumb-image()`: **Deleted** **Breaking** ⚠️
* `plex_api.video.get_timeline()`: **Deleted** **Breaking** ⚠️
* `plex_api.video.start_universal_transcode()`: **Deleted** **Breaking** ⚠️
* `plex_api.activities.get_server_activities()`: **Deleted** **Breaking** ⚠️
* `plex_api.activities.cancel_server_activities()`: **Deleted** **Breaking** ⚠️
* `plex_api.butler.get_butler_tasks()`: **Deleted** **Breaking** ⚠️
* `plex_api.butler.start_all_tasks()`: **Deleted** **Breaking** ⚠️
* `plex_api.butler.stop_all_tasks()`: **Deleted** **Breaking** ⚠️
* `plex_api.plex.get_companions_data()`: **Deleted** **Breaking** ⚠️
* `plex_api.plex.get_user_friends()`: **Deleted** **Breaking** ⚠️
* `plex_api.plex.get_geo_data()`: **Deleted** **Breaking** ⚠️
* `plex_api.plex.get_home_data()`: **Deleted** **Breaking** ⚠️
* `plex_api.plex.get-server-resources()`: **Deleted** **Breaking** ⚠️
* `plex_api.plex.get_pin()`: **Deleted** **Breaking** ⚠️
* `plex_api.plex.get_token_by_pin_id()`: **Deleted** **Breaking** ⚠️
* `plex_api.hubs.get_global_hubs()`: **Deleted** **Breaking** ⚠️
* `plex_api.hubs.get-recently-added()`: **Deleted** **Breaking** ⚠️
* `plex_api.hubs.get_library_hubs()`: **Deleted** **Breaking** ⚠️
* `plex_api.search.perform_search()`: **Deleted** **Breaking** ⚠️
* `plex_api.search.perform_voice_search()`: **Deleted** **Breaking** ⚠️
* `plex_api.search.get_search_results()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get_file_hash()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-recently-added-library()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-all-libraries()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-library-details()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.delete_library()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-library-items()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-library-sections-all()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-refresh-library-metadata()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-search-library()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-genres-library()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-countries-library()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-actors-library()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-search-all-libraries()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-media-meta-data()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-media-arts()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.post-media-arts()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get-media-posters()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.post-media-poster()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get_metadata_children()`: **Deleted** **Breaking** ⚠️
* `plex_api.library.get_top_watched_content()`: **Deleted** **Breaking** ⚠️
* `plex_api.watchlist.get-watch-list()`: **Deleted** **Breaking** ⚠️
* `plex_api.log.log_line()`: **Deleted** **Breaking** ⚠️
* `plex_api.log.log_multi_line()`: **Deleted** **Breaking** ⚠️
* `plex_api.log.enable_paper_trail()`: **Deleted** **Breaking** ⚠️
* `plex_api.playlists.create_playlist()`: **Deleted** **Breaking** ⚠️
* `plex_api.playlists.get_playlists()`: **Deleted** **Breaking** ⚠️
* `plex_api.playlists.get_playlist()`: **Deleted** **Breaking** ⚠️
* `plex_api.playlists.delete_playlist()`: **Deleted** **Breaking** ⚠️
* `plex_api.playlists.update_playlist()`: **Deleted** **Breaking** ⚠️
* `plex_api.playlists.get_playlist_contents()`: **Deleted** **Breaking** ⚠️
* `plex_api.playlists.clear_playlist_contents()`: **Deleted** **Breaking** ⚠️
* `plex_api.playlists.add_playlist_contents()`: **Deleted** **Breaking** ⚠️
* `plex_api.playlists.upload_playlist()`: **Deleted** **Breaking** ⚠️
* `plex_api.authentication.get_transient_token()`: **Deleted** **Breaking** ⚠️
* `plex_api.authentication.get_source_connection_information()`: **Deleted** **Breaking** ⚠️
* `plex_api.authentication.get_token_details()`: **Deleted** **Breaking** ⚠️
* `plex_api.authentication.post-users-sign-in-data()`: **Deleted** **Breaking** ⚠️
* `plex_api.statistics.get_statistics()`: **Deleted** **Breaking** ⚠️
* `plex_api.statistics.get_resources_statistics()`: **Deleted** **Breaking** ⚠️
* `plex_api.statistics.get_bandwidth_statistics()`: **Deleted** **Breaking** ⚠️
* `plex_api.sessions.get_sessions()`: **Deleted** **Breaking** ⚠️
* `plex_api.sessions.get_session_history()`: **Deleted** **Breaking** ⚠️
* `plex_api.sessions.get_transcode_sessions()`: **Deleted** **Breaking** ⚠️
* `plex_api.sessions.stop_transcode_session()`: **Deleted** **Breaking** ⚠️
* `plex_api.updater.get_update_status()`: **Deleted** **Breaking** ⚠️
* `plex_api.updater.check_for_updates()`: **Deleted** **Breaking** ⚠️
* `plex_api.users.get-users()`: **Deleted** **Breaking** ⚠️
2025-10-12 06:48:43 +00:00

8.1 KiB
Raw Blame History

Timeline

(timeline)

Overview

The actions feature within a media provider

Available Operations

mark_played

Mark an item as played. Note, this does not create any view history of this item but rather just sets the state as played. The client must provide either the key or uri query parameter This API does respond to the GET verb but applications should use PUT

Example Usage

from plex_api_client import PlexAPI
from plex_api_client.models import components


with PlexAPI(
    accepts=components.Accepts.APPLICATION_XML,
    client_identifier="abc123",
    product="Plex for Roku",
    version="2.4.1",
    platform="Roku",
    platform_version="4.3 build 1057",
    device="Roku 3",
    model="4200X",
    device_vendor="Roku",
    device_name="Living Room TV",
    marketplace="googlePlay",
    token="<YOUR_API_KEY_HERE>",
) as plex_api:

    res = plex_api.timeline.mark_played(request={
        "identifier": "<value>",
        "key": "59398",
    })

    assert res is not None

    # Handle response
    print(res)

Parameters

Parameter Type Required Description
request operations.MarkPlayedRequest ✔️ The request object to use for the request.
retries Optional[utils.RetryConfig] Configuration to override the default retry behavior of the client.

Response

operations.MarkPlayedResponse

Errors

Error Type Status Code Content Type
errors.SDKError 4XX, 5XX */*

report

This endpoint is hit during media playback for an item. It must be hit whenever the play state changes, or in the absence of a play state change, in a regular fashion (generally this means every 10 seconds on a LAN/WAN, and every 20 seconds over cellular).

Example Usage

from plex_api_client import PlexAPI
from plex_api_client.models import components, operations


with PlexAPI(
    accepts=components.Accepts.APPLICATION_XML,
    client_identifier="abc123",
    product="Plex for Roku",
    version="2.4.1",
    platform="Roku",
    platform_version="4.3 build 1057",
    device="Roku 3",
    model="4200X",
    device_vendor="Roku",
    device_name="Living Room TV",
    marketplace="googlePlay",
    token="<YOUR_API_KEY_HERE>",
) as plex_api:

    res = plex_api.timeline.report(request=operations.ReportRequest(
        key="/foo",
        rating_key="xyz",
        state=operations.State.PLAYING,
        play_queue_item_id="123",
        time=0,
        duration=10000,
        continuing=components.BoolInt.ONE,
        updated=14200000,
        offline=components.BoolInt.ONE,
        time_to_first_frame=1000,
        time_stalled=1000,
        bandwidth=100,
        buffered_time=100,
        buffered_size=1024,
    ))

    assert res.object is not None

    # Handle response
    print(res.object)

Parameters

Parameter Type Required Description
request operations.ReportRequest ✔️ The request object to use for the request.
retries Optional[utils.RetryConfig] Configuration to override the default retry behavior of the client.

Response

operations.ReportResponse

Errors

Error Type Status Code Content Type
errors.SDKError 4XX, 5XX */*

unscrobble

Mark an item as unplayed. The client must provide either the key or uri query parameter This API does respond to the GET verb but applications should use PUT

Example Usage

from plex_api_client import PlexAPI
from plex_api_client.models import components


with PlexAPI(
    accepts=components.Accepts.APPLICATION_XML,
    client_identifier="abc123",
    product="Plex for Roku",
    version="2.4.1",
    platform="Roku",
    platform_version="4.3 build 1057",
    device="Roku 3",
    model="4200X",
    device_vendor="Roku",
    device_name="Living Room TV",
    marketplace="googlePlay",
    token="<YOUR_API_KEY_HERE>",
) as plex_api:

    res = plex_api.timeline.unscrobble(request={
        "identifier": "<value>",
    })

    assert res is not None

    # Handle response
    print(res)

Parameters

Parameter Type Required Description
request operations.UnscrobbleRequest ✔️ The request object to use for the request.
retries Optional[utils.RetryConfig] Configuration to override the default retry behavior of the client.

Response

operations.UnscrobbleResponse

Errors

Error Type Status Code Content Type
errors.SDKError 4XX, 5XX */*