Rule shape
Operators
Supported rule types
The policy endpoints reject unsupported rule types with a 400. A stored rule whose type the engine
does not recognize denies every payment the policy covers.
Rule patterns
Agent identity enforcement
Identity rules limit which agents can pay by environment, risk tier, owner role, required identity tag, and attestation mode. An identityALLOW rule denies the payment when the agent has no value
for the field it checks. DEV and STAGING agents also cannot select mainnet or unclassified
wallets, even when one was accidentally assigned.
The value is one string or a JSON list. AGENT_ENVIRONMENT accepts DEV, STAGING, and PROD.
This rule lets only production agents pay:
Require review above a threshold
A policy decision that requires approval always creates a request in Alerts & Approvals. If no
custom workflow matches, one review from an organization Owner, Admin, or Manager is required, and
the initiator cannot approve their own held payment. A final approval automatically submits the
payment for Conto-managed wallets and links the chain receipt from the approval review. External
and smart-contract wallets keep their manual execution requirements. An external wallet payment is
reserved against spend limits at the final approval and must be confirmed within 24 hours. A final
decision sends an
approval.approved or approval.denied event to your organization webhook for
your own audit trail. See Webhooks.Request a scoped policy change
An agent with an admin SDK key can request a specific policy change without editing the policy directly. UsePOST /api/sdk/policies/exceptions with the policies:exceptions scope, then use
GET /api/sdk/policies/exceptions to track it.
normalizedStatus is pending, in_review, resolved, or dismissed. Creating a request does
not change a policy. Review it in Alerts & Approvals.
Limit transaction velocity
Set exactly one ofmaxCount or maxAmount. Supported periods are HOUR, DAY, WEEK, and
MONTH. HOUR and DAY use rolling one-hour and 24-hour history. Weekly and monthly counts use UTC
calendar periods. Weekly and monthly amount limits use the matching cumulative spend counters.
maxAmount:
scope. The default WALLET counts every transaction in
the window. RECIPIENT counts only transactions to the current recipient address, which limits
rapid repeated payments to one counterparty without counting unrelated activity. RECIPIENT works
with maxCount only. A maxAmount rule with RECIPIENT denies every payment.
RECIPIENT scope, a checkout’s recipient is the registrable domain of its checkout URL, so the
rule limits purchases at one store. See checkout purchases.
Restrict by category
Category rules read thecategory the agent sends. Both ALLOWED_CATEGORIES and
BLOCKED_CATEGORIES deny a payment with no category, so always send category when you use them.
The value is a JSON list of categories. {"categories": [...]} is also accepted. The API rejects
any other shape and an empty list.
On a card payment the category is the merchant category code (MCC), such as 5411. A category
rule can list the code or one of the categories the dashboard offers, such as Retail or
Entertainment. Conto files each MCC under one of those categories by the standard MCC ranges, and
a code outside them is Other. A card payment with no MCC is denied while a category rule applies
to it.
Relationship-scoped payee controls
Use relationship controls when two agents need different limits for the same counterparty. Set them on the counterparty detail page:
These controls add to global counterparty lifecycle gating, organization baselines, and assigned
wallet or agent policies. Moving a counterparty to
APPROVED or TRUSTED does not weaken a
relationship-level approval requirement.
For production agents, the first payment attempt to an unknown address creates a DISCOVERED
counterparty and relationship before evaluation. This applies to managed payments
(/api/sdk/payments/request) and self-custody approvals (/api/sdk/payments/approve). The payment
is routed to review until an operator advances the counterparty lifecycle. The agent sees the
reason This payee needs review before payments to it can proceed automatically., and
/api/sdk/payments/approve returns the reason code PAYEE_REVIEW_REQUIRED. If Conto cannot persist
that review record, the request fails closed with COUNTERPARTY_REVIEW_UNAVAILABLE.
Development and staging agents are not held for payee discovery. A payee they pay still appears as
DISCOVERED in the dashboard for review, and moving it to PENDING_REVIEW, MONITORED,
QUARANTINED, or BLOCKED applies to every agent.
Review routing never overrides a hard denial. Spend limits, allowlists, sanctions rules, and other
deny controls must leave an eligible wallet before counterparty or relationship approval can apply.
Geographic restrictions (OFAC)
The rule readscontext.recipientCountry from the payment request. A DENY list is skipped when
the agent leaves it out. Conto already blocks OFAC-sanctioned countries, including CU, IR, KP, SY,
and RU, whenever the country is sent. On a card payment Conto checks the merchant’s country the
same way. For a closed list, use ALLOW with the countries you permit,
which also denies payments that carry no country. Address sanctions screening applies to every
payment, with or without a geographic rule.
Contract allowlist
targetContractAddress in the payment request. An ALLOW contract rule denies any payment
without it, including plain transfers and external-wallet approvals, so assign it only to agents
that call contracts. A DENY or REQUIRE_APPROVAL contract rule applies only to payments that
include targetContractAddress.
If a rule uses protocol names or categories, register the organization’s known contract
classifications through the authenticated contract registry:
GET /api/contract-registrylists entries and supportscategory,limit, andoffsetPOST /api/contract-registrysaves an address with optionalchainId,label,protocolName, andprotocolCategoryGET,PATCH, orDELETE /api/contract-registry/{address}reads, updates, or removes one entry
x402 protocol rules
The dashboard exposes guidedX402_SPEND_LIMIT, X402_SERVICE_CONTROL, and
X402_ENDPOINT_CONTROL policy types. The API also accepts those policy types directly. Use
COMPOSITE only when one policy deliberately mixes categories.
The MPP rules use the same shapes.
MPP_MAX_SESSION_DEPOSIT, MPP_MAX_CONCURRENT_SESSIONS, and
MPP_MAX_SESSION_DURATION (in hours) take a number. MPP_MAX_CONCURRENT_SESSIONS counts a session
from its approved pre-authorize until it is closed or its lifetime passes.
MPP protocol rules
The dashboard exposes guidedMPP_SPEND_LIMIT, MPP_SERVICE_CONTROL, MPP_ENDPOINT_CONTROL, and
MPP_SESSION_LIFECYCLE policy types. Session-lifecycle rules are evaluated only for session
intent, and expired sessions do not count toward concurrency.
Connected-card store rules
Store rules name a store by the domain its checkout runs on. They apply when an agent requests a connected-card credential and to checkout purchases. For a card, Conto reads the domain from the checkout origin on the authorization the cardholder verified, so the agent cannot change it. For a checkout, Conto reads it from the checkout URL, not from the merchant id the agent sends.- An entry covers its own domain and every subdomain.
example.comcoverscheckout.example.com. A leadingwww.is ignored. - A list holds 1 to 100 domains. The policy endpoints reject any other operator and action pairing.
- A card payment or checkout with no checkout domain is denied while a store rule applies to it.
- An
ALLOWstore rule also denies that agent’s wallet, x402, and MPP payments, because they carry no store domain. For an agent that pays on more than one rail, useNOT_IN_LISTwithDENY. That form leaves other rails alone.
shop.example.com is allowed, and a
checkout at a store the list does not name is denied. See
checkout purchases.
Budget allocations
UseBUDGET_CAP when a wallet or agent needs a bounded allowance for a period, project, or
category. Supported periods are DAILY, WEEKLY, MONTHLY, QUARTERLY, and YEARLY. Period
boundaries are calculated in UTC.
department, project, or category to the rule value to scope the cap. Conto compares only
transactions recorded with the same dimensions and includes pending, confirming, and confirmed
spend. The request must pass the matching scope through context.department and context.project.
category must match the payment’s category exactly, including case. A payment with a different
or missing category is neither counted nor capped by that budget.
A budget without a department or project also counts managed payments being executed,
external-wallet approvals that are not confirmed and not expired, and
checkout checkpoint purchases while their spend is held and after
they are paid, matched by category. A budget on a
policy assigned to the agent or the organization counts the agent’s spend across all of its wallets.
A policy assigned only to a wallet counts the agent’s spend through that wallet. On cards, the same
budget counts the agent’s spend across all of its cards, and a budget on a policy linked to a card
counts that card’s spend.
On cards, a QUARTERLY or YEARLY budget counts the card purchases made in the period, including
issued credentials and purchases that are approved but not yet charged. These budget histories
remain separate for wallet and card payments. To set a daily, weekly, or
monthly cap across an agent’s wallets and live cards together, use DAILY_LIMIT, WEEKLY_LIMIT,
or MONTHLY_LIMIT at agent or organization scope. Those rules use combined period counters. Scoped
BUDGET_CAP and velocity rules keep their own transaction histories. See
Spend limits.
Expiration policies
UseDATE_RANGE for temporary permissions and BLACKOUT_PERIOD for known no-spend windows. An
ALLOW date range denies every payment outside the range. It does not switch the policy off when
the range ends. BLACKOUT_PERIOD values list their windows under windows. The policy endpoints
return 400 for time, date, blackout, and geographic values in a shape the engine cannot read.
timezone. See Time Windows.
Related
Trust scoring
How payee trust scores are calculated, plus sanctions screening and wallet reputation
Recipes
Copy-paste policy setup snippets