content
Collections, entries, and series fragments. The admin UI supports writing markdown content with blob:// and series:// embeds. Collections are managed in the admin UI; series fragments are reusable markdown blocks that can be spliced into entries.
Public API
GET
/api/collections
{ "collections": [Collection, …] }
GET
/api/entries?collection=slug
{ "entries": [Entry, …] } — published only
GET
/api/entries/{slug}
Entry —
404 if missing/draft; strong ETag
GET
/api/series
{ "series": [Series, …] }
GET
/api/series/{slug}
Series —
404 if missing; strong ETag
GET
/status
{ "service": "content", "ok": true, "collections": N }Write endpoints (POST /api/entries, PUT /api/entries/{slug}, DELETE /api/entries/{slug}, POST /api/series) require an API key.
Record Shapes
Collection
{
"slug": "string",
"name": "string",
"description": "string?",
"createdAt": "2024-01-01T00:00:00Z",
"entryCount": 0
}
Entry
{
"collection": "string",
"slug": "string",
"cid": "bafk…",
"title": "string",
"excerpt": "string?",
"body": "markdown",
"tags": ["string"],
"published": true,
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
}
Series
{
"slug": "string",
"cid": "bafk…",
"title": "string?",
"body": "markdown",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
}
Body URIs
Entry and post body markdown embeds two custom URIs. Resolve them before rendering:
blob://<cid>— rewrite tohttps://blobs.farfield.systems/blobs/<cid>. For dimensions, blurhash, or a blur-up placeholder, readGET /blobs/<cid>/meta.— fetchGET /api/series/<slug>and splice the fragment'sbodymarkdown in place of the whole image construct. The fragment itself containsblob://images.