AT Protocol actor API

Actor (user) profile, search, and preference operations

Operations 6

GET /app.bsky.actor.getProfile Get Profile #
GET /app.bsky.actor.getProfiles Get Profiles #
GET /app.bsky.actor.searchActors Search Actors #
GET /app.bsky.actor.getPreferences Get Preferences #
POST /app.bsky.actor.putPreferences Put Preferences #
GET /app.bsky.actor.getSuggestions Get Suggestions #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

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

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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
This API
curl "https://apis.io/api/v1/apis/atproto-actor-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

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.

OpenAPI Specification

atproto-actor-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Bluesky Application API (app.bsky) Actor API
  description: The Bluesky application-layer Lexicon API providing feed, actor, graph, notification, and video endpoints for the microblogging application built on AT Protocol. The AppView is accessible unauthenticated at public.api.bsky.app for read operations, and at api.bsky.app for authenticated write operations. Schemas are defined using Lexicon, AT Protocol's schema definition language.
  version: 1.0.0
  contact:
    name: Bluesky
    url: https://docs.bsky.app/
  license:
    name: MIT / Apache-2.0
    url: https://github.com/bluesky-social/atproto/blob/main/LICENSE.txt
servers:
- url: https://public.api.bsky.app/xrpc
  description: Public AppView (unauthenticated read operations)
- url: https://api.bsky.app/xrpc
  description: Authenticated AppView (write operations)
security:
- bearerAuth: []
- {}
tags:
- name: actor
  description: Actor (user) profile, search, and preference operations
paths:
  /app.bsky.actor.getProfile:
    get:
      operationId: app_bsky_actor_getProfile
      summary: Get Profile
      description: Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth.
      tags:
      - actor
      security:
      - {}
      - bearerAuth: []
      parameters:
      - name: actor
        in: query
        required: true
        description: Handle or DID of account to fetch profile of.
        schema:
          type: string
      responses:
        '200':
          description: Profile view
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProfileViewDetailed'
        '400':
          $ref: '#/components/responses/BadRequest'
  /app.bsky.actor.getProfiles:
    get:
      operationId: app_bsky_actor_getProfiles
      summary: Get Profiles
      description: Get detailed profile views of multiple actors.
      tags:
      - actor
      security:
      - {}
      - bearerAuth: []
      parameters:
      - name: actors
        in: query
        required: true
        description: List of handles or DIDs to fetch profiles of. Maximum 25.
        schema:
          type: array
          items:
            type: string
          maxItems: 25
        style: form
        explode: true
      responses:
        '200':
          description: Profile views
          content:
            application/json:
              schema:
                type: object
                required:
                - profiles
                properties:
                  profiles:
                    type: array
                    items:
                      $ref: '#/components/schemas/ProfileViewDetailed'
        '400':
          $ref: '#/components/responses/BadRequest'
  /app.bsky.actor.searchActors:
    get:
      operationId: app_bsky_actor_searchActors
      summary: Search Actors
      description: Find actors (profiles) matching search criteria. Does not require auth.
      tags:
      - actor
      security:
      - {}
      - bearerAuth: []
      parameters:
      - name: q
        in: query
        required: false
        description: Search query string. Syntax, operators, and ranking of results subject to change.
        schema:
          type: string
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 25
      - name: cursor
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Matching actors
          content:
            application/json:
              schema:
                type: object
                required:
                - actors
                properties:
                  cursor:
                    type: string
                  actors:
                    type: array
                    items:
                      $ref: '#/components/schemas/ProfileView'
        '400':
          $ref: '#/components/responses/BadRequest'
  /app.bsky.actor.getPreferences:
    get:
      operationId: app_bsky_actor_getPreferences
      summary: Get Preferences
      description: Get private preferences attached to the current account.
      tags:
      - actor
      responses:
        '200':
          description: User preferences
          content:
            application/json:
              schema:
                type: object
                required:
                - preferences
                properties:
                  preferences:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /app.bsky.actor.putPreferences:
    post:
      operationId: app_bsky_actor_putPreferences
      summary: Put Preferences
      description: Set the private preferences attached to the account.
      tags:
      - actor
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - preferences
              properties:
                preferences:
                  type: array
                  items:
                    type: object
                    additionalProperties: true
      responses:
        '200':
          description: Preferences updated
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /app.bsky.actor.getSuggestions:
    get:
      operationId: app_bsky_actor_getSuggestions
      summary: Get Suggestions
      description: Get a list of suggested actors (tending toward familiarity).
      tags:
      - actor
      security:
      - {}
      - bearerAuth: []
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 50
      - name: cursor
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Suggested actors
          content:
            application/json:
              schema:
                type: object
                required:
                - actors
                properties:
                  cursor:
                    type: string
                  actors:
                    type: array
                    items:
                      $ref: '#/components/schemas/ProfileView'
components:
  schemas:
    ProfileView:
      type: object
      required:
      - did
      - handle
      properties:
        did:
          type: string
        handle:
          type: string
        displayName:
          type: string
        description:
          type: string
        avatar:
          type: string
          format: uri
        associated:
          type: object
          additionalProperties: true
        indexedAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
        viewer:
          $ref: '#/components/schemas/ViewerState'
        labels:
          type: array
          items:
            $ref: '#/components/schemas/Label'
    ViewerState:
      type: object
      description: Metadata about the relationship between the requesting account and the subject account.
      properties:
        muted:
          type: boolean
        mutedByList:
          type: object
          additionalProperties: true
        blockedBy:
          type: boolean
        blocking:
          type: string
          description: AT-URI of the blocking record, if present
        blockingByList:
          type: object
          additionalProperties: true
        following:
          type: string
          description: AT-URI of the follow record, if present
        followedBy:
          type: string
          description: AT-URI of the follow record from the subject to the requester
        knownFollowers:
          type: object
          additionalProperties: true
    Error:
      type: object
      required:
      - error
      - message
      properties:
        error:
          type: string
        message:
          type: string
    Label:
      type: object
      required:
      - src
      - uri
      - val
      - cts
      properties:
        ver:
          type: integer
        src:
          type: string
          description: DID of the actor who created this label
        uri:
          type: string
          description: AT URI of the record, repository (account), or other resource this label applies to
        cid:
          type: string
          description: Optionally constrains label to specific version of record/blob
        val:
          type: string
          description: The short string name of the value or type of this label
          maxLength: 128
        neg:
          type: boolean
          description: If true, this is a negation label, overwriting a previous label
        cts:
          type: string
          format: date-time
          description: Timestamp when this label was created
        exp:
          type: string
          format: date-time
          description: Timestamp at which this label expires
    ProfileViewDetailed:
      type: object
      required:
      - did
      - handle
      properties:
        did:
          type: string
          description: Decentralized Identifier
        handle:
          type: string
          description: User handle (e.g., user.bsky.social)
        displayName:
          type: string
          maxLength: 640
        description:
          type: string
          maxLength: 2560
        avatar:
          type: string
          format: uri
        banner:
          type: string
          format: uri
        followersCount:
          type: integer
        followsCount:
          type: integer
        postsCount:
          type: integer
        associated:
          type: object
          description: Associated account data (lists, feeds, labeler, etc.)
          additionalProperties: true
        indexedAt:
          type: string
          format: date-time
        createdAt:
          type: string
          format: date-time
        viewer:
          $ref: '#/components/schemas/ViewerState'
        labels:
          type: array
          items:
            $ref: '#/components/schemas/Label'
  responses:
    Unauthorized:
      description: Authentication required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad request or validation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Access JWT obtained from com.atproto.server.createSession
externalDocs:
  description: Bluesky HTTP API Reference
  url: https://docs.bsky.app/docs/advanced-guides/atproto