---
title: "The Surf API · OpenVibe.Surf"
canonical: "https://openvibe.surf/developers"
updated: null
---

# The Surf API · OpenVibe.Surf

HTML: [The Surf API · OpenVibe.Surf](https://openvibe.surf/developers)

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.
