Delete an approval policy override
The approval_policies.overrides.delete operation: DELETE /api/v1/approval_policy/overrides/{id} in the REST API and the approval_policies_overrides_delete tool in the MCP server.
/api/v1/approval_policy/overrides/{id}Deletes one approval policy override (apol_…, from overrides in approval_policies.get). Calls at its
entity, or by its agent or app, follow the organization's policy (and any other override that applies)
again. Send the override's version to avoid deleting a change you haven't seen. The organization's own
policy can't be deleted; change it with approval_policies.update. Returns the whole approval policy.
Owners and admins only, with a sign-in in the last 15 minutes.
At a glance
- REST:
DELETE /api/v1/approval_policy/overrides/{id} - MCP tool:
approval_policies_overrides_delete - Operation ID:
approval_policies.overrides.delete - Scope: Organization
- Permission:
approvals:admin - Risk tier:
security - Dry run: Supported (send
Ownrecord-Dry-Run: true) - Idempotency:
Idempotency-Keyoptional - Modes: Test and live
- Authentication: API key with the
approvals:adminscope - Fresh sign-in: In the console, a sign-in within the last 15 minutes
- Since: M10
Request
Path parameters
| Field | Type | Description |
|---|---|---|
id | apol_… ID |
Body
A JSON object (Content-Type: application/json):
| Field | Type | Required | Description |
|---|---|---|---|
version | integer (at least 1) | No |
Response
200 OK with a JSON object:
| Field | Type | Description |
|---|---|---|
object | "approval_policy" | |
id | apol_… ID or null | |
orgId | org_… ID | |
tiers | object | |
tiers.write | one of allow, require_approval, deny | |
tiers.financial | one of allow, require_approval, deny | |
tiers.compliance | one of allow, require_approval, deny | |
tiers.security | one of allow, require_approval, deny | |
twoPersonFor | array of string | |
amountLimits | array of object | |
amountLimits[].operationId | string | |
amountLimits[].perCall | money | |
version | integer (at least 0) | |
updatedAt | date-time or null | |
overrides | array of object | |
overrides[].id | apol_… ID | |
overrides[].object | "approval_policy_override" | |
overrides[].entityId | ent_… ID or null | |
overrides[].agentId | agt_… ID or null | |
overrides[].clientId | ocl_… ID or null | |
overrides[].tiers | object | |
overrides[].tiers.write | one of allow, require_approval, deny or null | |
overrides[].tiers.financial | one of allow, require_approval, deny or null | |
overrides[].tiers.compliance | one of allow, require_approval, deny or null | |
overrides[].tiers.security | one of allow, require_approval, deny or null | |
overrides[].twoPersonFor | array of string | |
overrides[].amountLimits | array of object | |
overrides[].amountLimits[].operationId | string | |
overrides[].amountLimits[].perCall | money | |
overrides[].version | integer (at least 1) | |
overrides[].updatedAt | date-time | |
availableOperations | array of object | |
availableOperations[].id | string | |
availableOperations[].summary | string | |
availableOperations[].riskTier | one of write, financial, compliance, security | |
availableOperations[].scope | one of org, entity, brand | |
availableOperations[].amounts | boolean |
Examples
Remove an agent's override
DELETE /api/v1/approval_policy/overrides/apol_01m4ttwd3veh9apbewxheq5xhb
Authorization: Bearer or_test_…
Content-Type: application/json
{
"version": 1
}
Response (200):
{
"object": "approval_policy",
"id": "apol_01m4ttwd3veh9apbewxheq5xh9",
"orgId": "org_01m4ttwd3veh9apbewxheq5xh3",
"tiers": {
"write": "allow",
"financial": "allow",
"compliance": "require_approval",
"security": "require_approval"
},
"twoPersonFor": ["brands.update"],
"amountLimits": [],
"version": 2,
"updatedAt": "2026-10-13T14:30:00.000Z",
"overrides": [],
"availableOperations": [
{
"id": "brands.update",
"summary": "Update a brand",
"riskTier": "write",
"scope": "brand",
"amounts": false
},
{
"id": "members.remove",
"summary": "Remove a member",
"riskTier": "security",
"scope": "org",
"amounts": false
}
]
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
resource_not_found | 404 | No override with this ID exists in the organization (the organization's own policy isn't one). | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
version_conflict | 409 | The override changed since you read it (version); read it again. | Fetch the object again and retry the change. |
fresh_auth_required | 403 | You last signed in more than 15 minutes ago. | Sign in again, then repeat the action within 15 minutes. |
permission_denied | 403 | Only owners and admins change the approval policy. | Ask an organization owner or admin for a role or scope that allows this action. |
It can also return these common errors: validation_failed, api_version_unsupported, invalid_json, unsupported_media_type, authentication_required, api_key_invalid, idempotency_key_reused, idempotency_in_progress, approval_required, approval_rejected, approval_expired, stale_approval, approval_policy_denied, rate_limited, internal_error.