Skip to main content
Use GET /project/{projectId}/events to feed Flow activity into your own tools. The stream returns one ordered feed per project. It covers item changes on a branch or Base, updates from a parent branch, and the branch review workflow. Use the FLOW_API_URL, FLOW_CUSTOMER, and FLOW_API_KEY variables from the quickstart, and set PROJECT_ID to the project you want to follow. cURL examples use Bash and jq. Python uses requests; JavaScript uses Node.js 22 or later with .mjs files.

Choose a starting point

Omit cursor to read the project’s history from the beginning. Send start=now to skip history: the response contains no events, and its next_cursor marks the present. The examples below start at the present and save the cursor to events-cursor.txt.
start=now does not accept a cursor. Sending both returns 400.

Read new events

Each poll sends the stored cursor and reads pages until more_available is false. The examples request branch review decisions and merges, with up to 200 events per page. Remove type to read every event type.
Store next_cursor after every page, including an empty page. It is a checkpoint, not the ID of the last event. Flow returns only settled events, so a stored cursor never skips an event that commits late and never returns the same event twice. Process events in delivery order. occurred_at is informational and can be out of order across pages. The response contains events, next_cursor, and more_available. limit defaults to 50 and accepts up to 200.

Filter the stream

  • type: a comma-separated list of event types. Omit it to read every type.
  • branch: one branch ID, or master for Base. Omit it to read every branch.
A cursor keeps the filter it was created under. You can continue with the same filter or a narrower one. A wider filter returns 400 rather than silently skipping the events the earlier filter excluded. To widen a filter, restart from an earlier cursor. A cursor from start=now has no filter, so it accepts any later filter.

Handle each event type

Every event includes event_type, occurred_at, project_id, branch_id, actor, app_url, and payload. A branch_id of master means Base. actor.type is user, agent, or system; system actors have no id. To read the current values of changed items, fetch them by ID with the entity endpoints on the event’s branch. Open app_url to view the branch table or review in Flow. The stream is also available as a hosted MCP tool. See Read the project event stream for the full list of event types and the response schema.