Spotify Agentic Access
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.
By consequence
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.
| Method | Path | Consequence | Human-in-loop |
|---|---|---|---|
| PUT | /me/player | physical | conditional |
| PUT | /playlists/{playlist_id}/items | physical | conditional |
| PUT | /playlists/{playlist_id}/tracks | physical | conditional |
Source
Agentic Access
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