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

Work with this as data

Every access contract here is available over the APIs.io API and to AI agents over MCP. Agentic Access is not yet its own endpoint on the v1 API. Reach it through catalog search and the tag graph, or the MCP server.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for agentic access

3 MCP tools reach this
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
Search the catalog
curl "https://apis.io/api/v1/search?q=bluesky-agentic-access&limit=10"
Everything under a tag
curl "https://apis.io/api/v1/tags/bluesky-agentic-access"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.