Retry a failed run from its committed trace — no tool is re-executed; streams the re-drive over SSE.
Streams text/event-stream. The success body is a sequence of events rather than a
JSON document, which is why no 2xx schema is listed below — see Streaming for the event contract.
Re-drives a run that ended failed from the messages it already persisted. **No tool is re-executed** — a committed tool_result is replayed, which is the point: the work the tool did is paid for once. A tool call the failed segment left unanswered is replayed as an interrupted result, so the model is told what happened rather than handed a history its provider rejects. The run is REOPENED (status returns to running, completedAt and the failure fields are cleared) rather than copied to a successor, and an amy.run.retried webhook says so. Only a failed run whose failure code is retryable may be retried, at most retryCap times, only while it is the latest turn of its conversation for the client that started it (another client's later run under the same conversationId does not count), only while its agent is active, only while every file it was given is still stored (a failed run whose files were discarded cannot be retried), and never as part of a team run, an agent task or a Test Lab case — GET /v1/runs/{runId} answers all of it as retryable. Every such refusal is a 409 carrying code: retry_refused and a reason before the stream opens, never an SSE frame. A retry is a new model call, so it also passes the same token-allowance, credential and pricing checks as a new run, answered as a new run's are; retryable does not predict those. **Scoped to the calling API-key client:** only a run this client started is reachable — any of its keys, rotations included. Another client's run in the same tenant, a run started before clients were recorded, and another tenant's run are all the same 404 as an unknown id.