Skip to content

Start a canary rollout

POST
/canary/rollouts
curl --request POST \
--url https://example.com/api/v1/canary/rollouts \
--header 'Content-Type: application/json' \
--data '{ "arrType": "radarr", "canaryInstanceId": 1, "sections": [ "qualityProfiles" ], "maxBatchSize": 1, "partialPolicy": "gate" }'

Runs the canary sync inline and persists the rollout with durable, explicit remaining-target preview evidence. The staged response contains the evidence in its rollout as either complete available previews or unavailable with a safe reason and recovery action; array length is never used to infer availability. When only one eligible target exists the staged flow is auto-skipped and a plain sync result is returned instead. The response is discriminated on skipped.

Media typeapplication/json
object
arrType
required

The Arr app the rollout is scoped to. Required — a rollout targets exactly one arr_type.

string
Allowed values: radarr sonarr lidarr
canaryInstanceId

Explicit canary instance. Highest selection precedence.

integer
sections

Optional section filters. Omit for all configured sections.

Array<string>
Allowed values: qualityProfiles delayProfiles mediaManagement metadataProfiles
maxBatchSize

Max remaining instances synced per batch. Falls back to the settings default.

integer
>= 1
partialPolicy

How a partial canary outcome is treated:

  • gate: pass-with-warning; continue to the verification gate
  • abort: treat as failure; remaining instances are never touched
string
Allowed values: gate abort

Canary started (staged) or auto-skipped (plain sync)

Media typeapplication/json
One of:

Returned when a single eligible same-arr_type target auto-skips the staged flow.

object
skipped
required
boolean
result
required

Verbatim executeSyncJob return, surfaced when a start auto-skips to a plain sync.

object
status
required

Per-instance outcome status following JobRunStatus semantics.

string
Allowed values: success failure skipped cancelled
output
string
error
string
rescheduleAt
One of:
string format: date-time
Example
{
"skipped": true,
"result": {
"status": "success"
}
}

Invalid request body

Media typeapplication/json
object
error
required

Error message

string
Examplegenerated
{
"error": "example"
}

Explicit canary instance not found

Media typeapplication/json
object
error
required

Error message

string
Examplegenerated
{
"error": "example"
}

No canary resolvable, or the canary is not a radarr/sonarr/lidarr instance

Media typeapplication/json
object
error
required

Error message

string
Examplegenerated
{
"error": "example"
}

Failed to start canary rollout

Media typeapplication/json
object
error
required

Error message

string
Examplegenerated
{
"error": "example"
}