Skip to main content

Protocol Basics

Lumio's public API uses one versioned base path:

https://api.lumio.vision/v1

There is no /developer/v1 base path. Developer-extension routes are normal /v1 routes under /v1/developer/....

Protocol Endpoints​

SurfaceEndpoint
RESThttps://api.lumio.vision/v1/...
GraphQLPOST https://api.lumio.vision/v1/gql
GraphQL SDLGET https://api.lumio.vision/v1/schema
GraphiQLGET https://api.lumio.vision/v1/graphiql
WebSocketwss://api.lumio.vision/v1/ws
OpenAPI JSONGET https://api.lumio.vision/v1/openapi.json

Test broadcasts through emitEvent, POST /v1/events/test, or lumio_event_test carry server-set raw.isTest: true and raw.showOnStream (Boolean). The caller passes GraphQL showOnStream, REST/MCP show_on_stream, or the dashboard's Show on stream checkbox; the default is false. Tests are never stored. POST /v1/events/emit strips isTest, is_test and showOnStream from raw before storing a manual event. Overlay and widget browser sources receive a test only when showOnStream is true; dashboard widget previews receive every test. For extension payloads and labeling, see useLumioEvent.

Authentication​

API keys are accepted only with the bearer header:

Authorization: Bearer lm_usr_your_key

The bearer scheme is case-sensitive and uses exactly one space. Lumio does not support X-API-Key, and API keys are not accepted through ?token=.

Errors And Rate Limits​

REST errors use this shape:

{
"error": "VALIDATION_ERROR",
"message": "Validation error: Invalid permission: events:typo",
"details": null
}

API keys use a flat 1200 requests per minute bucket. Rate-limit responses use 429 RATE_LIMIT_EXCEEDED with Retry-After; expensive paths can return 503 RATE_LIMIT_UNAVAILABLE when rate limiting is unavailable.

For the full public API reference, see Lumio API Overview, REST, GraphQL, and WebSocket.