Exception and retention hold API
Approve scoped policy exceptions and preserve or release recovery-point holds.
Governance endpoints record explicit exceptions and retention holds with their own permissions, revisions, and audit history.
Request an admission exception
/organizations/{organization_id}/policy-exceptionsCreates an admission-exception request awaiting approval.
Send policy_id, policy_revision, resource or project scope, allowed_action,
required reason, owner_team_id, and expires_at. The expiry must satisfy
the policy's maximum exception duration.
Returns 201 with an awaiting_approval exception. It has no effect on admission
until an authorized approver accepts that revision. Unsupported action classes
or a scope outside the caller's authority reject creation.
/organizations/{organization_id}/policy-exceptions/{exception_id}/approveApproves an exception for the reviewed policy revision.
Requires exception-approval permission, governance:write, and If-Match.
A policy revision change returns 412 policy_revision_changed and requires
reevaluation. An exception does not bypass writer ownership or fencing.
Read use and expiry
/organizations/{organization_id}/policy-exceptions/{exception_id}Returns approval, effective scope, expiry, and resource IDs created through the exception. Requires governance:read. Expiry blocks new use but does
not delete those resources. Revocation follows the same new-admission boundary.
Hold a recovery point
/organizations/{organization_id}/projects/{project_id}/recovery-points/{point_id}/holdsCreates a retention hold for a recovery point and its required members.
Requires backups:hold. Send required reason and owner team, with optional
review_at. Returns 201 with the hold ID and retained member set.
A complete consistency-group hold includes all required member snapshots or
backup members. review_at is a review reminder, not automatic expiry. A hold
cannot restore objects already removed before its creation.
Release
/organizations/{organization_id}/projects/{project_id}/recovery-points/{point_id}/holds/{hold_id}/releaseReleases an Infra retention hold.
Requires backups:hold_release, the hold ETag, and a reason. It returns the
updated hold with release actor and time.
Releasing an Infra hold leaves a provider-enforced retention lock intact. Ordinary retention cleanup can expire a point once all remaining hold and policy requirements permit it. The release response identifies current retention reasons rather than reporting unconfirmed physical deletion.
Audit boundaries
All approval, use, hold, and release actions retain actor and revision references. Read access to the hold does not grant plaintext secret access or access to unrelated source audit history. See policy exceptions, Audit API, and backup retention.
Revoke an exception
/organizations/{organization_id}/policy-exceptions/{exception_id}/revokeRevokes an exception for subsequent admission.
Requires If-Match and a reason. Revocation prevents new admission relying on this exception. Existing resources and already accepted operations retain their own lifecycle.