Skip to main content
ManticScore uses newline-delimited JSON (NDJSON) to stream progress events for all long-running operations — market research, feature deep research, build graphs, Forge coding runs, briefs, and chat. Instead of polling for results, your client opens a persistent HTTP connection and receives events line by line as work progresses.

Protocol basics

Every streaming endpoint returns:
Each line in the response body is a complete JSON object with this envelope:
The v field is the protocol version. The event field identifies the event type. The data object contains the payload for that event type.
Parse on the event field and ignore unknown event types. New event types may be added to any stream, and forward-compatible clients should skip them silently.

Cursor-based replay

Every streaming endpoint accepts a cursor query parameter (default 0). Pass the seq number of the last event you received to resume a stream without re-reading events you have already processed.
The server replays all events with a sequence number greater than cursor, then continues streaming live events. This means you can reconnect after a network drop without losing any events.
Store the seq field from each incoming event. On reconnect, pass the highest seq you received as cursor.

Common event types

These events appear across all streams: An error event with "retryable": true means the job can be restarted with the same inputs.

Research events

Pipeline stages: interpretsearchjudgeanalyzesynthesizepersist The judge stage is non-blocking. If it fails, the pipeline continues to analyze regardless.

Build graph events

You receive one node_created event per node. Assemble the tree client-side using the parent_id field included in full events.

Forge events

Chat events

Append each message_delta.text value to build the full assistant message.

Code examples

Tracing

Every response includes an X-Request-ID header. Include this value when reporting issues — it maps directly to server-side logs.