HonestHook

RankingsSign in

Home · Docs · Endpoints · bluesky/post

bluesky/post — one post by its AT Protocol URI

A single Bluesky post with likes, reposts, replies and quotes. The first platform route not keyed by a handle.

The call

PathGET /api/v1/bluesky/post
Catalogue idbluesky/post
Cost1 credit per call. A call that finds nothing costs nothing.
KeyRequired — Authorization: Bearer hk_live_...

Parameters (1)

NameInRequired
uriqueryyes

That list is the whole list, and anything else is ignored in silence. An undeclared parameter is not rejected — it produces no error, no warning and no filtering. Check a parameter against this table before assuming a narrower result came back.

What the parameter list does not tell you

THE PARAMETER IS `uri`, NOT `handle`. This is the first platform-specific route in the API that does not identify its subject by account, and the precedent is `hackernews/story`, which takes an `id` for the same reason: you are asking about one document, not about an account's output. Pass the full AT Protocol URI.

The parser behind it predates the route. `normalizarThread` has been in the normalisation layer since early on, with its own test and a committed 289,652-byte fixture, and no route used it. The endpoint opened a door that was already built, which is why it arrived with test coverage rather than needing new coverage written for it.

THE REPLIES ARE LEFT OUT ON PURPOSE. The fixture document carries 193 of them. Returning a reply tree would make a single-post response unbounded in size and would quietly turn one call into a bulk fetch of other people's posts — including people who are not the subject of your query. You get the post and its four counters.

`limit` is not declared, because the document holds one post rather than a pageable list. Same rule as `pinterest/boards` and `threads/posts`: a parameter is declared when the route reads it, and not otherwise.

Why there is no success body on this page

The 200 body for this endpoint is not transcribed here. Reading it needs a client key, and there is no client key on the machine these pages were built from — internal keys exist only as hashes, by design. An example we never received would look exactly like one we did, so instead of composing one, the response shape is documented field by field on the schema pages below. Those are generated from the contract and tested against it in both directions; an invented example would be tested by nothing.

Response shapes (3)

Error codes (8)

Every one of them carries the same body shape: ApiError. The error value is a stable string you can branch on — branch on that, never on the message text.

400 · 401 · 402 · 404 · 405 · 451 · 503 · 502

Machine-readable

This endpoint is in /openapi.json (OpenAPI 3.1), with its cost on the operation itself. If you are generating a client, use the spec rather than this page — and note that the spec is filtered by what is switched on right now, so it is the better answer to "can I call this today".

The other 6 endpoint pages

archive/trends · archive/movers · archive/coverage · profile/history · youtube/channel · pinterest/boards

← All endpoint pages · Recipes · Schemas · Full docs