Bluesky
GET /v1/bluesky/profile

Bluesky Profile API

Bluesky profile — handle, did, bio, counts, banner, verification{}, labels[], and associated{} (1 credit).

1 credit per request
TL;DR
Bluesky profile — handle, did, bio, counts, banner, verification{}, labels[], and associated{} (1 credit). The Bluesky Profile API (Bluesky) is a single authenticated GET request to /v1/bluesky/profile that responds with clean JSON and costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.

What is the Bluesky Profile API?

Give a Bluesky profile URL, @handle, or handle and get the public AT Protocol profile as clean JSON. Canonical profile core (same keys on every Captapi profile endpoint): platform, id, handle, url, displayName, bio, avatar, banner, followers, following, postCount, verified, createdAt. Bluesky also returns did (same as id), deprecated aliases name/posts for one release, indexedAt (AppView last indexed the profile record — not last activity), pinnedPost{uri,cid,rkey} when the account featured a post, joinedViaStarterPack when present, verified + verification{verifications[{issuer, issuerHandle, issuerDisplayName, uri, isValid, createdAt}], verifiedStatus, trustedVerifierStatus} (issuer DIDs resolved to handle/display name), moderation labels[{src, uri, cid, val, neg, createdAt, expiresAt}], and associated{lists, feedgens, starterPacks, labeler, chat, activitySubscription} so you can tell feed/labeler service accounts from people. Accepts cache / cacheMaxAge like other profile trust-layer endpoints. Flat 1 credit per call.

What you get

  • Canonical core: displayName, avatar, banner, postCount (+ name/posts aliases)
  • DID + verification{} with issuerHandle / issuerDisplayName resolved
  • pinnedPost + joinedViaStarterPack when AppView exposes them
  • Moderation labels[] (full shape) and associated{lists, feedgens, starterPacks, labeler}

Try it

Open in Playground

Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).

Parameters

Sign in to run live
curl "https://api.captapi.com/v1/bluesky/profile?url=https%3A%2F%2Fbsky.app%2Fprofile%2Fjay.bsky.team" \
  -H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."

Edit the parameters and the code updates instantly. Switch languages and hit copy.

Example response

{
  "success": true,
  "data": {
    "platform": "bluesky",
    "handle": "jay.bsky.team",
    "url": "https://bsky.app/profile/jay.bsky.team",
    "did": "did:plc:oky5czdrnfjpqslsw2a5iclo",
    "name": "Jay 🦋",
    "bio": "Founder & Chief Innovation Officer @ Bluesky\n\nWorking on @attie.ai\n\n🌱 🪴 🌳",
    "followers": 595179,
    "following": 3974,
    "posts": 4110,
    "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:oky5czdrnfjpqslsw2a5iclo/bafkreihxtnc37g7jqdcgidtkknwuswtjiijcdnc6cx4imc4oq33cnsc5da",
    "banner": "https://cdn.bsky.app/img/banner/plain/did:plc:oky5czdrnfjpqslsw2a5iclo/bafkreicgnmvhtmj4arcvwhueygbwvkucd3odvom3lxtfmn6wlqbh3yf7p4",
    "verified": true,
    "verification": {
      "verifications": [
        {
          "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur",
          "issuerHandle": "bsky.app",
          "issuerDisplayName": "Bluesky",
          "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lndslpegeo2f",
          "isValid": true,
          "createdAt": "2025-04-21T11:35:53.359Z"
        }
      ],
      "verifiedStatus": "valid",
      "trustedVerifierStatus": "none"
    },
    "labels": [],
    "associated": {
      "lists": 0,
      "feedgens": 0,
      "starterPacks": 0,
      "labeler": false,
      "chat": {
        "allowIncoming": "following",
        "allowGroupInvites": null
      },
      "activitySubscription": {
        "allowSubscriptions": "followers"
      }
    },
    "createdAt": "2022-11-17T06:31:40.296Z",
    "indexedAt": "2026-03-29T21:16:33.460Z"
  }
}

Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.

Response structure

A successful call returns success, cached, creditsUsed, and a data object with the following fields:

Top-level fields

  • platformPlatform identifier for this response (matches the endpoint's platform).
  • handleBluesky handle (e.g. bsky.app).
  • urlCanonical URL of the item.
  • didAT Protocol DID. Same as id; kept for Bluesky-native clients.
  • nameDeprecated alias of displayName — prefer displayName. Removed after one release.
  • bioProfile description / bio text.
  • followersFollower count.
  • followingFollowing count.
  • postsDeprecated alias of postCount — prefer postCount. Removed after one release.
  • avatarAvatar image URL.
  • bannerBanner image URL.
  • verifiedPrefer verifiedStatus / verification on Bluesky — this boolean is a coarse summary when present.
  • labelsModeration labels: [{src, uri, cid, val, neg, createdAt, expiresAt}]. src = labeler DID; val = label value; neg = negation; expiresAt when the label expires.
  • createdAtWhen the account was created (ISO-8601).
  • indexedAtWhen the Bluesky AppView last indexed this profile record (ISO-8601). Not last activity — createdAt is account age; use user-posts for recent posts.

Verification

The verification object contains:

  • verificationsArray of objects with issuer, issuerHandle, issuerDisplayName, uri, isValid, createdAt.
  • verifiedStatusBluesky verification status string (e.g. valid, none).
  • trustedVerifierStatusWhether this account is a trusted verifier (e.g. valid, none).

Associated

The associated object contains:

  • listsLists. Example: 0.
  • feedgensNumber of custom feeds (feed generators) this account publishes.
  • starterPacksNumber of starter packs this account publishes.
  • labelerWhether this account is a Bluesky labeler (moderation service).
  • chatObject with allowIncoming, allowGroupInvites.
  • activitySubscriptionObject with allowSubscriptions.

Parameters

NameTypeRequiredDescription
urlstringYesBluesky profile URL, @handle, or handle, e.g. bsky.app/profile/handle. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble.
cachebooleanNoSet true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control. Envelope includes cached + cachedAt on hits.
cacheMaxAgestringNoMax age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope: cached + cachedAt.

Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh.

Using an AI agent? This endpoint is the MCP tool bluesky_profile via @captapi/mcp. Set it up →

How it works

  1. 1. Sign up — get 100 free credits, no card required.
  2. 2. Create a key from your dashboard.
  3. 3. Send one request to /v1/bluesky/profile and parse the JSON response.

Use cases

Profile Enrichment

Add live stats, bio, and account flags to a contact you already have.

Creator Verification

Confirm a known handle, audience size, and business/verified status before outreach.

Competitive Analysis

Track follower growth and posting cadence for accounts you already follow.

Partnership Qualification

Vet known partnership and sponsorship targets with fresh profile data.

Frequently asked questions

What does the Bluesky Profile API do?+

The Bluesky Profile API lets you fetch profile or page details and audience stats from a public Bluesky profile or page using one GET request to /v1/bluesky/profile. It returns clean JSON — no OAuth or infrastructure setup required.

How many credits does the Bluesky Profile API cost?+

Each successful call costs 1 credit. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.

Do I need a Bluesky API key or OAuth?+

No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.

Is the Bluesky Profile API suitable for production use?+

Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.

More Bluesky APIs

Ready to use the Bluesky Profile API?

Sign up, grab your key, and make your first call in 60 seconds.