↑ ↓ to move ↵ to open
Bluesky API reference

Bluesky Author Feed

bluesky.feed.get_author_feed

List an account's posts and reposts, newest first, with text, author, language and time, page by page.

At a glance

Endpoint ID
bluesky.feed.get_author_feed
Price
0.75–150 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_author_feed
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_author_feed",  "input": {    "actor": "bsky.app"  }}'

Input

FieldTypeRequiredWhat it doesExample
actor string yes The account's handle or DID. bsky.app
cursor string no Pass next_cursor from the last response to get the next page.
limit integer no How many posts to return.
max_pages integer no How many pages to read in this call.

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
{  "has_more": true,  "total_returned": 25,  "posts": [    {      "text": "The modern research ecosystem of online tools and communities is controlled by for-profit companies.\n\nBut we think that researchers should …",      "created_at": "2026-09-30T13:22:23.989Z",      "lang": "en",      "uri": "at://did:plc:ifn645rwvsuolxg7o3w7ouo4/app.bsky.feed.post/3mwqgsd4cgs2a",      "author": {        "display_name": "Aster ID",        "handle": "aster.id",        "did": "did:plc:ifn645rwvsuolxg7o3w7ouo4"      }    },    {      "text": "Happy opening day of hockey season, NHL fans! \n\nKeep up with all 1,344 regular season games with this starter pack of hockey writers.",      "created_at": "2026-09-29T19:43:14.855Z",      "lang": "en",      "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3mwolmfws5k2r",      "author": {        "display_name": "Bluesky",        "handle": "bsky.app",        "did": "did:plc:z72i7hdynmk6r22z27h6tvur"      }    }  ]}

Fields

FieldTypeWhat it isExample
posts[].text string The post's text. The modern research ecosystem of online tools and communities i…
posts[].author.handle string The account's handle. aster.id
posts[].created_at string When it was posted. 2026-09-30T13:22:23.989Z
posts[].lang string The post's language. en
posts[].uri string The post's permanent address on Bluesky. at://did:plc:ifn645rwvsuolxg7o3w7ouo4/app.bsky.feed.post/3mwqgs…
posts[].author.display_name string The author's display name. Aster ID
posts[].author object Who posted it. 3 fields
posts[].author.did string The author's permanent Bluesky ID. did:plc:ifn645rwvsuolxg7o3w7ouo4
has_more boolean Whether more results are available. true
posts array The account's posts. 25 records
total_returned integer How many results this answer holds. 25

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.