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