Generate a sync preview
const url = 'https://example.com/api/v1/sync/preview';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"instanceId":1,"sections":["qualityProfiles"],"sectionConfigs":{"qualityProfiles":"example","delayProfiles":{"databaseId":1,"profileName":"example"},"mediaManagement":{"namingDatabaseId":1,"namingConfigName":"example","qualityDefinitionsDatabaseId":1,"qualityDefinitionsConfigName":"example","mediaSettingsDatabaseId":1,"mediaSettingsConfigName":"example"},"metadataProfiles":{"databaseId":1,"profileName":"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/sync/preview \ --header 'Content-Type: application/json' \ --data '{ "instanceId": 1, "sections": [ "qualityProfiles" ], "sectionConfigs": { "qualityProfiles": "example", "delayProfiles": { "databaseId": 1, "profileName": "example" }, "mediaManagement": { "namingDatabaseId": 1, "namingConfigName": "example", "qualityDefinitionsDatabaseId": 1, "qualityDefinitionsConfigName": "example", "mediaSettingsDatabaseId": 1, "mediaSettingsConfigName": "example" }, "metadataProfiles": { "databaseId": 1, "profileName": "example" } } }'Computes a read-only preview of the sync changes for an Arr instance.
This endpoint performs no writes. It only reads from PCD and Arr GET
endpoints to compare desired versus current state, then stores a preview
snapshot for later retrieval or application. Optional transient
sectionConfigs are treated as bound reviewed execution state: their
normalized effective values are retained privately with the expiring
preview and reused during reviewed apply.
If no sections are provided, all configured sections for the instance are
included.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Arr instance ID to preview
Optional section filters for preview generation
Optional transient configuration overrides used to materialize the selected preview sections. These values are bound as reviewed execution state: apply revalidates and executes with the same effective configuration instead of silently falling back to newly saved configuration. The server retains the normalized values only in the private, expiring preview envelope; they are never included in preview or apply responses.
object
Effective quality-profile section configuration to review and bind.
Complete transient media-management selection. Each database/name pair must either be null/null or contain a positive database ID and non-empty name.
object
object
object
object
object
object
object
Responses
Section titled “Responses”Preview generated
object
Preview identifier
Target Arr instance ID
Target Arr instance name
Arr instance family
ISO 8601 timestamp when preview was generated
ISO 8601 timestamp when preview becomes expired
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
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.
Sections included in preview
Per-section preview generation status used to enforce safe apply behavior.
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
Example
{ "arrType": "radarr", "status": "generating", "failure": { "code": "unreachable" }, "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" } ] } }}Invalid instanceId, unsupported section, or request body
object
Error message
Examplegenerated
{ "error": "example"}Instance not found
object
Error message
Examplegenerated
{ "error": "example"}Preview for this instance is already generating
object
Error message
Examplegenerated
{ "error": "example"}Preview creation is rate-limited or preview-store capacity is exhausted
object
Error message
Examplegenerated
{ "error": "example"}Preview generation failed. The failed preview snapshot is returned with
status: failed and a typed, safe failure reason — no raw exception text.
object
Preview identifier
Target Arr instance ID
Target Arr instance name
Arr instance family
ISO 8601 timestamp when preview was generated
ISO 8601 timestamp when preview becomes expired
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
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.
Sections included in preview
Per-section preview generation status used to enforce safe apply behavior.
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
Example
{ "arrType": "radarr", "status": "generating", "failure": { "code": "unreachable" }, "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" } ] } }}