# OperationEvent

> One event in an operation's stream.

One event in an operation's stream. Over SSE each event is sent as `id: <seq>`, `event: <type>`,
`data: <this object as JSON>`. Reconnect with `Last-Event-ID` to resume. The stream ends with an
`operation.finished` event.

## Fields

| Field | Type | Description |
| --- | --- | --- |
| `seq` * | integer |  |
| `operation_id` * | string |  |
| `type` * | `operation.status`, `step.started`, `step.succeeded`, `step.failed`, `step.retrying`, `progress`, `log`, `approval.requested`, `approval.decided`, `operation.finished`, `heartbeat` |  |
| `step` | string or null |  |
| `message` | string |  |
| `data` | object |  |
| `at` * | string (date-time) |  |

\* always present

## Example

```json
{
  "seq": 7,
  "operation_id": "op_01jbx2m9k7q4r8t5v6w3y0z1op",
  "type": "step.succeeded",
  "step": "build",
  "message": "Built image in 1 min 12 s",
  "data": {
    "image_digest": "sha256:4b1f0e9d8c7b6a5948372615f4e3d2c1b0a9f8e7d6c5b4a3928170f6e5d4c3b2"
  },
  "at": "2026-10-23T14:03:13Z"
}
```
