API

Ohlow has two HTTP surfaces. The app API under /api powers the website and editor and is authenticated with your session cookie. The public API under /v1 is served by the Rust service (apps/api) and is read-only.

Public API (v1)

MethodPathReturns
GET/v1/healthService health (Rust API)
GET/v1/profiles/{username}Public profile: display name, avatar, signal, published pages
GET/v1/profiles/{username}/pages/{slug}Published page document (validated, version 1)
GET/v1/profiles/{username}/statsPublic totals: views (bots excluded)

Only public, published data is exposed. Unlisted and private pages, emails, analytics details and drafts never are.

Errors

Every error has the same shape on both surfaces:

{ "error": { "code": "not_found", "message": "Profile not found." } }

Rate limits

Public endpoints allow 120 requests per minute per IP. Exceeding it returns 429 with code rate_limited.

Page document format

Pages are JSON documents with schema: "ohlow.page" and version: 1: a mode, a theme (tokens, fonts, moods), scenes, a flat map of elements (each with geometry, style, props, overrides per breakpoint, motion and interactions) and variables. The TypeScript types live in packages/schema, and every write is validated against the same Zod schema.

Roadmap

Personal API tokens, write endpoints, webhooks and generated SDKs are planned. They're not available yet.