---
title: "Bluesky Post Details API"
method: GET
path: "/v1/bluesky/post-details"
tags: ["Bluesky"]
---

# Bluesky Post Details API

`GET /v1/bluesky/post-details`

## Request

- Base URL: `https://api.captapi.com`
- URL: `https://api.captapi.com/v1/bluesky/post-details`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Post thread via getPostThread — nested replies[], facet links/mentions/hashtags, rich author (1 credit).

Pass a Bluesky post URL and get the public thread (app.bsky.feed.getPostThread) — not a duplicate of a user-posts row. Beyond the list card you get: nested replies[] with per-reply author/text/engagement (depth, default 1, max 6), parentUri/rootUri/isReply so a reply is never mistaken for a root post, facet-derived links[] (full URIs — Bluesky truncates long URLs inside text), mentions[] with did, and hashtags[], post-level labels[] + langs[], and a rich author{handle,displayName,did,avatar,createdAt,labels[],verification{},verified} matching bluesky/profile (including !no-unauthenticated compliance labels). Embeds use the same normalized type namespace as user-posts (external | images | video | quote). Flat 1 credit. This is the only Captapi surface that returns Bluesky reply content.

Docs: https://captapi.com/apis/bluesky-post-details

## Query parameters

- `url` string, required
- `depth` integer
- `cache` boolean

## Response `200`

Success. The data object for this endpoint.

- object
  - `success` unknown, required
  - `data` object, required
    - `platform` string: Platform identifier for this response (matches the endpoint's platform).
    - `uri` string: AT URI of the post (at://did…/app.bsky.feed.post/rkey).
    - `url` string: bsky.app permalink for the post.
    - `cid` string: Content ID (CID) of this post record — stable content-addressed hash.
    - `text` string: Post text body. Long URLs may be truncated here — prefer links[].url from facets.
    - `publishedAt` string: When the post record was created (ISO-8601).
    - `indexedAt` string: When the AppView indexed this post (ISO-8601).
    - `author` object
      - `handle` string: Account handle.
      - `displayName` string: Display name of the account. Canonical across profile endpoints (prefer over name).
      - `did` string: Did. Example: "did:plc:fpruhuo22xkm5o7ttr2ktxdo".
      - `avatar` string: Avatar / profile picture URL. Canonical across profile endpoints.
    - `engagement` object
      - `likes` integer: Like count (number).
      - `reposts` integer: Repost count.
      - `replies` integer: Nested reply tree from getPostThread. Each node matches the post shape (rich author, facets, engagement) plus its own replies[]. Depth controlled by the depth query param.
      - `quotes` integer: Quote count.
    - `embed` unknown

## Other responses

- `400`: Bad request: wrong platform URL, unknown endpoint, or an invalid parameter value. Not billed.
- `401`: Missing, invalid or revoked API key. Not billed.
- `402`: Not enough credits for this request. Not billed.
- `404`: The resource does not exist or is not public. Not billed.
- `422`: A required parameter is missing or has the wrong type. Not billed.
- `429`: Rate limit reached. Wait for Retry-After seconds. Not billed.
- `502`: The platform could not be reached or returned nothing usable. Retryable, not billed. 503 and 504 use the same envelope.

---

[API](https://skmtc.dev/captapi/apis/captapi-api.md) · [All operations](https://skmtc.dev/captapi/apis/captapi-api/llms.txt) · [OpenAPI document](https://skmtc.dev/captapi/apis/captapi-api/revisions/c9b9ac5ff1bd?raw)
