Skip to main content
POST /api/v1/vibe/stream is the primary endpoint. It creates or continues a build session and returns an SSE (Server-Sent Events) stream of progress events.
Build stream: request and events

Request

Create a new project

Continue an existing project

Fields

Field names are snake_case. The full schema is VibeRequestSchema in src/routes/vibe.ts.

Answering a question from the agent

Answers do not go to this endpoint. When the stream emits ask_user_question, reply on its own endpoint:
All three fields are required. Plan approvals are a separate endpoint again — POST /api/v1/vibe/plan/approve with { project_id, approved, feedback?, edited_plan? }.

Response

The response is an SSE stream (text/event-stream). Each event is a JSON object with a type field.

Event types

Each event’s type is a member of StreamChunkType (src/types/index.ts). The common ones: The V1 stream then closes with a literal data: [DONE]\n\n. POST /api/v1/vibe/stream_v2 carries the same type on the SSE event: line and closes with event: done instead.

Error event

Completion event

Non-stream responses

If the backend can’t open a stream (queued, or answering a pending question), it returns a JSON response instead:
Status 202 with code: "message_queued" means the build was accepted and will start when a worker is available. Reconnect to the same endpoint to receive the stream.