Approved comments, threaded
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.
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?numberorder?stringOrder of top-level comments. Replies are always oldest first. Pinned comments come first either way.
"oldest""newest"Approved comments, threaded.
response?unknownapplication/jsoncurl -X GET 'https://api.horbit.ng/v1/public/blog/posts/five-lessons-open-data-hackathon/comments'{ "status": true, "message": "Comments retrieved successfully", "data": [ { "id": "c0ffee00c0ffee00c0ffee00c0ffee00", "parentId": null, "authorName": "Chidi Okafor", "authorUrl": null, "avatarUrl": "https://www.gravatar.com/avatar/4f…?s=96&d=identicon", "isTeam": false, "isPinned": false, "body": "Licences first — exactly what our lab needed to hear.", "bodyHtml": "<p class=\"hb-comment__paragraph\">Licences first — exactly what our lab needed to hear.</p>", "createdAt": "2026-10-25T11:02:00.000Z", "editedAt": null, "replies": [ { "id": "beef0000beef0000beef0000beef0000", "parentId": "c0ffee00c0ffee00c0ffee00c0ffee00", "authorName": "Ada Obi", "authorUrl": null, "avatarUrl": "https://www.gravatar.com/avatar/9a…?s=96&d=identicon", "isTeam": true, "isPinned": false, "body": "Thanks Chidi!", "bodyHtml": "<p class=\"hb-comment__paragraph\">Thanks Chidi!</p>", "createdAt": "2026-10-25T11:20:00.000Z", "editedAt": null, "replies": [] } ] } ], "meta": { "totalItems": 1, "itemsCount": 1, "itemsPerPage": 20, "totalPages": 1, "currentPage": 1, "totalComments": 2, "commentsOpen": true }}Posts like this one GET
Published posts sharing the most tags and categories, then the newest.
Leaves a comment POST
Returns the comment and its `status`: `approved` (live now) or `pending` (waiting for a moderator) — show the reader which. Spam is accepted silently and reported as `pending`. Pass `parentId` to reply. Render `website` as a hidden honeypot field and leave it empty. Fails with 403 when comments are closed on the post, 409 on a duplicate.