Spotify · Agentic Access

Spotify Agentic Access

x-agentic-access generated

Spotify exposes 96 API operations that an AI agent could call, of which 36 are state-changing ‘acting’ operations. This is a recommended x-agentic-access execution contract — the scope, audience, consequence tier, short-lived token constraints, and escalation each action should carry before it is handed to an autonomous agent.

By consequence: 60 read, 33 write, and 3 physical.

Contracts are classified heuristically from the provider’s OpenAPI and refresh on every APIs.io network build; audience is bound per deployment. The model follows Curity’s Access Intelligence (apidays Munich 2026). Browse every provider’s agent contracts at agentic-access.apis.io.

MusicAudioStreamingPodcastsPlaylists
Operations: 96 Acting: 36 Human-in-the-loop: 0 Method: generated

By consequence

read 60 write 33 physical 3

Highest-consequence actions

The physical and safety-critical operations an agent could invoke — the ones that most warrant scoped tokens, tight TTLs, and escalation. Full per-operation contracts are in the source below.

MethodPathConsequenceHuman-in-loop
PUT /me/player physical conditional
PUT /playlists/{playlist_id}/items physical conditional
PUT /playlists/{playlist_id}/tracks physical conditional

Source

Agentic Access

Raw ↑
generated: '2026-07-15'
method: generated
source: openapi/spotify-openapi-original.yml
description: Recommended x-agentic-access execution contracts, classified heuristically from
  the OpenAPI. A governance starting point for exposing this API to AI agents — review and bind
  audience per deployment. See research/curity/agentic-governance/.
summary:
  operations: 96
  by_action_class:
    connected: 60
    acting: 36
  by_consequence:
    read: 60
    write: 33
    physical: 3
  human_in_the_loop_required: 0
operations:
- path: /albums/{id}
  method: get
  operationId: get-an-album
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /albums
  method: get
  operationId: get-multiple-albums
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /albums/{id}/tracks
  method: get
  operationId: get-an-albums-tracks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /artists/{id}
  method: get
  operationId: get-an-artist
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /artists
  method: get
  operationId: get-multiple-artists
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /artists/{id}/albums
  method: get
  operationId: get-an-artists-albums
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /artists/{id}/top-tracks
  method: get
  operationId: get-an-artists-top-tracks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /artists/{id}/related-artists
  method: get
  operationId: get-an-artists-related-artists
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /shows/{id}
  method: get
  operationId: get-a-show
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-read-playback-position
    token:
      max-ttl: 3600
    audit: none
- path: /shows
  method: get
  operationId: get-multiple-shows
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /shows/{id}/episodes
  method: get
  operationId: get-a-shows-episodes
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-read-playback-position
    token:
      max-ttl: 3600
    audit: none
- path: /episodes/{id}
  method: get
  operationId: get-an-episode
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-read-playback-position
    token:
      max-ttl: 3600
    audit: none
- path: /episodes
  method: get
  operationId: get-multiple-episodes
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-read-playback-position
    token:
      max-ttl: 3600
    audit: none
- path: /audiobooks/{id}
  method: get
  operationId: get-an-audiobook
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /audiobooks
  method: get
  operationId: get-multiple-audiobooks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /audiobooks/{id}/chapters
  method: get
  operationId: get-audiobook-chapters
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /me/audiobooks
  method: get
  operationId: get-users-saved-audiobooks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-library-read
    token:
      max-ttl: 3600
    audit: none
- path: /me/audiobooks
  method: put
  operationId: save-audiobooks-user
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-library-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/audiobooks
  method: delete
  operationId: remove-audiobooks-user
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-library-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/audiobooks/contains
  method: get
  operationId: check-users-saved-audiobooks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-library-read
    token:
      max-ttl: 3600
    audit: none
- path: /chapters/{id}
  method: get
  operationId: get-a-chapter
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /chapters
  method: get
  operationId: get-several-chapters
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /tracks/{id}
  method: get
  operationId: get-track
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /tracks
  method: get
  operationId: get-several-tracks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /search
  method: get
  operationId: search
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /me
  method: get
  operationId: get-current-users-profile
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-read-email
    - user-read-private
    token:
      max-ttl: 3600
    audit: none
- path: /playlists/{playlist_id}
  method: get
  operationId: get-playlist
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /playlists/{playlist_id}
  method: put
  operationId: change-playlist-details
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - playlist-modify-private
    - playlist-modify-public
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /playlists/{playlist_id}/tracks
  method: get
  operationId: get-playlists-tracks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - playlist-read-private
    token:
      max-ttl: 3600
    audit: none
- path: /playlists/{playlist_id}/tracks
  method: post
  operationId: add-tracks-to-playlist
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - playlist-modify-private
    - playlist-modify-public
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /playlists/{playlist_id}/tracks
  method: put
  operationId: reorder-or-replace-playlists-tracks
  x-agentic-access:
    action-class: acting
    consequence: physical
    subject: required
    scope:
    - playlist-modify-private
    - playlist-modify-public
    audience: null
    token:
      max-ttl: 300
      exchange: true
      purpose-required: true
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /playlists/{playlist_id}/tracks
  method: delete
  operationId: remove-tracks-playlist
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - playlist-modify-private
    - playlist-modify-public
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /playlists/{playlist_id}/items
  method: get
  operationId: get-playlists-items
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - playlist-read-private
    token:
      max-ttl: 3600
    audit: none
- path: /playlists/{playlist_id}/items
  method: post
  operationId: add-items-to-playlist
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - playlist-modify-private
    - playlist-modify-public
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /playlists/{playlist_id}/items
  method: put
  operationId: reorder-or-replace-playlists-items
  x-agentic-access:
    action-class: acting
    consequence: physical
    subject: required
    scope:
    - playlist-modify-private
    - playlist-modify-public
    audience: null
    token:
      max-ttl: 300
      exchange: true
      purpose-required: true
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /playlists/{playlist_id}/items
  method: delete
  operationId: remove-items-playlist
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - playlist-modify-private
    - playlist-modify-public
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/playlists
  method: get
  operationId: get-a-list-of-current-users-playlists
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - playlist-read-private
    token:
      max-ttl: 3600
    audit: none
- path: /me/playlists
  method: post
  operationId: create-playlist
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - playlist-modify-private
    - playlist-modify-public
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/library
  method: put
  operationId: save-library-items
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - playlist-modify-public
    - user-follow-modify
    - user-library-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/library
  method: delete
  operationId: remove-library-items
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - playlist-modify-public
    - user-follow-modify
    - user-library-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/library/contains
  method: get
  operationId: check-library-contains
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - playlist-read-private
    - user-follow-read
    - user-library-read
    token:
      max-ttl: 3600
    audit: none
- path: /me/albums
  method: get
  operationId: get-users-saved-albums
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-library-read
    token:
      max-ttl: 3600
    audit: none
- path: /me/albums
  method: put
  operationId: save-albums-user
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-library-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/albums
  method: delete
  operationId: remove-albums-user
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-library-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/albums/contains
  method: get
  operationId: check-users-saved-albums
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-library-read
    token:
      max-ttl: 3600
    audit: none
- path: /me/tracks
  method: get
  operationId: get-users-saved-tracks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-library-read
    token:
      max-ttl: 3600
    audit: none
- path: /me/tracks
  method: put
  operationId: save-tracks-user
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-library-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/tracks
  method: delete
  operationId: remove-tracks-user
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-library-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/tracks/contains
  method: get
  operationId: check-users-saved-tracks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-library-read
    token:
      max-ttl: 3600
    audit: none
- path: /me/episodes
  method: get
  operationId: get-users-saved-episodes
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-library-read
    - user-read-playback-position
    token:
      max-ttl: 3600
    audit: none
- path: /me/episodes
  method: put
  operationId: save-episodes-user
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-library-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/episodes
  method: delete
  operationId: remove-episodes-user
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-library-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/episodes/contains
  method: get
  operationId: check-users-saved-episodes
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-library-read
    token:
      max-ttl: 3600
    audit: none
- path: /me/shows
  method: get
  operationId: get-users-saved-shows
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-library-read
    token:
      max-ttl: 3600
    audit: none
- path: /me/shows
  method: put
  operationId: save-shows-user
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-library-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/shows
  method: delete
  operationId: remove-shows-user
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-library-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/shows/contains
  method: get
  operationId: check-users-saved-shows
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-library-read
    token:
      max-ttl: 3600
    audit: none
- path: /me/top/{type}
  method: get
  operationId: get-users-top-artists-and-tracks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-top-read
    token:
      max-ttl: 3600
    audit: none
- path: /users/{user_id}
  method: get
  operationId: get-users-profile
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /users/{user_id}/playlists
  method: get
  operationId: get-list-users-playlists
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - playlist-read-collaborative
    - playlist-read-private
    token:
      max-ttl: 3600
    audit: none
- path: /users/{user_id}/playlists
  method: post
  operationId: create-playlist-for-user
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - playlist-modify-private
    - playlist-modify-public
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /playlists/{playlist_id}/followers
  method: put
  operationId: follow-playlist
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - playlist-modify-private
    - playlist-modify-public
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /playlists/{playlist_id}/followers
  method: delete
  operationId: unfollow-playlist
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - playlist-modify-private
    - playlist-modify-public
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /browse/featured-playlists
  method: get
  operationId: get-featured-playlists
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /browse/categories
  method: get
  operationId: get-categories
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /browse/categories/{category_id}
  method: get
  operationId: get-a-category
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /browse/categories/{category_id}/playlists
  method: get
  operationId: get-a-categories-playlists
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /playlists/{playlist_id}/images
  method: get
  operationId: get-playlist-cover
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /playlists/{playlist_id}/images
  method: put
  operationId: upload-custom-playlist-cover
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - playlist-modify-private
    - playlist-modify-public
    - ugc-image-upload
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /browse/new-releases
  method: get
  operationId: get-new-releases
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /me/following
  method: get
  operationId: get-followed
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-follow-read
    token:
      max-ttl: 3600
    audit: none
- path: /me/following
  method: put
  operationId: follow-artists-users
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-follow-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/following
  method: delete
  operationId: unfollow-artists-users
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-follow-modify
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/following/contains
  method: get
  operationId: check-current-user-follows
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-follow-read
    token:
      max-ttl: 3600
    audit: none
- path: /playlists/{playlist_id}/followers/contains
  method: get
  operationId: check-if-user-follows-playlist
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /audio-features
  method: get
  operationId: get-several-audio-features
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /audio-features/{id}
  method: get
  operationId: get-audio-features
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /audio-analysis/{id}
  method: get
  operationId: get-audio-analysis
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /recommendations
  method: get
  operationId: get-recommendations
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /recommendations/available-genre-seeds
  method: get
  operationId: get-recommendation-genres
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /me/player
  method: get
  operationId: get-information-about-the-users-current-playback
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-read-playback-state
    token:
      max-ttl: 3600
    audit: none
- path: /me/player
  method: put
  operationId: transfer-a-users-playback
  x-agentic-access:
    action-class: acting
    consequence: physical
    subject: required
    scope:
    - user-modify-playback-state
    audience: null
    token:
      max-ttl: 300
      exchange: true
      purpose-required: true
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/player/devices
  method: get
  operationId: get-a-users-available-devices
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-read-playback-state
    token:
      max-ttl: 3600
    audit: none
- path: /me/player/currently-playing
  method: get
  operationId: get-the-users-currently-playing-track
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-read-currently-playing
    token:
      max-ttl: 3600
    audit: none
- path: /me/player/play
  method: put
  operationId: start-a-users-playback
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-modify-playback-state
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/player/pause
  method: put
  operationId: pause-a-users-playback
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-modify-playback-state
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/player/next
  method: post
  operationId: skip-users-playback-to-next-track
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-modify-playback-state
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/player/previous
  method: post
  operationId: skip-users-playback-to-previous-track
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-modify-playback-state
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/player/seek
  method: put
  operationId: seek-to-position-in-currently-playing-track
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-modify-playback-state
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/player/repeat
  method: put
  operationId: set-repeat-mode-on-users-playback
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-modify-playback-state
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/player/volume
  method: put
  operationId: set-volume-for-users-playback
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-modify-playback-state
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/player/shuffle
  method: put
  operationId: toggle-shuffle-for-users-playback
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-modify-playback-state
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /me/player/recently-played
  method: get
  operationId: get-recently-played
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-read-recently-played
    token:
      max-ttl: 3600
    audit: none
- path: /me/player/queue
  method: get
  operationId: get-queue
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    scope:
    - user-read-currently-playing
    - user-read-playback-state
    token:
      max-ttl: 3600
    audit: none
- path: /me/player/queue
  method: post
  operationId: add-to-queue
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    scope:
    - user-modify-playback-state
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /markets
  method: get
  operationId: get-available-markets
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none