# Runs

A run is one coding task Syndai carries from a prompt to a delivered change. Creating a run starts billable work; its `external_request_id` is the idempotency key, so a retry never starts a second run. Follow a run by streaming its events or polling `GET /runs/{id}`. Phases are open-ended: a run can pause to ask you something, so read `pending_hitl_requests` and answer through `/responses` rather than assuming a fixed order.

- [Open a validation artifact](https://syndai.ai/docs/api/runs/open-validation-artifact.md): GET /api/v1/external/coding/artifacts/{artifact_id}/open
- [List runs](https://syndai.ai/docs/api/runs/list-runs.md): GET /api/v1/external/coding/runs
- [Create a run](https://syndai.ai/docs/api/runs/create-run.md): POST /api/v1/external/coding/runs
- [Upload an executable for a run to learn from](https://syndai.ai/docs/api/runs/ingest-reference-artifact.md): POST /api/v1/external/coding/runs/artifact-ingest
- [Upload an image for a run](https://syndai.ai/docs/api/runs/ingest-run-image.md): POST /api/v1/external/coding/runs/image-ingest
- [Get a run](https://syndai.ai/docs/api/runs/get-run.md): GET /api/v1/external/coding/runs/{coding_run_id}
- [Cancel a run](https://syndai.ai/docs/api/runs/cancel-run.md): POST /api/v1/external/coding/runs/{coding_run_id}/cancel
- [Get a run's change state](https://syndai.ai/docs/api/runs/get-change-state.md): GET /api/v1/external/coding/runs/{coding_run_id}/change
- [Stream a run's events](https://syndai.ai/docs/api/runs/stream-run-events.md): GET /api/v1/external/coding/runs/{coding_run_id}/events
- [Get a run's live view](https://syndai.ai/docs/api/runs/get-run-live.md): GET /api/v1/external/coding/runs/{coding_run_id}/live
- [Get a run's delivered diff](https://syndai.ai/docs/api/runs/get-run-proposed-diff.md): GET /api/v1/external/coding/runs/{coding_run_id}/proposed-diff
- [Rename a run](https://syndai.ai/docs/api/runs/rename-run.md): POST /api/v1/external/coding/runs/{coding_run_id}/rename
- [Answer a run's question](https://syndai.ai/docs/api/runs/respond-to-run.md): POST /api/v1/external/coding/runs/{coding_run_id}/responses
- [Steer a run in progress](https://syndai.ai/docs/api/runs/steer-run.md): POST /api/v1/external/coding/runs/{coding_run_id}/steer
- [Stop a run and keep its work](https://syndai.ai/docs/api/runs/stop-run.md): POST /api/v1/external/coding/runs/{coding_run_id}/stop
- [Get a run's timeline](https://syndai.ai/docs/api/runs/get-run-timeline.md): GET /api/v1/external/coding/runs/{run_id}/timeline
