Proceed past the verification gate
const url = 'https://example.com/api/v1/canary/rollouts/1/proceed';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"stateToken":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/api/v1/canary/rollouts/1/proceed \ --header 'Content-Type: application/json' \ --data '{ "stateToken": "example" }'Confirms an awaiting_confirmation rollout only when its persisted remaining-preview evidence
is available and exactly covers its same-Arr remaining targets, then transitions it to
rolling_out and enqueues the resumable batched rollout job. Value-guarded on stateToken;
returns the updated rollout. Unavailable or invalid evidence fails closed and enqueues no job.
Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”object
The state_token the client was shown; value-guards concurrent/double-proceed.
Examplegenerated
{ "stateToken": "example"}Responses
Section titled “Responses”Rollout is now rolling out
object
Arr family a rollout is scoped to. A rollout never spans types.
Live state machine of a staged rollout:
canary_running: canary sync is executing inlineawaiting_confirmation: canary passed, waiting at the verification gaterolling_out: batched rollout job is syncing remaining instancescompleted: all remaining instances synced cleanlyaborted: gate declined, or canary failed/partial-abort/skipped (remaining untouched)failed: rollout ran but one or more remaining instances failed
How a partial canary outcome is treated:
gate: pass-with-warning; continue to the verification gateabort: treat as failure; remaining instances are never touched
object
Arr instance ID selected as a rollout target.
Denormalized instance name captured at rollout start.
object
Persisted Canary remaining-preview evidence schema version.
Time the complete exact-target evidence snapshot was generated.
Complete previews for the persisted remaining target set. An empty mutation summary is a valid no-changes result and is distinct from unavailable evidence.
Read-only per-instance preview payload produced by the Canary coordinator. This matches the
runtime GeneratePreviewResult contract; it is not a stored Sync Preview and therefore has no
preview id, expiry timestamp, or top-level failure field.
object
Exact remaining-target Arr instance ID.
Arr instance name at preview-generation time.
Arr family a rollout is scoped to. A rollout never spans types.
Preview lifecycle state:
generating: build in progressready: preview fully materialized and runnableapplying: preview is being executed as syncapplied: execution succeededfailed: generation or execution failedexpired: staleness TTL elapsed
Preview generation time as Unix epoch milliseconds.
Per-section evidence; any failure makes aggregate Canary evidence unavailable.
object
Sync section handled by preview generation
True when the section had no config to preview and was skipped.
Typed, closed, safe failure evidence for Sync Preview generate/apply. Replaces the
former free-form error strings. message and recoveryAction are pre-authored safe
copy drawn from a closed vocabulary — they NEVER contain raw exception text, Arr
response bodies, credentials, hostnames, or stack traces. Full diagnostics live only in
the sanitized server logs.
object
Closed vocabulary of Sync Preview generate/apply failure reasons. Each value is assigned by matching a thrown error’s TYPE/status (never by parsing message text), so no raw exception or secret-shaped string is ever transported:
unreachable: the Arr instance could not be reached (network/DNS/connection).timeout: the Arr instance did not respond in time.unauthorized: the Arr instance rejected the API key (HTTP 401/403).notFound: a required Arr resource was not found (HTTP 404).rejected: the Arr instance rejected the request (other HTTP 4xx).serverError: the Arr instance returned a server error (HTTP 5xx).sectionErrors: one or more sections failed to generate (top-level aggregate).executionFailed: the apply sync run did not complete successfully.stale: the preview is too old to apply safely.internalError: an unexpected error occurred (catch-all for untyped failures).
Safe, user-facing summary of the failure. Never raw exception or secret text.
Actionable next step the operator can take to recover.
object
Custom-format change set
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
Quality-profile change set
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
object
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
object
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
Quality definition change set
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
object
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
object
Number of create actions
Number of update actions
Number of delete actions
Number of unchanged entities
object
Persisted Canary remaining-preview evidence schema version.
Time this unavailable evidence result was recorded.
Typed, closed, safe failure evidence for Sync Preview generate/apply. Replaces the
former free-form error strings. message and recoveryAction are pre-authored safe
copy drawn from a closed vocabulary — they NEVER contain raw exception text, Arr
response bodies, credentials, hostnames, or stack traces. Full diagnostics live only in
the sanitized server logs.
object
Closed vocabulary of Sync Preview generate/apply failure reasons. Each value is assigned by matching a thrown error’s TYPE/status (never by parsing message text), so no raw exception or secret-shaped string is ever transported:
unreachable: the Arr instance could not be reached (network/DNS/connection).timeout: the Arr instance did not respond in time.unauthorized: the Arr instance rejected the API key (HTTP 401/403).notFound: a required Arr resource was not found (HTTP 404).rejected: the Arr instance rejected the request (other HTTP 4xx).serverError: the Arr instance returned a server error (HTTP 5xx).sectionErrors: one or more sections failed to generate (top-level aggregate).executionFailed: the apply sync run did not complete successfully.stale: the preview is too old to apply safely.internalError: an unexpected error occurred (catch-all for untyped failures).
Safe, user-facing summary of the failure. Never raw exception or secret text.
Actionable next step the operator can take to recover.
Successfully generated diagnostic pieces, if any. Partial previews never authorize promotion and do not represent complete target coverage.
Read-only per-instance preview payload produced by the Canary coordinator. This matches the
runtime GeneratePreviewResult contract; it is not a stored Sync Preview and therefore has no
preview id, expiry timestamp, or top-level failure field.
object
Exact remaining-target Arr instance ID.
Arr instance name at preview-generation time.
Arr family a rollout is scoped to. A rollout never spans types.
Preview lifecycle state:
generating: build in progressready: preview fully materialized and runnableapplying: preview is being executed as syncapplied: execution succeededfailed: generation or execution failedexpired: staleness TTL elapsed
Preview generation time as Unix epoch milliseconds.
Per-section evidence; any failure makes aggregate Canary evidence unavailable.
object
Sync section handled by preview generation
True when the section had no config to preview and was skipped.
Typed, closed, safe failure evidence for Sync Preview generate/apply. Replaces the
former free-form error strings. message and recoveryAction are pre-authored safe
copy drawn from a closed vocabulary — they NEVER contain raw exception text, Arr
response bodies, credentials, hostnames, or stack traces. Full diagnostics live only in
the sanitized server logs.
object
Closed vocabulary of Sync Preview generate/apply failure reasons. Each value is assigned by matching a thrown error’s TYPE/status (never by parsing message text), so no raw exception or secret-shaped string is ever transported:
unreachable: the Arr instance could not be reached (network/DNS/connection).timeout: the Arr instance did not respond in time.unauthorized: the Arr instance rejected the API key (HTTP 401/403).notFound: a required Arr resource was not found (HTTP 404).rejected: the Arr instance rejected the request (other HTTP 4xx).serverError: the Arr instance returned a server error (HTTP 5xx).sectionErrors: one or more sections failed to generate (top-level aggregate).executionFailed: the apply sync run did not complete successfully.stale: the preview is too old to apply safely.internalError: an unexpected error occurred (catch-all for untyped failures).
Safe, user-facing summary of the failure. Never raw exception or secret text.
Actionable next step the operator can take to recover.
object
Custom-format change set
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
Quality-profile change set
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
object
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
object
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
Quality definition change set
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
object
object
Sync target entity kind (e.g., customFormat, qualityProfile)
Entity display name (namespace-stripped where applicable)
Arr entity ID when present
Field-level diff; empty for unchanged/create where no deltas are tracked
object
Dot-notated field path
object
Number of create actions
Number of update actions
Number of delete actions
Number of unchanged entities
Index into remainingTargets the rollout job has reached (resumable).
object
Per-instance outcome status following JobRunStatus semantics.
Human-readable sync summary from executeSyncJob.
Per-instance diagnostics on failure.
How the rollout was initiated.
Value-guard token for /proceed and /abort; re-issued on every transition.
Example
{ "arrType": "radarr", "status": "canary_running", "canaryStatus": "success", "sections": [ "qualityProfiles" ], "partialPolicy": "gate", "remainingPreview": { "version": 1, "availability": "available", "previews": [ { "arrType": "radarr", "status": "generating", "sections": [ "qualityProfiles" ], "sectionOutcomes": [ { "section": "qualityProfiles", "failure": { "code": "unreachable" } } ], "qualityProfiles": { "section": "qualityProfiles", "customFormats": [ { "action": "create", "fields": [ { "type": "added" } ] } ], "qualityProfiles": [ { "action": "create", "fields": [ { "type": "added" } ] } ] }, "delayProfiles": { "section": "delayProfiles", "profile": { "action": "create", "fields": [ { "type": "added" } ] } }, "mediaManagement": { "section": "mediaManagement", "naming": { "action": "create", "fields": [ { "type": "added" } ] }, "qualityDefinitions": [ { "action": "create", "fields": [ { "type": "added" } ] } ], "mediaSettings": { "action": "create", "fields": [ { "type": "added" } ] } }, "metadataProfiles": { "section": "metadataProfiles", "profile": { "action": "create", "fields": [ { "type": "added" } ] } } } ] }, "rolloutResults": [ { "status": "success" } ], "trigger": "manual"}Invalid request body or id
object
Error message
Examplegenerated
{ "error": "example"}Rollout not found
object
Error message
Examplegenerated
{ "error": "example"}Rollout is not awaiting confirmation, or remaining-preview evidence is unavailable or invalid
object
Error message
Examplegenerated
{ "error": "example"}Stale state token
object
Error message
Examplegenerated
{ "error": "example"}Failed to proceed canary rollout
object
Error message
Examplegenerated
{ "error": "example"}