---
title: "Stream Batch Predictions Events"
method: GET
path: "/api/v1/jobs/batch/predictions/{job_id}/events"
---

# Stream Batch Predictions Events

`GET /api/v1/jobs/batch/predictions/{job_id}/events`

Stream batch-job progress snapshots as SSE.

Each frame is a `BatchPredictionsEvent`-shaped JSON payload (with the
per-prediction field stripped server-side; clients fetch the canonical
list via `GET /results`). Frames carry both the SSE `id:` (Redis stream
msg id) and `event:` (the snapshot's `event` field — `start`,
`prediction`, `score`, `finish`).

Resumption: clients automatically send `Last-Event-ID` on reconnect;
we use it as the `XREAD` start id so no events are missed (provided
the stream hasn't been trimmed past it).

Heartbeats every ~15s keep proxies from idling the connection out.
Synthetic terminal: if Celery reaches a terminal state without a
`finish` snapshot reaching Redis, emit one so clients don't hang.

## Path parameters

- `job_id` string, required

## Headers

- `authorization` string, nullable

## Cookies

- `modaic_session` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/modaic-ai/apis/modaic-api.md) · [All operations](https://skmtc.net/modaic-ai/apis/modaic-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/modaic-ai/modaic-api/revisions/43a90513ac59/schema)
