API documentation

Everything you need to authenticate, pull live data, and design tools against the Lumenboard API — the same interface a real integration would use.

Getting an API key

  1. Your team receives one pre-generated API key at kickoff — check with your team lead or the run organizer if you don't have yours yet. Keys are issued per team, not per person, so everyone on a team shares the same key.
  2. Confirm your key works by calling GET /health with it attached (see the example below). A successful response echoes your team name back to you.
  3. That's it — the same key authenticates every endpoint below. There's no separate sign-up flow and no OAuth dance; it's a flat per-team credential, like a typical SaaS API key.

Treat your key like any other client secret: don't commit it to a public repo or paste it into a shared chat. If you think it's leaked, ask the organizer for a new one.

Authenticating a request

Every endpoint (except this docs page and the raw /openapi.json spec) requires your key on the x-api-key header:

curl https://api.lumenboard.syntheticsignal.io/health \
  -H "x-api-key: YOUR_TEAM_KEY"

An Authorization: Bearer YOUR_TEAM_KEY header is also accepted as a fallback, but x-api-key is the documented, primary scheme.

Endpoints

MethodPathWhat it returns
GET/healthConfirms your key works
GET/usersPaginated list of users (page, pageSize)
GET/accountsAll accounts, incl. plan, seats, MRR, health score, renewal date
GET/accounts/{id}/usageWeekly usage time series for one account
GET/events?since=Recent product events, cursor-paginated, filterable by time

Every error response — missing key, wrong key, bad parameter, unknown account id, rate limit — shares the same shape: {"error":{"code":"...","message":"..."}}.

Raw OpenAPI spec

The spec below is fetched live from the running API, not a hand-copied snapshot — what you see here is exactly what the API itself will return.

(click "Fetch spec" once the API base above points at a running instance)