Posts like this one
Published posts sharing the most tags and categories, then the newest.
x-api-keyx-api-key<token>A tenant API key — secret (htk_…) or, where allowed, publishable (hpk_…).
post*stringThe post's slug (recommended) or id.
page?numberlimit?numberUp to 12.
Up to limit related posts.
response?unknownapplication/jsoncurl -X GET 'https://api.horbit.ng/v1/public/blog/posts/five-lessons-open-data-hackathon/related'{ "status": true, "message": "Related posts retrieved successfully", "data": [ { "id": "3fb45a08bd18428cae49d3572c769237", "slug": "five-lessons-open-data-hackathon", "title": "Five lessons from our first open-data hackathon", "excerpt": "What 120 researchers taught us about sharing data in 48 hours.", "status": "published", "publishedAt": "2026-10-25T09:00:00.000Z", "updatedAt": "2026-10-25T10:12:44.000Z", "readingTimeMinutes": 4, "wordCount": 912, "isFeatured": true, "featuredImage": { "url": "https://cdn.horbit.ng/blog/hackathon.jpg", "alt": "Researchers around a table of laptops", "caption": "Day two, around 3am." }, "seo": { "title": "Open-data hackathon: five lessons", "description": "What 120 researchers taught us about sharing data in 48 hours.", "canonicalUrl": null, "ogImageUrl": "https://cdn.horbit.ng/blog/hackathon.jpg" }, "author": { "id": "7770812996284e9b92905104b95e36d2", "name": "Ada Obi", "avatarUrl": "https://cdn.horbit.ng/avatars/ada.jpg" }, "categories": [ { "id": "9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f", "slug": "community-news", "title": "Community News", "color": "#3B9EFF", "parentId": null } ], "tags": [ { "id": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "name": "Open Data", "slug": "open-data" }, { "id": "b2c3d4e5f60718293a4b5c6d7e8f90a1", "name": "Events", "slug": "events" } ], "stats": { "views": 1284, "comments": 12, "reactions": 87, "reactionCounts": { "like": 51, "love": 20, "clap": 12, "insightful": 4 } }, "commentsOpen": true, "reactionsOpen": true } ]}One post, with its rendered body GET
`content.html` is the body; `content.toc` lists its headings (each heading has the matching `id`). `previous`/`next` are the neighbouring published posts. Counting a view is a separate call — see `POST /posts/{post}/views`.
Approved comments, threaded GET
Top-level comments are paged (`page`/`limit`, max 100); each carries its whole reply tree in `replies`. Pinned comments come first. `bodyHtml` is the comment escaped and split into `<p class="hb-comment__paragraph">`. Emails are never returned; `avatarUrl` is a Gravatar.