On this page
Guides / Streaming (SSE)

Streaming (SSE)

Receive the run's events live, one event at a time, with Server-Sent Events.

Instead of waiting for the full result, you can receive the run live as the Met thinks and answers. Meteor delivers it as a stream of Server-Sent Events (SSE).

With the SDK

for await (const ev of met.runs.stream({ input: 'What can I automate?' })) {
  switch (ev.type) {
    case 'run.output':
      process.stdout.write(ev.data);   // incremental text
      break;
    case 'run.completed':
      console.log('\ndone');
      break;
  }
}

The SDK parses the stream and hands you typed { type, data } objects. Under the hood it is the same POST /workspaces/:id/runs with stream: true and Accept: text/event-stream.

Event schema

The stream emits a closed, versioned set of events:

EventWhen
run.startedThe run began
run.stepA step taken by the Met (curated projection of the trace)
run.outputA fragment of the answer
run.completedFinished successfully
run.failedFinished with an error

run.step is a curated view: it exposes the step type, the iteration, the tool name and the actor — never internal prompts, raw tool inputs, provider costs or token counts.

With curl

curl -N https://api.met.meteor.com.co/api/v1/workspaces/7/runs \
  -H "Authorization: Bearer $MET_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{"input":"Hello","stream":true}'

The -N flag turns off buffering so you see the events arrive.

Streaming does not retry automatically: a stream cut halfway through is not transparently resumable. For critical logic, pair the stream with a final retrieve() of the run.