Developers · Content API

Your posts, anywhere.

A simple, read-only REST API for your site, posts, pages and tags. Plain JSON. No key needed to read.

Try it
curl https://api.blgg.dev/api/public/v1/sites/cm8dt5hv00001836pb1xf6852/posts
Response
{
  "posts": [{
    "title": "Offline sync: what we learned",
    "slug": "offline-sync",
    "excerpt": "Six months, three rewrites...",
    "publishedAt": "2026-10-02",
    "author": { "name": "Minji Ahn" },
    "tags": [{ "slug": "engineering" }]
  }]
}

Build on top of your blog.

  • Your own frontendNext.js, Astro, anything.
  • Mobile appsPlain JSON, no SDK needed.
  • NewslettersPull the latest posts by tag.
  • Other systemsDocs, help centres, intranets.

Base URL

https://api.blgg.dev/api/public/v1

Authentication

Reading is public. You can send a bearer key if you like. It must match the siteId in the path, or you get a 401.

Your site ID is in the dashboard under site settings.

Endpoints

GET/sites/{siteId}Site settings: title, branding, navigation, layout
GET/sites/{siteId}/postsPublished posts, featured first. Filter with ?tag=
GET/sites/{siteId}/posts/{idOrSlug}One post with HTML body and tags
GET/sites/{siteId}/pagesStatic pages
GET/sites/{siteId}/pages/{pageId}One page with HTML
GET/sites/{siteId}/tagsAll tags
GET/sites/{siteId}/tags/{slug}One tag
GET/sites/{siteId}/navigation-itemsHeader or footer links. Filter with ?group=

Errors and caching

  • Missing post, page or tag: 404, with that key set to null.
  • Wrong or mismatched key: 401.
  • Only published posts. Drafts are never exposed.
  • Read-only. Write in Quillhive, or through MCP.