For developers
The Surf API
Watch and Ride are public reads; Web starts a task at OpenVibe.Actor as the signed-in person. Errors are RFC 9457 application/problem+json.
GET /api/v1/watch/feed?topic=all|live|clips|moments&cursor=- The merged OpenVibe.Live feed: who is live (by viewers), then clips and AI moments by freshness, never two from one channel in a row. Each item says why it is on. Cached 30 s; a source that did not answer is named in
sources. GET /api/v1/ride/maps- The surf maps from OpenVibe.Games: id, name, tier, stages, author, runs, the record. Cached 60 s.
GET /api/v1/ride/maps/:id- One map, its fastest runs and its
embed_url. POST /api/v1/web/tasks- Signed in, from this site:
{ query }(3–500 characters) starts an OpenVibe.Actor task as you and answers{ task_id, page }; the page is in Surf. GET /api/v1/web/tasks/:id- Your Actor task state, desk link, sources and final report, fetched with your token.
GET /api/v1/web/tasks/:id/events- Your live Actor steps as server-sent events.
POST /watch/party · GET /watch/p/:id/events- Watch together: signed in and same-site, opens an in-memory party at
/watch/p/<id>(303, or 201 JSON). The SSE stream carries the host's{ channel_key, position_s, playing, at }commands to every member; a restart ends the party.