Skip to content

Get the approval policy

The approval_policies.get operation: GET /api/v1/approval_policy in the REST API and the approval_policies_get tool in the MCP server.

GET/api/v1/approval_policy

Returns the organization's approval policy:

  • tiers: what agents, apps and MCP clients may do per risk tier (allow, require_approval or deny). Until the policy is saved: write and financial allow, compliance and security require_approval.
  • twoPersonFor: the operations that need a second person's approval, whoever calls.
  • amountLimits: for operations that move money, the amount per currency at or below which a call runs at once (micros as a string).
  • overrides: stricter rules for single entities, agents and apps. The strictest applicable rule wins.

Without a saved policy id is null and version 0. availableOperations lists every operation a policy can name. The policy applies in both modes.

At a glance

  • REST: GET /api/v1/approval_policy
  • MCP tool: approval_policies_get
  • Operation ID: approval_policies.get
  • Scope: Organization
  • Permission: approvals:read
  • Risk tier: read
  • Dry run: Not supported
  • Idempotency: Not needed (read only)
  • Modes: Test and live
  • Authentication: API key with the approvals:read scope
  • Since: M2

Request

Query parameters

This operation takes no query parameters.

Response

200 OK with a JSON object:

FieldTypeDescription
object"approval_policy"
idapol_… ID or null
orgIdorg_… ID
tiersobject
tiers.writeone of allow, require_approval, deny
tiers.financialone of allow, require_approval, deny
tiers.complianceone of allow, require_approval, deny
tiers.securityone of allow, require_approval, deny
twoPersonForarray of string
amountLimitsarray of object
amountLimits[].operationIdstring
amountLimits[].perCallmoney
versioninteger (at least 0)
updatedAtdate-time or null
overridesarray of object
overrides[].idapol_… ID
overrides[].object"approval_policy_override"
overrides[].entityIdent_… ID or null
overrides[].agentIdagt_… ID or null
overrides[].clientIdocl_… ID or null
overrides[].tiersobject
overrides[].tiers.writeone of allow, require_approval, deny or null
overrides[].tiers.financialone of allow, require_approval, deny or null
overrides[].tiers.complianceone of allow, require_approval, deny or null
overrides[].tiers.securityone of allow, require_approval, deny or null
overrides[].twoPersonForarray of string
overrides[].amountLimitsarray of object
overrides[].amountLimits[].operationIdstring
overrides[].amountLimits[].perCallmoney
overrides[].versioninteger (at least 1)
overrides[].updatedAtdate-time
availableOperationsarray of object
availableOperations[].idstring
availableOperations[].summarystring
availableOperations[].riskTierone of write, financial, compliance, security
availableOperations[].scopeone of org, entity, brand
availableOperations[].amountsboolean

Examples

Brand changes need a second person; one agent may not move money

HTTP
GET /api/v1/approval_policy
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "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": [
    {
      "id": "apol_01m4ttwd3veh9apbewxheq5xhb",
      "object": "approval_policy_override",
      "entityId": null,
      "agentId": "agt_01m4ttwd3veh9apbewxheq5xhc",
      "clientId": null,
      "tiers": {
        "write": null,
        "financial": "deny",
        "compliance": null,
        "security": null
      },
      "twoPersonFor": [],
      "amountLimits": [],
      "version": 1,
      "updatedAt": "2026-10-13T14:30:00.000Z"
    }
  ],
  "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
    }
  ]
}

No policy saved yet

HTTP
GET /api/v1/approval_policy
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "approval_policy",
  "id": null,
  "orgId": "org_01m4ttwd3veh9apbewxheq5xh3",
  "tiers": {
    "write": "allow",
    "financial": "allow",
    "compliance": "require_approval",
    "security": "require_approval"
  },
  "twoPersonFor": [],
  "amountLimits": [],
  "version": 0,
  "updatedAt": null,
  "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

CodeHTTP statusWhenWhat to do
permission_denied403You can't see the approval policy here.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, authentication_required, api_key_invalid, resource_not_found, dry_run_not_supported, rate_limited, internal_error.