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

Bluesky profile posts API

A paged feed of the user's posts.

GET /v1/bluesky/profile/posts

GET /v1/bluesky/profile/posts

A paged feed of the user's posts. Pass the DID (ScrapeCreators' user_id) for faster lookups.

  • 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, user_id.

Every request also accepts:

  • cursor: the cursor from the previous page (Pagination).
  • 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/posts" \2  -H "x-api-key: $SOCIALSCRAPE_API_KEY" \3  --data-urlencode "handle=bsky.app"

Example response#

This is a sample from a recorded response, lists and long text are shortened. 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_8aa3e9618d8cefbca34029a3",8  "data": {9    "object": "list",10    "items": [11      {12        "object": "post",13        "platform": "bluesky",14        "id": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3myx7vphq3s2j",15        "url": "https://bsky.app/profile/bsky.app/post/3myx7vphq3s2j",16        "type": "image",17        "author": {18          "id": "did:plc:z72i7hdynmk6r22z27h6tvur",19          "handle": "bsky.app",20          "name": "Bluesky",21          "url": "https://bsky.app/profile/bsky.app",22          "avatar_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",23          "verified": false24        },25        "title": null,26        "text": "getting our Halloween decorations set up",27        "published_at": "2026-10-28T16:58:02.827000Z",28        "duration_seconds": null,29        "language": "en",30        "hashtags": null,31        "mentions": null,32        "stats": {33          "views": null,34          "likes": 3557,35          "comments": 223,36          "shares": 503,37          "saves": 201,38          "dislikes": null39        },40        "media": {41          "thumbnail_url": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreienhu3nspbm2f2v5q74arjtlvltdlgruzjvo6ndlggksp6l6zlf5a",42          "video_url": null,43          "audio_url": null,44          "image_urls": [45            "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreienhu3nspbm2f2v5q74arjtlvltdlgruzjvo6ndlggksp6l6zlf5a",46            "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreifpa3vyizusbzwgmnpr4wgm4nhsztxolgvjr4gmzspmpwysltrnre",47            "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreienq5z3pmk3h6yiqyfmuf7lvux6mknnfol4akfrn4fh5l7qngkwo4"48          ],49          "width": 570,50          "height": 49451        },52        "song": null,53        "location": null,54        "is_pinned": null,55        "is_sponsored": null,56        "extra": {57          "cid": "bafyreibaaieigry2etw7p6k74hvdz53i5x6myssdqhlcaoyd3edalgiuzm",58          "image_alts": [59            "Gravestone reading:\n\nHere lies StumbleUpon\n2001 - 2018\n\"Remember websites?\"",60            "Gravestone reading:\n\nHere lies Vine\n2013 - 2017\n\"Look at all those chickens\"",61            "Gravestone reading:\n\nHere lies AIM\n1997 - 2017\n\"BRB LOL\""62          ],63          "quote_count": 125,64          "repost_count": 378,65          "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3myx7vphq3s2j"66        }67      },68      {69        "object": "post",70        "platform": "bluesky",71        "id": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3myi3k45jh22z",72        "url": "https://bsky.app/profile/bsky.app/post/3myi3k45jh22z",73        "type": "video",74        "author": {75          "id": "did:plc:z72i7hdynmk6r22z27h6tvur",76          "handle": "bsky.app",77          "name": "Bluesky",78          "url": "https://bsky.app/profile/bsky.app",79          "avatar_url": "https://cdn.bsky.app/img/avatar/plain/did:plc:z72i7hdynmk6r22z27h6tvur/bafkreihwihm6kpd6zuwhhlro75p5qks5qtrcu55jp3gddbfjsieiv7wuka",80          "verified": false81        },82        "title": null,83        "text": "Also new in today’s v1.136 update: iPad support! \n\nOne of our most-requested features is finally here in beta.\n\nTry out the Bluesky app on your iPad, and if you see anything off, let us know under Settings > Beta features.",84        "published_at": "2026-10-22T16:30:02.437000Z",85        "duration_seconds": null,86        "language": "en",87        "hashtags": null,88        "mentions": null,89        "stats": {90          "views": null,91          "likes": 2110,92          "comments": 177,93          "shares": 471,94          "saves": 70,95          "dislikes": null96        },97        "media": {98          "thumbnail_url": "https://video.bsky.app/watch/did%3Aplc%3Az72i7hdynmk6r22z27h6tvur/bafkreiew3laj2to7km3kli6g5dmb7xbqygqa7otzirszqvnousjallw6eq/thumbnail.jpg",99          "video_url": "https://video.bsky.app/watch/did%3Aplc%3Az72i7hdynmk6r22z27h6tvur/bafkreiew3laj2to7km3kli6g5dmb7xbqygqa7otzirszqvnousjallw6eq/playlist.m3u8",100          "audio_url": null,101          "image_urls": null,102          "width": 2800,103          "height": 1610104        },105        "song": null,106        "location": null,107        "is_pinned": null,108        "is_sponsored": null,109        "extra": {110          "cid": "bafyreighsgdcaesmuicuhgt2rr2ijbzz6kro7yesftzv3wk3p2jzaudiya",111          "quote_count": 139,112          "repost_count": 332,113          "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3myi3k45jh22z",114          "video_alt": "Welcome screen of the Bluesky app displayed on an iPad, floating against a blue sky with clouds"115        }116      }117    ],118    "cursor": "2026-10-14T16:23:26.206Z",119    "has_more": true,120    "parent": null121  },122  "cursor": "2026-10-14T16:23:26.206Z",123  "has_more": true124}

Response#

A list of Post objects in data.items, with data.cursor and data.has_more.

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_6baac46087b50f0c360c2f2c"10}

Also served at#

These paths answer the same request, so code written for other APIs keeps working: /v1/bluesky/user/posts. See Switching from ScrapeCreators.