Bluesky profile API
  1. Docs
  2. Bluesky
  3. Bluesky profile API

Bluesky profile API

Bluesky profile: GET /v1/bluesky/profile. 1 credit per request.

GET /v1/bluesky/profile

GET /v1/bluesky/profile

Bluesky profile.

  • Cost: 1 credit
  • Cache: Results are kept up to 30 days; send max_age_days to reuse them for free.
  • Timeout: A request still running after about 25 seconds answers 202 with a job to poll (Batch and jobs).

Parameters#

NameTypeRequiredDescription
handlestringyesHandle (alice.bsky.social) or DID (did:plc:...). Also accepted as username.

Every request also accepts:

  • trim: true for a smaller response without null fields and extra.
  • raw: true to also get the platform's original object as raw.
  • max_age_days: accept a cached result up to this many days old, for 0 credits (Caching).

Example request#

Set your key in the environment first (see Authentication).

1curl -G "https://api.socialscrape.dev/v1/bluesky/profile" \2  -H "x-api-key: $SOCIALSCRAPE_API_KEY" \3  --data-urlencode "handle=bsky.app"

Example response#

This is a sample from a recorded response, email addresses are replaced with [email protected]. Status 200.

200 OKSample response
1{2  "ok": true,3  "credits_charged": 1,4  "credits_remaining": 4999,5  "cached": false,6  "cached_at": null,7  "request_id": "req_05f7500f90e3d6adce09a3e3",8  "data": {9    "object": "profile",10    "platform": "bluesky",11    "id": "did:plc:z72i7hdynmk6r22z27h6tvur",12    "handle": "bsky.app",13    "name": "Bluesky",14    "headline": null,15    "url": "https://bsky.app/profile/bsky.app",16    "kind": "person",17    "bio": "official Bluesky account (check username👆)\n\nBugs, feature requests, feedback: [email protected]",18    "avatar_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",19    "banner_url": "https://cdn.bsky.app/img/banner/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreichzyovokfzmymz36p5jibbjrhsur6n7hjnzxrpbt5jaydp2szvna",20    "verified": false,21    "is_private": null,22    "external_url": null,23    "links": null,24    "location": null,25    "category": null,26    "created_at": "2023-04-12T04:53:57.057000Z",27    "stats": {28      "followers": 35443566,29      "following": 32,30      "posts": 901,31      "likes": null,32      "views": null33    },34    "extra": {35      "associated": {36        "activitySubscription": {37          "allowSubscriptions": "followers"38        },39        "chat": {40          "allowIncoming": "none"41        },42        "feedgens": 7,43        "labeler": false,44        "lists": 18,45        "starterPacks": 1546      },47      "did": "did:plc:z72i7hdynmk6r22z27h6tvur",48      "indexed_at": "2025-10-27T21:05:26.152Z",49      "pinned_post_uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l",50      "status": {51        "cid": "bafyreihkojqw7p22odgjcbzjh5sh4vrntow24sd4nvntpqnddrd5pqma44",52        "embed": {53          "$type": "app.bsky.embed.external#view",54          "external": {55            "description": "Elon Take The Wheel Livestream: Alex Gibney, Director of \"MUSK\"",56            "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreifbiu2m3dnnhmzq4dk6u4227p3xuq3zzqhhzvibhuojnz6unengny",57            "title": "e.w. niedermeyer is live on Streamplace",58            "uri": "https://stream.place/niedermeyer.online"59          }60        },61        "expiresAt": "2026-10-20T17:00:37.680Z",62        "isActive": false,63        "labels": [],64        "record": {65          "$type": "app.bsky.actor.status",66          "createdAt": "2026-10-20T16:00:37.680Z",67          "durationMinutes": 60,68          "embed": {69            "$type": "app.bsky.embed.external",70            "external": {71              "$type": "app.bsky.embed.external#external",72              "description": "Elon Take The Wheel Livestream: Alex Gibney, Director of \"MUSK\"",73              "thumb": {74                "$type": "blob",75                "mimeType": "image/jpeg",76                "ref": {77                  "$link": "bafkreifbiu2m3dnnhmzq4dk6u4227p3xuq3zzqhhzvibhuojnz6unengny"78                },79                "size": 19543880              },81              "title": "e.w. niedermeyer is live on Streamplace",82              "uri": "https://stream.place/niedermeyer.online"83            }84          },85          "status": "app.bsky.actor.status#live"86        },87        "status": "app.bsky.actor.status#live",88        "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.actor.status/self"89      },90      "verification": {91        "trustedVerifierStatus": "valid",92        "verifications": [],93        "verifiedStatus": "none"94      }95    }96  },97  "cursor": null,98  "has_more": null99}

Response#

A Profile object in data.

See Data models for every field. The envelope around data is described in Responses.

Errors#

Failures are free: credits_charged is 0. Branch on error.code, never on the message.

CodeHTTPRetryMeaning
invalid_params400noA parameter is missing, unknown or has the wrong type.
not_found404noThe platform says this profile, post or item does not exist.

Every request can also fail with the account and platform errors listed on the Errors page.

Example error:

1{2  "ok": false,3  "error": {4    "code": "not_found",5    "message": "The platform says this profile, post or item does not exist.",6    "retryable": false7  },8  "credits_charged": 0,9  "request_id": "req_5981ca1c045ada67b4d03451"10}