Preview or restore the before value of one recorded level change.
curl --request POST \ --url https://auth.example.com/api/admin/identity-mapping/history/example/restore \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "preview": true }'Restores only the tenant default or the named client’s identity_mapping choice, through the same validation and write path as a normal save. It does not restore set contents. Both preview and execution require the permission for the entry’s level: tenant settings edit authority for a tenant default, or clients update access for an app. Agents cannot use this operation. An entry of another tenant is not found. Previewing a tenant default also needs clients read access because it lists affected apps. Preview writes nothing and returns the current choice, the target choice, later changes to the same level, affected apps and the version to submit. Later changes produce a warning and do not prevent a confirmed restore. Execution rechecks the version and set availability (a change away and back still invalidates the preview); conflicts require a new preview. The restore itself creates a new history entry with via restore. Only the exact body {“preview”:true} remains available while release mutations are paused or rollout status is unavailable. The apps preview is bounded to 200 rows, 20 distinct selections and 20 resolved content versions across both sides, and later changes to 100 rows and 20 distinct target choices; truncation flags identify incomplete lists. Rate limited with the strict profile.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Request Body required
Section titled “Request Body required ”Responses
Section titled “ Responses ”A read-only preview, or confirmation that the choice was restored.
object
object
object
object
object
object
Unix time in milliseconds.
The version of the level after this change.
object
object
object
object
object
object
object
object
object
Unix time in milliseconds.
The version of the level after this change.
object
object
profile_field_*: the set’s one Destination Profile is switched for another, and the new one lists a claim the old did not (or no longer lists it, or with other scopes, surfaces or requirement), even one no edge writes (the standard claims pass the profile too). validation_changed names the validated field, not necessarily a released claim; its validation_change and validation_effect describe the definition change and whether it may reject an app’s whole issuance.
The namespace the claim is written in; the runtime releases an app’s claims from oidc.claim, or from the namespace the app’s own choice names.
renamed: the namespace before, when it differs.
renamed: the claim’s name before.
Catalog type summary; multiple source types are separated by |.
Catalog type summary; multiple source types are separated by |.
For a type change involving multiple sources, each source’s catalog type before. Unknown types are null. Source names are namespace and path separated by a colon.
object
Each source’s catalog type after, when source_types_before is present.
object
For validation_changed, whether the validated field gained, lost, or changed its validation definitions. Rule parameters and attribute values are never returned.
May_reject means a critical validation definition changed, so issuance can fail or recover independently of release scopes and namespace. It appears in every app’s changes. validation_only means only noncritical definitions changed, so it is listed only in the set’s changes and never in held_back. Omitted severity is stored as error.
profile_changed: the profile before.
object
object
The app asked about; null for the tenant’s view.
object
The version the app’s own choice pins, if it does.
object
object
A level is set and not usable. The selection does not fall to the next level. settings_unreadable (no tier: the settings decide both defaults) is given only in the list of every tenant, for a tenant whose settings could not be read; the effective endpoint answers 503 instead.
A fixed code for what failed underneath. legacy_profile_only_selector: the app’s own choice names a Destination Profile (destinationProfileId) and no Mapping Set and no opt-out, a selector of the older kind, which is not a choice; the release fails for the app (400 invalid_client) rather than lose the profile’s gate in silence (select a Mapping Set or save { "mode": "none" }). With settings_unreadable, the code of the read that failed (unknown when it has none).
The app’s level, the tenant default and the platform default, in that order.
object
What the level says. This endpoint reads every level, so unset, set, none and invalid are what is found. not_consulted is given for the two defaults only when they were not read for this answer: the app’s own identity_mapping is not a choice (selection is failed with client_selector_invalid, and nothing below it is looked at), or the app decides (a set, or an opt-out) and the settings that hold the defaults could not be read.
The set the level names, when state is set.
For the two defaults: kv is saved at the tenant itself, platform is the platform’s value.
Whether the set exists and the calling tenant may name it (its own or the platform’s). False for a set that does not exist and for another tenant’s. Absent, with the other set* fields, when the Admin database could not be read.
Given with a selection of none because nothing is named (no_default); empty otherwise. implicit_activation_no_longer_applies: the tenant has active activations that fit an OIDC call (for an app, one that names it counts too), which the release used to apply to an app naming no Mapping Set and no longer does. Name the Mapping Set as the tenant’s default (or the app’s own) to keep what they did. Only this tenant’s rows are read, and only IDs and names are given.
object
object
The Admin database could not be read to look for the activations, so warnings is empty without the tenant having none.
object
The app asked about; null for the tenant’s view.
object
The version the app’s own choice pins, if it does.
object
object
A level is set and not usable. The selection does not fall to the next level. settings_unreadable (no tier: the settings decide both defaults) is given only in the list of every tenant, for a tenant whose settings could not be read; the effective endpoint answers 503 instead.
A fixed code for what failed underneath. legacy_profile_only_selector: the app’s own choice names a Destination Profile (destinationProfileId) and no Mapping Set and no opt-out, a selector of the older kind, which is not a choice; the release fails for the app (400 invalid_client) rather than lose the profile’s gate in silence (select a Mapping Set or save { "mode": "none" }). With settings_unreadable, the code of the read that failed (unknown when it has none).
The app’s level, the tenant default and the platform default, in that order.
object
What the level says. This endpoint reads every level, so unset, set, none and invalid are what is found. not_consulted is given for the two defaults only when they were not read for this answer: the app’s own identity_mapping is not a choice (selection is failed with client_selector_invalid, and nothing below it is looked at), or the app decides (a set, or an opt-out) and the settings that hold the defaults could not be read.
The set the level names, when state is set.
For the two defaults: kv is saved at the tenant itself, platform is the platform’s value.
Whether the set exists and the calling tenant may name it (its own or the platform’s). False for a set that does not exist and for another tenant’s. Absent, with the other set* fields, when the Admin database could not be read.
Given with a selection of none because nothing is named (no_default); empty otherwise. implicit_activation_no_longer_applies: the tenant has active activations that fit an OIDC call (for an app, one that names it counts too), which the release used to apply to an app naming no Mapping Set and no longer does. Name the Mapping Set as the tenant’s default (or the app’s own) to keep what they did. Only this tenant’s rows are read, and only IDs and names are given.
object
object
The Admin database could not be read to look for the activations, so warnings is empty without the tenant having none.
The current choice cannot issue mapped claims. The preview uses an empty mapping as the before side of the claim comparison so a usable earlier choice can still be restored. Database failures are not treated as an empty mapping, and the restored choice must still resolve successfully.
object
Example
{ "entry": { "tier": "tenant_default", "before": { "state": "unset" }, "after": { "state": "unset" }, "via": "settings", "not_restorable_reason": "set_deleted" }, "current": { "state": "unset" }, "restores": { "state": "unset" }, "later_changes": [ { "tier": "tenant_default", "before": { "state": "unset" }, "after": { "state": "unset" }, "via": "settings", "not_restorable_reason": "set_deleted" } ], "apps": [ { "tier": "client", "changes": [ { "kind": "added", "validation_change": "added", "validation_effect": "may_reject" } ], "before": { "selection": { "kind": "bound", "tier": "client", "setOwner": "tenant" }, "chain": [ { "tier": "client", "state": "unset", "source": "kv", "setOwner": "tenant" } ], "warnings": [ { "code": "implicit_activation_no_longer_applies" } ], "warnings_unavailable": true }, "after": { "selection": { "kind": "bound", "tier": "client", "setOwner": "tenant" }, "chain": [ { "tier": "client", "state": "unset", "source": "kv", "setOwner": "tenant" } ], "warnings": [ { "code": "implicit_activation_no_longer_applies" } ], "warnings_unavailable": true }, "before_unavailable": "set_missing" } ], "warning": "later_changes_will_be_overwritten"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}The version or restoration target has changed; obtain a fresh preview.
object
Example
{ "error": "conflict", "reason": "version_conflict"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Storage or rollout state is unavailable. A temporarily_unavailable response may include operation_id when the client update has committed but its history still needs confirmation. A retry must first read current state rather than assume the choice was unchanged.
object
Example generated
{ "error": "example", "error_description": "example", "operation_id": "example"}