Skip to content

Preview the config a goal would generate (non-persisting)

POST
/goals/preview
curl --request POST \
--url https://example.com/api/v1/goals/preview \
--header 'Content-Type: application/json' \
--data '{ "databaseId": 1, "arrType": "radarr", "profileName": "example", "preset": "example", "weights": { "qualityVsSize": 1, "compatibility": 1, "hdrPreference": 1, "unwantedStrictness": 1, "resolutionCeiling": "720p" } }'

Translates a goal (preset + slider weights) into a concrete scoring plan for one quality profile and returns the plan plus the authoritative sandbox config diff. Mutates nothing — scores are compiled only inside an ephemeral sandbox cache; pcd_ops is untouched.

Media typeapplication/json
object
databaseId
required
integer
arrType
required
string
Allowed values: radarr sonarr lidarr
profileName
required

Raw PCD quality-profile name (pcd:-stripped)

string
preset
required
string
weights
required
object
qualityVsSize
required
integer
<= 100
compatibility
required
integer
<= 100
hdrPreference
required
integer
<= 100
unwantedStrictness
required
integer
<= 100
resolutionCeiling
required
string
Allowed values: 720p 1080p 2160p

The generated plan and sandbox diff

Media typeapplication/json

Non-persisting preview — the plan plus the authoritative sandbox config diff.

object
plan
required

Deterministic translation of a goal into concrete scores + thresholds.

object
engineVersion
required
string
arrType
required
string
Allowed values: radarr sonarr lidarr
decisions
required
Array<object>
object
customFormatName
required
string
arrType
required
string
Allowed values: radarr sonarr lidarr
category
required

Closed set of semantic categories a custom format is classified into.

string
Allowed values: unwanted hdr_dv hdr_hdr10plus hdr_baseline remux release_group_tier_1 release_group_tier_2 release_group_tier_3 audio_lossless audio_advanced audio_baseline streaming_service movie_version repack_proper resolution
score
required
integer
reason
required
object
code
required
string
category
required
One of:

Closed set of semantic categories a custom format is classified into.

string
Allowed values: unwanted hdr_dv hdr_hdr10plus hdr_baseline remux release_group_tier_1 release_group_tier_2 release_group_tier_3 audio_lossless audio_advanced audio_baseline streaming_service movie_version repack_proper resolution
ruleId
required
string
base
required
integer
axisContributions
required
Array<object>
object
axis
required
string
delta
required
integer
ceiling
required
One of:
string
Allowed values: above match below
uncategorized
required
Array<object>
object
name
required
string
suggestedCategory
required
One of:

Closed set of semantic categories a custom format is classified into.

string
Allowed values: unwanted hdr_dv hdr_hdr10plus hdr_baseline remux release_group_tier_1 release_group_tier_2 release_group_tier_3 audio_lossless audio_advanced audio_baseline streaming_service movie_version repack_proper resolution
reason
required
string
thresholds
required
object
minimumScore
required
integer
upgradeUntilScore
required
integer
upgradeScoreIncrement
required
integer
coverage
required
object
total
required
integer
scored
required
integer
uncategorized
required
integer
qualityLadder
required

Ceiling-derived quality-ladder configuration (issue #221), always shown before persistence. A per-arr ceiling reshapes the shared quality_profile_qualities row set for every Arr that syncs the profile; sharedLadderNote surfaces that when the profile is sibling-compatible.

object
ceiling
required
string
Allowed values: 720p 1080p 2160p
cutoff
required
One of:
string
items
required
Array<object>

One row of the ceiling-derived quality ladder (issue #221).

object
name
required
string
type
required
string
Allowed values: quality group
enabled
required
boolean
upgradeUntil
required
boolean
position
required
integer
resolution
required
One of:
integer
mapped
required

False when the row is not present/derivable for the target arr (left unchanged).

boolean
reshapesSiblingArrs
required
boolean
sharedLadderNote
required
One of:
string
configDiff
required
Array<object>
object
entityType
required
string
Allowed values: quality_profile
name
required
string
arrType
required
string
Allowed values: radarr sonarr lidarr
changes
required
Array<object>
object
field
required

Dot-notated field path

string
type
required
string
Allowed values: added changed removed
current
required
Any of:
string
desired
required
Any of:
string
appliedChanges
required
Array
One of: discriminator: kind
object
kind
required
string
Allowed values: set_cf_score
profileName
required

Raw PCD quality-profile name (pcd:-stripped)

string
customFormatName
required
string
score
required

Finite integer custom-format score

integer
skippedChanges
required
Array<object>
object
change
required
One of: discriminator: kind
object
kind
required
string
Allowed values: set_cf_score
profileName
required

Raw PCD quality-profile name (pcd:-stripped)

string
customFormatName
required
string
score
required

Finite integer custom-format score

integer
reason
required
string
Example
{
"plan": {
"arrType": "radarr",
"decisions": [
{
"arrType": "radarr",
"category": "unwanted",
"reason": {
"category": "unwanted",
"ceiling": "above"
}
}
],
"uncategorized": [
{
"suggestedCategory": "unwanted"
}
],
"qualityLadder": {
"ceiling": "720p",
"items": [
{
"type": "quality"
}
]
}
},
"configDiff": [
{
"entityType": "quality_profile",
"arrType": "radarr",
"changes": [
{
"type": "added"
}
]
}
],
"appliedChanges": [
{
"kind": "set_cf_score"
}
],
"skippedChanges": [
{
"change": {
"kind": "set_cf_score"
}
}
]
}

Invalid request

Media typeapplication/json
object
error
required

Error message

string
Examplegenerated
{
"error": "example"
}

Database cache not found

Media typeapplication/json
object
error
required

Error message

string
Examplegenerated
{
"error": "example"
}