---
title: "Get deploy operation phase events"
method: GET
path: "/apply/v1/operations/{operation_id}/events"
tags: ["Apply"]
---

# Get deploy operation phase events

`GET /apply/v1/operations/{operation_id}/events`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/apply/v1/operations/{operation_id}/events`
- Auth: API key in header `apikey`

Durable server-side phase event stream for deploy.apply. Returns ordered commit/stage/gating/migrate/expose/schema_settle/activate/ready events with timing details; old operations without recorded rows return a single synthetic status event.

## Path parameters

- `operation_id` string, required

## Query parameters

- `cursor` string
- `limit` integer

## Response `200`

{events: [{id, type, phase, status, message, details, created_at, updated_at}], cursor}

- DeployOperationEventsResponse
  - `events` object[], required
    - `id` string, required: Monotonic event id cursor. Synthetic fallback events use "synthetic".
    - `type` string, required
    - `phase` string, required: Recorded phase name such as commit, stage, gating, migrate, expose, schema_settle, role_gate, activate, or ready. Synthetic fallback events may use the operation status.
    - `status` 'started' | 'done' | 'failed' | 'skipped' | 'deferred', required
    - `message` string, nullable
    - `details` object, required: Phase-specific diagnostics such as duration_ms, release_id, migration_count, error_code, or synthetic=true.
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required: Compatibility alias for created_at.
  - `cursor` string, nullable, required

## Other responses

- `404`: Operation not found

---

[API](https://skmtc.dev/run402/apis/run402-api.md) · [All operations](https://skmtc.dev/run402/apis/run402-api/llms.txt) · [OpenAPI document](https://skmtc.dev/run402/apis/run402-api/revisions/893607557f50?raw)
