Skip to main content
smolboard runs the speaker side of a conference: a call for speakers, review and scoring, a drag-and-drop agenda, speaker onboarding, and the public pages attendees read. One process serves the API, auth, live sync, and server-rendered pages. The API is not a separate integration layer bolted onto the product. The dashboard calls the same endpoints documented here, so anything the UI can do is available to a script.

Three families

Public feeds

The schedule, the speakers, and a subscribable calendar. No credentials. This is what the embeddable widgets render.

Functions

POST /api/fn/<name> — 94 endpoints covering the whole product. Each one enforces its own membership and role checks.

Entities

GET /api/entities/<Entity> — direct row access over 36 entities, filtered by row-level policies.

Try it without an account

The public feeds work right now, against the live demo:
That returns the published sessions with their rooms, tracks, times, and speakers — the same payload the schedule widget renders.

Errors

Every endpoint fails the same shape, so one handler covers all of them:
INVALID_ARGS for a bad request body, FORBIDDEN when you are authenticated but not permitted, NOT_FOUND for a missing row or an internal function, and CONFLICT when the operation contradicts current state.
This reference is read live from /api/openapi.json, which the running application generates from its own manifest. It cannot drift from the code: if an endpoint is listed here, the router serves it. Functions marked internal are excluded, because the router refuses external calls to them.