Policy fields
All 61 fields a policy rule can test, with their types and operators.
A policy rule tests fields of the evaluation context. The list is closed: an unknown field is a validation error at authoring time, not a silent undefined at decision time. That is what makes evaluation total — every rule either matches or does not, and there is no third outcome.
Amounts are inputs
amount is in minor currency units and exists purely as a policy input and as recorded decision context. Veefore evaluates it and records it. It does not hold, authorise, capture or move anything.
The same list is served at GET /v1/policies/builder-schema, which is what the visual Policy Builder renders from.
#Agent
| Field | Type | Operators | Meaning |
|---|---|---|---|
agent.id |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Immutable agent identifier. |
agent.name |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Display name. Metadata only — never a security identity. |
agent.status |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Lifecycle state. |
agent.risk_level |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Standing risk rating of the agent. |
agent.verification_status |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Identity verification state. |
agent.protocols |
string[] |
contains not_contains contains_any contains_all eq neq exists not_exists |
Protocols the agent is registered for. |
agent.capabilities |
string[] |
contains not_contains contains_any contains_all eq neq exists not_exists |
Capabilities currently granted to the agent. |
agent.tags |
string[] |
contains not_contains contains_any contains_all eq neq exists not_exists |
Operator-assigned labels. |
agent.status accepts: PROVISIONING, ACTIVE, PAUSED, SUSPENDED, REVOKED, EXPIRED, DECOMMISSIONED.
agent.risk_level accepts: LOW, MEDIUM, HIGH, CRITICAL.
agent.verification_status accepts: UNVERIFIED, PENDING, VERIFIED, FAILED.
agent.protocols accepts: HTTP, MCP, A2A.
#Tenancy
| Field | Type | Operators | Meaning |
|---|---|---|---|
organization.id |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Organization identifier. |
workspace.id |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Workspace identifier. |
environment.id |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Environment identifier. |
environment.type |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Deployment tier. |
environment.name |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Environment display name. |
environment.type accepts: DEVELOPMENT, STAGING, PRODUCTION.
#Principal
| Field | Type | Operators | Meaning |
|---|---|---|---|
principal.type |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Who initiated the request. |
principal.id |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Identifier of the initiating principal. |
principal.type accepts: USER, AGENT, SYSTEM, API_KEY.
#Tool
| Field | Type | Operators | Meaning |
|---|---|---|---|
tool.id |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Registered tool identifier. |
tool.key |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Tool key, e.g. refund_customer. |
tool.kind |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Execution kind. |
tool.protocol |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Transport protocol. |
tool.risk_level |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Risk rating assigned to the tool. |
tool.dangerous |
boolean |
is_true is_false eq neq |
Tool is flagged as destructive or high impact. |
tool.kind accepts: HTTP, MCP, A2A, DATABASE, WEBHOOK, SIMULATED, CLIENT.
tool.protocol accepts: HTTP, MCP, A2A.
tool.risk_level accepts: LOW, MEDIUM, HIGH, CRITICAL.
#Action
| Field | Type | Operators | Meaning |
|---|---|---|---|
capability |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Capability required by the request, e.g. refund.create. |
action |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Logical operation being performed. |
#Resource
| Field | Type | Operators | Meaning |
|---|---|---|---|
resource.key |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Target resource identifier. |
resource.type |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Resource category, e.g. database. |
resource.sensitivity |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Data classification. |
resource.attributes.<path> |
object |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists eq neq gt gte lt lte between in not_in exists not_exists |
Arbitrary resource attribute by path. |
resource.sensitivity accepts: PUBLIC, INTERNAL, CONFIDENTIAL, RESTRICTED.
#Request
| Field | Type | Operators | Meaning |
|---|---|---|---|
amount |
amount |
eq neq gt gte lt lte between in not_in exists not_exists |
Requested amount converted to the organization base currency, in minor units (e.g. 1000000 = ₹10,000.00 when the base is INR). Thresholds written here are in the base currency. A request whose currency cannot be converted is held for approval before policy amounts are relied on. Veefore never moves money. |
currency |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Original ISO 4217 currency of the request, e.g. USD. Not the base currency. |
original_amount |
amount |
eq neq gt gte lt lte between in not_in exists not_exists |
Amount exactly as requested, in minor units of the original currency (no conversion). Combine with a currency condition when comparing it. |
original_currency |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
ISO 4217 currency the request was made in (same as "Currency"). |
destination.host |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Outbound hostname the tool will contact. |
destination.risk_level |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Risk rating of the destination. |
parameters.<path> |
object |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists eq neq gt gte lt lte between in not_in exists not_exists is_true is_false eq neq |
Request parameter by dotted path. |
destination.risk_level accepts: LOW, MEDIUM, HIGH, CRITICAL.
#Risk
| Field | Type | Operators | Meaning |
|---|---|---|---|
risk.level |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Computed risk level for this request. |
risk.score |
number |
eq neq gt gte lt lte between in not_in exists not_exists |
Weighted risk score, 0-100. |
risk.signals |
string[] |
contains not_contains contains_any contains_all eq neq exists not_exists |
Signal types that fired for this request. |
risk.level accepts: LOW, MEDIUM, HIGH, CRITICAL.
#Trust
| Field | Type | Operators | Meaning |
|---|---|---|---|
trust.identity_verified |
boolean |
is_true is_false eq neq |
Valid identity verification evidence exists. |
trust.organization_verified |
boolean |
is_true is_false eq neq |
Valid organization verification evidence exists. |
trust.security_attestation_valid |
boolean |
is_true is_false eq neq |
Unexpired security attestation evidence exists. |
trust.protocol_compliance_valid |
boolean |
is_true is_false eq neq |
Unexpired protocol compliance evidence exists. |
trust.active_incidents |
number |
eq neq gt gte lt lte between in not_in exists not_exists |
Open incidents involving this agent. |
trust.expired_evidence_count |
number |
eq neq gt gte lt lte between in not_in exists not_exists |
Trust evidence records that have expired. |
#Authority
| Field | Type | Operators | Meaning |
|---|---|---|---|
authority.max_amount |
amount |
eq neq gt gte lt lte between in not_in exists not_exists |
Maximum amount permitted by delegated authority, converted to the organization base currency (minor units). |
authority.capabilities |
string[] |
contains not_contains contains_any contains_all eq neq exists not_exists |
Capabilities permitted by delegated authority. |
authority.depth |
number |
eq neq gt gte lt lte between in not_in exists not_exists |
Delegation depth backing the authority. |
delegation.depth |
number |
eq neq gt gte lt lte between in not_in exists not_exists |
Depth of the delegation used. |
delegation.chain_length |
number |
eq neq gt gte lt lte between in not_in exists not_exists |
Number of delegations in the chain. |
delegation.valid |
boolean |
is_true is_false eq neq |
Delegation chain resolved successfully. |
#Context
| Field | Type | Operators | Meaning |
|---|---|---|---|
time.hour_utc |
number |
eq neq gt gte lt lte between in not_in exists not_exists |
Hour of day, 0-23, in UTC. |
time.day_of_week |
number |
eq neq gt gte lt lte between in not_in exists not_exists |
0 = Sunday through 6 = Saturday, UTC. |
time.iso |
string |
eq neq in not_in contains not_contains starts_with ends_with matches exists not_exists |
Request timestamp, ISO-8601 UTC. |
velocity.actions_last_minute |
number |
eq neq gt gte lt lte between in not_in exists not_exists |
Agent action count in the trailing 60 seconds. |
velocity.actions_last_hour |
number |
eq neq gt gte lt lte between in not_in exists not_exists |
Agent action count in the trailing hour. |
velocity.actions_last_day |
number |
eq neq gt gte lt lte between in not_in exists not_exists |
Agent action count in the trailing 24 hours. |
velocity.amount_last_day |
amount |
eq neq gt gte lt lte between in not_in exists not_exists |
Sum of amounts in the trailing 24 hours, in the organization base currency. |
history.tool_used_before |
boolean |
is_true is_false eq neq |
Agent has previously used this tool. |
history.destination_used_before |
boolean |
is_true is_false eq neq |
Agent has previously contacted this destination. |
history.resource_used_before |
boolean |
is_true is_false eq neq |
Agent has previously touched this resource. |
#Approval
| Field | Type | Operators | Meaning |
|---|---|---|---|
approval.present |
boolean |
is_true is_false eq neq |
Request carries an approval reference. |
approval.valid |
boolean |
is_true is_false eq neq |
Presented approval is granted and bound to this request. |