---
title: Policy vocabulary
description: Policy schema version, canonical categories, matching rules, and default velocity caps. Generated from code.
url: https://thepoints.io/docs/agents/reference/policy-vocabulary
audience: [agents, operators, developers]
status: Live
---

# Policy vocabulary

> **Agent Pay status:** Approve does not execute. Execution: not enabled. ACH settlement: not enabled. prepare_payment never moves money. Machine-readable: [/docs/agents/status.json](/docs/agents/status.json).

Generated from code. Machine-readable: [/docs/agents/reference/policy-vocabulary.json](/docs/agents/reference/policy-vocabulary.json).

Call `get_agent_pay_policy_vocabulary` for the live values on your connection, including the operator's allow and block lists. Send the returned `policySchemaVersion` on every `prepare_payment` call.

## Policy schema version

- Current: `1`
- Supported range: `1` to `1`
- An unsupported version fails closed.

## Categories

| Value | Label |
|---|---|
| `ai_compute` | AI compute |
| `advertising_marketing` | Advertising & marketing |
| `saas_apis` | SaaS / APIs |
| `ecommerce_procurement` | E-commerce procurement |
| `logistics` | Logistics |

There are 5 canonical categories. Aliases are not accepted.

## Matching rules

- `mode`: `exact_canonical`
- `caseNormalization`: `trim_lower`
- `aliasesSupported`: `false`
- `unknownCategoryDecision`: `deny`
- `emptyAllowlistMeans`: `any_canonical_category_allowed_unless_blocked`

- Use the exact `value` strings in prepare_payment.category and agent allowlists.
- Aliases (e.g. saas, SaaS APIs) are rejected and do not bypass allowlists.
- Policy matching is unchanged, except that unknown categories are denied.
- Send prepare_payment.policySchemaVersion matching policySchemaVersion (or within min/max supported). Unsupported versions fail closed on spend.

## Default velocity caps

Server defaults that limit how fast drafts can be prepared. The values that apply to your connection come back from the tool.

| Cap | Default |
|---|---|
| `maxDraftsPerHour` | 12 |
| `maxDraftsPerDay` | 48 |
| `maxOutstandingDrafts` | 25 |
| `maxAggregateCentsPerHour` | 100000 |
| `maxAggregateCentsPerDay` | 500000 |

A prepare that would exceed a cap is refused.

These are per-agent velocity caps on prepared drafts. They are separate from spend-envelope aggregate caps, which are in progress (usage across payments is not persisted yet).
