Open in ChatGPT
Coding with AI?
Connect your agent to our MCP and let it integrate any endpoint for you in one shot.

Bluesky Post Quotes

Get the posts that quote a Bluesky post, newest first. Returns the full quoting post with its text, author, engagement metrics, and media.

Endpoint

GET /v1/bluesky/post/quotes

Price: $0.003 per page Free tier: 50 requests/month

Provide exactly one of url or post_id.

Parameters

Parameter Required Description
url One required Bluesky post URL, e.g. https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l (max 500 characters). Provide either url or post_id.
post_id One required The post’s AT URI as returned in post_id, e.g. at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l (max 200 characters). Provide either url or post_id.
pages No Number of pages to fetch, 1-20 (default: 1). Each page returns up to 50 posts; you are billed per page returned.
get_sentiment No Set to true to add AI emotion analysis (Plutchik’s Wheel) to each result. Adds +$0.001 per page to the cost. Returns emotion scores, dominant emotion, intensity, and polarity.

Response Fields

Field Type Description
quotes array Array of quoting posts, newest first
quotes[].title string Post title (format: @handle on Bluesky)
quotes[].url string Direct link to the post
quotes[].date string Publication date and time (UTC, YYYY-MM-DD HH:MM:SS)
quotes[].author string Author’s Bluesky handle
quotes[].author_name string Author’s display name
quotes[].author_id string Author’s DID (permanent account ID)
quotes[].author_verified boolean Whether the author is verified
quotes[].source string "Bluesky"
quotes[].domain string "bsky.app"
quotes[].snippet string Post text
quotes[].likes integer Number of likes
quotes[].replies integer Number of replies
quotes[].reposts integer Number of reposts
quotes[].quotes integer Number of quote posts
quotes[].bookmarks integer Number of bookmarks
quotes[].lang string Post language code (e.g. en), empty when not set
quotes[].is_reply boolean Whether the post is a reply
quotes[].in_reply_to_id string post_id of the post replied to (empty when not a reply)
quotes[].is_quote boolean Whether the post quotes another post
quotes[].quoted_post object/null The quoted post (post_id, url, date, author, author_name, author_verified, snippet, likes, reposts), or null
quotes[].hashtags string[] Hashtags used in the post
quotes[].mentions string[] Handles mentioned in the post
quotes[].links string[] URLs linked in the post text
quotes[].link_preview object/null Link card for posts sharing a URL (url, title, description, image_url), or null
quotes[].media_type string text, image, video, or carousel
quotes[].image_url string Full-size image URL for image posts, the thumbnail for video posts, empty for text-only
quotes[].video_url string Video playlist URL (HLS) for video posts, empty otherwise
quotes[].carousel_media array Images of a multi-image post (image_url, thumbnail_url, alt, width, height); empty otherwise
quotes[].post_id string The post’s AT URI (pass it as post_id to the post endpoints)
quotes[].sentiment object/null Emotion analysis results. Only present when get_sentiment=true. Returns null if analysis fails.
quotes[].sentiment.emotions object Plutchik emotion scores (0-100) for: joy, trust, fear, surprise, sadness, disgust, anger, anticipation.
quotes[].sentiment.dominant_emotion string The emotion with the highest score.
quotes[].sentiment.emotional_intensity integer Overall emotional intensity on a scale of 0-10.
quotes[].sentiment.polarity string Overall sentiment polarity: positive, negative, or neutral.
post_id string The post’s AT URI
total integer The post’s total quote count
pages integer Number of pages returned
count integer Number of results returned

Example Request

cURL

curl "https://apidirect.io/v1/bluesky/post/quotes?url=https%3A%2F%2Fbsky.app%2Fprofile%2Fbsky.app%2Fpost%2F3l6oveex3ii2l&pages=1" \
  -H "X-API-Key: YOUR_API_KEY"

Python

import requests

response = requests.get(
    "https://apidirect.io/v1/bluesky/post/quotes",
    headers={"X-API-Key": "YOUR_API_KEY"},
    params={"url": "https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l", "pages": 1}
)
print(response.json())

Example Response

{
  "quotes": [
    {
      "title": "@ekimdafluffyeevee.bsky.social on Bluesky",
      "url": "https://bsky.app/profile/ekimdafluffyeevee.bsky.social/post/3musg7o2nfk24",
      "date": "2026-09-05 21:26:54",
      "author": "ekimdafluffyeevee.bsky.social",
      "author_name": "michael_Mikafran",
      "author_id": "did:plc:aske3ha7qi4gm2fskxuxo64h",
      "author_verified": false,
      "source": "Bluesky",
      "domain": "bsky.app",
      "snippet": "open social network my ass being eaten by cannabis",
      "likes": 4,
      "replies": 0,
      "reposts": 0,
      "quotes": 0,
      "bookmarks": 0,
      "lang": "en",
      "is_reply": false,
      "in_reply_to_id": "",
      "is_quote": true,
      "quoted_post": {
        "post_id": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l",
        "url": "https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l",
        "date": "2024-10-17 07:06:51",
        "author": "bsky.app",
        "author_name": "Bluesky",
        "author_verified": false,
        "snippet": "👋  Bluesky is an open social network that gives creators independence from platforms, developers the freedom to build, a…",
        "likes": 63685,
        "reposts": 9530
      },
      "hashtags": [],
      "mentions": [],
      "links": [],
      "link_preview": null,
      "media_type": "text",
      "image_url": "",
      "video_url": "",
      "carousel_media": [],
      "post_id": "at://did:plc:aske3ha7qi4gm2fskxuxo64h/app.bsky.feed.post/3musg7o2nfk24"
    }
  ],
  "post_id": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.post/3l6oveex3ii2l",
  "total": 708,
  "pages": 1,
  "count": 50
}