Horbit Developers
Posts

Published posts

GET
/v1/public/blog/posts

Newest first by default. Filter by category, tag, author, featured flag and publish date; search title, excerpt and body; page with page/limit (max 100). Bodies are left out unless include=content.

Authorization

x-api-key
headerx-api-key<token>

A tenant API key — secret (htk_…) or, where allowed, publishable (hpk_…).

Query Parameters

page?number
limit?number
category?array<string>

Category slug(s) or id(s), comma separated. A post matches if it is in any of them. Includes posts in child categories.

tag?array<string>

Tag slug(s) or id(s), comma separated. Matches any by default — see tagMatch.

tagMatch?string

all returns only posts carrying every tag in tag.

Value in"any""all"
author?string

Author id.

featured?boolean

Only featured (pinned) posts, or only non-featured with false.

publishedFrom?string

Published on or after.

Formatdate-time
publishedTo?string

Published on or before.

Formatdate-time
exclude?array<string>

Leave these post ids or slugs out (e.g. the post being read, for a "more posts" strip).

sort?string
Value in"publishedAt:desc""publishedAt:asc""title:asc""title:desc""viewCount:desc""commentCount:desc""reactionCount:desc""updatedAt:desc"
include?array<string>

Extra fields on each list item: content (rendered html), design (raw blocks), toc. Left out by default to keep lists small.

search?string

Response Body

A page of published posts. Add include=content for bodies.

response?unknownapplication/json
curl -X GET 'https://api.horbit.ng/v1/public/blog/posts'
{  "status": true,  "message": "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    }  ],  "meta": {    "totalItems": 42,    "itemsCount": 1,    "itemsPerPage": 10,    "totalPages": 5,    "currentPage": 1  }}