Bluesky · Agentic Access

Bluesky Agentic Access

x-agentic-access generated

Bluesky exposes 168 API operations that an AI agent could call, of which 75 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: 93 read, 61 write, 9 physical, and 5 safety-critical.

5 operations are classed safety-critical and should require human-in-the-loop approval at runtime.

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.

At-ProtocolDecentralizedFederatedOpen-SourceSocial NetworksSocial-Media
Operations: 168 Acting: 75 Human-in-the-loop: 5 Method: generated

By consequence

read 93 write 61 physical 9 safety-critical 5

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
POST /xrpc/com.atproto.admin.disableAccountInvites safety-critical required
POST /xrpc/com.atproto.admin.disableInviteCodes safety-critical required
POST /xrpc/com.atproto.server.requestPasswordReset safety-critical required
POST /xrpc/com.atproto.server.resetPassword safety-critical required
POST /xrpc/com.atproto.server.revokeAppPassword safety-critical required
POST /xrpc/app.bsky.feed.sendInteractions physical conditional
POST /xrpc/app.bsky.graph.muteActor physical conditional
POST /xrpc/app.bsky.graph.muteActorList physical conditional
POST /xrpc/chat.bsky.convo.sendMessage physical conditional
POST /xrpc/chat.bsky.convo.sendMessageBatch physical conditional
POST /xrpc/com.atproto.admin.sendEmail physical conditional
POST /xrpc/com.atproto.identity.requestPlcOperationSignature physical conditional
POST /xrpc/com.atproto.server.requestEmailConfirmation physical conditional
POST /xrpc/com.atproto.server.requestEmailUpdate physical conditional

Source

Agentic Access

Raw ↑
generated: '2026-07-15'
method: generated
source: openapi/bluesky-openapi.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: 168
  by_action_class:
    connected: 93
    acting: 75
  by_consequence:
    read: 93
    write: 61
    physical: 9
    safety-critical: 5
  human_in_the_loop_required: 5
operations:
- path: /xrpc/app.bsky.actor.getPreferences
  method: get
  operationId: actorGetPreferences
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.actor.getProfile
  method: get
  operationId: actorGetProfile
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.actor.getProfiles
  method: get
  operationId: actorGetProfiles
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.actor.getSuggestions
  method: get
  operationId: actorGetSuggestions
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.actor.putPreferences
  method: post
  operationId: actorPutPreferences
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/app.bsky.actor.searchActors
  method: get
  operationId: actorSearchActors
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.actor.searchActorsTypeahead
  method: get
  operationId: actorSearchActorsTypeahead
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.describeFeedGenerator
  method: get
  operationId: feedDescribeFeedGenerator
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getActorFeeds
  method: get
  operationId: feedGetActorFeeds
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getActorLikes
  method: get
  operationId: feedGetActorLikes
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getAuthorFeed
  method: get
  operationId: feedGetAuthorFeed
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getFeed
  method: get
  operationId: feedGetFeed
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getFeedGenerator
  method: get
  operationId: feedGetFeedGenerator
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getFeedGenerators
  method: get
  operationId: feedGetFeedGenerators
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getFeedSkeleton
  method: get
  operationId: feedGetFeedSkeleton
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getLikes
  method: get
  operationId: feedGetLikes
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getListFeed
  method: get
  operationId: feedGetListFeed
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getPostThread
  method: get
  operationId: feedGetPostThread
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getPosts
  method: get
  operationId: feedGetPosts
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getQuotes
  method: get
  operationId: feedGetQuotes
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getRepostedBy
  method: get
  operationId: feedGetRepostedBy
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getSuggestedFeeds
  method: get
  operationId: feedGetSuggestedFeeds
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.getTimeline
  method: get
  operationId: feedGetTimeline
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.searchPosts
  method: get
  operationId: feedSearchPosts
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.feed.sendInteractions
  method: post
  operationId: feedSendInteractions
  x-agentic-access:
    action-class: acting
    consequence: physical
    subject: required
    audience: null
    token:
      max-ttl: 300
      exchange: true
      purpose-required: true
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/app.bsky.graph.getActorStarterPacks
  method: get
  operationId: graphGetActorStarterPacks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getBlocks
  method: get
  operationId: graphGetBlocks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getFollowers
  method: get
  operationId: graphGetFollowers
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getFollows
  method: get
  operationId: graphGetFollows
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getKnownFollowers
  method: get
  operationId: graphGetKnownFollowers
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getList
  method: get
  operationId: graphGetList
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getListBlocks
  method: get
  operationId: graphGetListBlocks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getListMutes
  method: get
  operationId: graphGetListMutes
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getLists
  method: get
  operationId: graphGetLists
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getMutes
  method: get
  operationId: graphGetMutes
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getRelationships
  method: get
  operationId: graphGetRelationships
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getStarterPack
  method: get
  operationId: graphGetStarterPack
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getStarterPacks
  method: get
  operationId: graphGetStarterPacks
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.getSuggestedFollowsByActor
  method: get
  operationId: graphGetSuggestedFollowsByActor
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.graph.muteActor
  method: post
  operationId: graphMuteActor
  x-agentic-access:
    action-class: acting
    consequence: physical
    subject: required
    audience: null
    token:
      max-ttl: 300
      exchange: true
      purpose-required: true
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/app.bsky.graph.muteActorList
  method: post
  operationId: graphMuteActorList
  x-agentic-access:
    action-class: acting
    consequence: physical
    subject: required
    audience: null
    token:
      max-ttl: 300
      exchange: true
      purpose-required: true
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/app.bsky.graph.muteThread
  method: post
  operationId: graphMuteThread
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/app.bsky.graph.unmuteActor
  method: post
  operationId: graphUnmuteActor
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/app.bsky.graph.unmuteActorList
  method: post
  operationId: graphUnmuteActorList
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/app.bsky.graph.unmuteThread
  method: post
  operationId: graphUnmuteThread
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/app.bsky.labeler.getServices
  method: get
  operationId: labelerGetServices
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.notification.getUnreadCount
  method: get
  operationId: notificationGetUnreadCount
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.notification.listNotifications
  method: get
  operationId: notificationListNotifications
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.notification.putPreferences
  method: post
  operationId: notificationPutPreferences
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/app.bsky.notification.registerPush
  method: post
  operationId: notificationRegisterPush
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/app.bsky.notification.updateSeen
  method: post
  operationId: notificationUpdateSeen
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/app.bsky.video.getJobStatus
  method: get
  operationId: videoGetJobStatus
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.video.getUploadLimits
  method: get
  operationId: videoGetUploadLimits
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/app.bsky.video.uploadVideo
  method: post
  operationId: videoUploadVideo
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/chat.bsky.actor.deleteAccount
  method: post
  operationId: chatActorDeleteAccount
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/chat.bsky.actor.exportAccountData
  method: get
  operationId: chatActorExportAccountData
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/chat.bsky.convo.deleteMessageForSelf
  method: post
  operationId: chatConvoDeleteMessageForSelf
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/chat.bsky.convo.getConvo
  method: get
  operationId: chatConvoGetConvo
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/chat.bsky.convo.getConvoForMembers
  method: get
  operationId: chatConvoGetConvoForMembers
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/chat.bsky.convo.getLog
  method: get
  operationId: chatConvoGetLog
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/chat.bsky.convo.getMessages
  method: get
  operationId: chatConvoGetMessages
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/chat.bsky.convo.leaveConvo
  method: post
  operationId: chatConvoLeaveConvo
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/chat.bsky.convo.listConvos
  method: get
  operationId: chatConvoListConvos
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/chat.bsky.convo.muteConvo
  method: post
  operationId: chatConvoMuteConvo
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/chat.bsky.convo.sendMessage
  method: post
  operationId: chatConvoSendMessage
  x-agentic-access:
    action-class: acting
    consequence: physical
    subject: required
    audience: null
    token:
      max-ttl: 300
      exchange: true
      purpose-required: true
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/chat.bsky.convo.sendMessageBatch
  method: post
  operationId: chatConvoSendMessageBatch
  x-agentic-access:
    action-class: acting
    consequence: physical
    subject: required
    audience: null
    token:
      max-ttl: 300
      exchange: true
      purpose-required: true
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/chat.bsky.convo.unmuteConvo
  method: post
  operationId: chatConvoUnmuteConvo
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/chat.bsky.convo.updateRead
  method: post
  operationId: chatConvoUpdateRead
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/chat.bsky.moderation.getActorMetadata
  method: get
  operationId: chatModerationGetActorMetadata
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/chat.bsky.moderation.getMessageContext
  method: get
  operationId: chatModerationGetMessageContext
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/chat.bsky.moderation.updateActorAccess
  method: post
  operationId: chatModerationUpdateActorAccess
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.admin.deleteAccount
  method: post
  operationId: adminDeleteAccount
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.admin.disableAccountInvites
  method: post
  operationId: adminDisableAccountInvites
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /xrpc/com.atproto.admin.disableInviteCodes
  method: post
  operationId: adminDisableInviteCodes
  x-agentic-access:
    action-class: acting
    consequence: safety-critical
    subject: required
    audience: null
    token:
      max-ttl: 120
      exchange: true
      purpose-required: true
      proof-of-possession: true
    escalation:
      human-in-the-loop: required
    audit: required
- path: /xrpc/com.atproto.admin.enableAccountInvites
  method: post
  operationId: adminEnableAccountInvites
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.admin.getAccountInfo
  method: get
  operationId: adminGetAccountInfo
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.admin.getAccountInfos
  method: get
  operationId: adminGetAccountInfos
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.admin.getInviteCodes
  method: get
  operationId: adminGetInviteCodes
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.admin.getSubjectStatus
  method: get
  operationId: adminGetSubjectStatus
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.admin.searchAccounts
  method: get
  operationId: adminSearchAccounts
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.admin.sendEmail
  method: post
  operationId: adminSendEmail
  x-agentic-access:
    action-class: acting
    consequence: physical
    subject: required
    audience: null
    token:
      max-ttl: 300
      exchange: true
      purpose-required: true
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.admin.updateAccountEmail
  method: post
  operationId: adminUpdateAccountEmail
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.admin.updateAccountHandle
  method: post
  operationId: adminUpdateAccountHandle
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.admin.updateAccountPassword
  method: post
  operationId: adminUpdateAccountPassword
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.admin.updateSubjectStatus
  method: post
  operationId: adminUpdateSubjectStatus
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.identity.getRecommendedDidCredentials
  method: get
  operationId: identityGetRecommendedDidCredentials
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.identity.requestPlcOperationSignature
  method: post
  operationId: identityRequestPlcOperationSignature
  x-agentic-access:
    action-class: acting
    consequence: physical
    subject: required
    audience: null
    token:
      max-ttl: 300
      exchange: true
      purpose-required: true
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.identity.resolveHandle
  method: get
  operationId: identityResolveHandle
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.identity.signPlcOperation
  method: post
  operationId: identitySignPlcOperation
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.identity.submitPlcOperation
  method: post
  operationId: identitySubmitPlcOperation
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.identity.updateHandle
  method: post
  operationId: identityUpdateHandle
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.label.queryLabels
  method: get
  operationId: labelQueryLabels
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.moderation.createReport
  method: post
  operationId: moderationCreateReport
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.repo.applyWrites
  method: post
  operationId: repoApplyWrites
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.repo.createRecord
  method: post
  operationId: repoCreateRecord
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.repo.deleteRecord
  method: post
  operationId: repoDeleteRecord
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.repo.describeRepo
  method: get
  operationId: repoDescribeRepo
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.repo.getRecord
  method: get
  operationId: repoGetRecord
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.repo.importRepo
  method: post
  operationId: repoImportRepo
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.repo.listMissingBlobs
  method: get
  operationId: repoListMissingBlobs
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.repo.listRecords
  method: get
  operationId: repoListRecords
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.repo.putRecord
  method: post
  operationId: repoPutRecord
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.repo.uploadBlob
  method: post
  operationId: repoUploadBlob
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.server.activateAccount
  method: post
  operationId: serverActivateAccount
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.server.checkAccountStatus
  method: get
  operationId: serverCheckAccountStatus
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /xrpc/com.atproto.server.confirmEmail
  method: post
  operationId: serverConfirmEmail
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.server.createAccount
  method: post
  operationId: serverCreateAccount
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.server.createAppPassword
  method: post
  operationId: serverCreateAppPassword
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.server.createInviteCode
  method: post
  operationId: serverCreateInviteCode
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.server.createInviteCodes
  method: post
  operationId: serverCreateInviteCodes
  x-agentic-access:
    action-class: acting
    consequence: write
    subject: required
    audience: null
    token:
      max-ttl: 900
    escalation:
      human-in-the-loop: conditional
      triggers:
      - abnormal
      - high-value
    audit: required
- path: /xrpc/com.atproto.server.createSession
  method: post
  operationId: serverCrea

# --- truncated at 32 KB (49 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/bluesky/refs/heads/main/agentic-access/bluesky-agentic-access.yml