↑ ↓ to move ↵ to open
Bluesky API reference

Bluesky Post Thread

bluesky.feed.get_post_thread

Get a post with its replies, nested a few levels deep, and the post it answers.

At a glance

Endpoint ID
bluesky.feed.get_post_thread
Price
0.75 credits per call; failed calls are free
Runs for up to
120 seconds
Request
POST /execute
Run an endpoint
MCP tool when pinned
bluesky__feed__get_post_thread
Pin tools
OpenAPI
openapi.json
Download

Request

Send the endpoint ID as capability and its fields as input. Set UPSCRAPE_API_KEY to your key first.

curl --request POST \  --url https://data.upscrape.com/execute \  --header "Authorization: Bearer $UPSCRAPE_API_KEY" \  --header "Content-Type: application/json" \  --header "Prefer: wait=30" \  --data '{  "capability": "bluesky.feed.get_post_thread",  "input": {    "depth": 25,    "uri": "at://did:plc:bzxbgtybz2h5untckchdlocr/app.bsky.feed.post/3mspud5re5c26"  }}'

Input

FieldTypeRequiredWhat it doesExample
uri string yes The post's at:// URI or its bsky.app link. at://did:plc:bzxbgtybz2h5untckchdlocr/app.bsky.…
depth integer no How many levels of replies to include. 25

Response

A finished call answers with HTTP 200; the data is in results[0].data, and billing.credits_charged is what it cost. A call still running after the wait answers 202: see jobs and results.

This is results[0].data from a real run:

results[0].data
{  "depth_requested": 25,  "depth_used": 0,  "thread": {    "post": {      "text": "Ready for the next step in your scientific career? \n\nApply now for a fully funded Biozentrum PhD Fellowship and explore a wide range of res…",      "created_at": "2026-08-10T10:11:01.201Z",      "lang": "en",      "uri": "at://did:plc:bzxbgtybz2h5untckchdlocr/app.bsky.feed.post/3mspud5re5c26",      "author": {        "display_name": "Biozentrum, University of Basel",        "handle": "biozentrum.unibas.ch",        "did": "did:plc:bzxbgtybz2h5untckchdlocr"      }    }  }}

Fields

FieldTypeWhat it isExample
depth_requested integer How many reply levels were asked for. 25
depth_used integer How many reply levels the thread has. 0
thread object The thread. 1 fields
thread.post object The thread's first post. 5 fields
thread.post.author object Who posted it. 3 fields
thread.post.created_at string When it was posted. 2026-08-10T10:11:01.201Z
thread.post.lang string The post's language. en
thread.post.text string The post's text. Ready for the next step in your scientific career? Apply now fo…
thread.post.uri string The post's permanent address on Bluesky. at://did:plc:bzxbgtybz2h5untckchdlocr/app.bsky.feed.post/3mspud…

If a call fails

A failed call costs nothing. The response carries an error.code you can branch on; Errors and retries lists every code and which ones to retry.

Other Bluesky endpoints

Something missing or unclear? Ask the team that builds the Bluesky endpoints.