Skip to main content
Build a three-tier test: one payment is approved, one waits for approval, and one is denied. More scenarios covers blocked recipients and time windows.

Prerequisites

A Conto account and organization
An active agent with a linked, funded wallet and an SDK key in CONTO_API_KEY. The Quickstart walks through creating the wallet, connecting the agent, and generating the key

Keep the test isolated

Use a dedicated test agent and its Tempo Testnet wallet. Other organization policies, approval workflows, or wallet caps can change the result. Make sure the wallet’s per-transaction cap is at least 20 and its remaining daily budget covers the test. Pass its walletId when multiple wallets exist. Authorization tests create request records and send no funds unless you execute. The starter policies on a new agent (25perpayment,reviewabove25 per payment, review above 10) do not change these results. Use a DEV agent, because a production agent holds its first payment to a new address for payee review. Conto re-checks controls before a managed payment executes, so a policy change can stop a request that was approved earlier. Read lifecycle and recovery before resuming.

Step 1: Verify your setup

Confirm the agent is configured before you create policies:
Check that the setup summary shows:
  • the agent is available for payment calls
  • at least one wallet is available
If either check fails, go back to the Quickstart.

Step 2: Create policies

Policy A: Spend limit

1

Create the policy

Go to Policies > Create Policy.
  • Policy Name: “Manual Spend Test”
  • Applies to: Only assigned agents, wallets, or cards
  • Policy Type: Spend Limit
  • Max Transaction ($): 15
  • Description: “Deny transactions over $15”
2

Check the rule

The form creates this rule:This allows transactions up to $15. Anything above is denied.
How rule actions work: an ALLOW rule is a required condition, so a transaction that does not match it is denied. A DENY or REQUIRE_APPROVAL rule triggers when its condition matches. DENY + GREATER_THAN 15 has the same effect as this rule. REQUIRE_APPROVAL + GREATER_THAN 10 requires manual approval when the amount is over $10. See how policies are evaluated.

Policy B: Approval threshold

1

Create the policy

Go to Policies > Create Policy.
  • Policy Name: “Manual Approval Test”
  • Applies to: Only assigned agents, wallets, or cards
  • Policy Type: Approval Threshold
  • Require Approval Above ($): 10
  • Description: “Require approval for transactions over $10”
2

Check the rule

The form creates this rule:Transactions over $10 require manual approval in the dashboard before they can execute.

Step 3: Assign policies to the agent

1

Open the agent detail page

Navigate to your agent’s detail page.
2

Go to the Permissions tab

Click the Permissions tab.
3

Assign both policies

Assign “Manual Spend Test” and “Manual Approval Test” to the agent. All assigned policies are evaluated with AND logic. The most restrictive rule wins.
To confirm, re-run the GET /api/sdk/setup call from Step 1 and check that the payment-control summary reflects the assigned policies.

Step 4: Run test transactions

Use curl or any HTTP client. With the SDK, call conto.payments.request({ amount, recipientAddress, walletId, idempotencyKey }) with amounts 5, 12, and 20. Use a different key for each test, and reuse a key only to retry the same test. See Payments.

Test 1: $5 payment (expect APPROVED)

Expected response:

Test 2: $12 payment (expect REQUIRES_APPROVAL)

Expected response:

Test 3: $20 payment (expect DENIED)

Expected response:

Step 5: Execute an approved payment

If Test 1 returned APPROVED, you can execute it onchain:
The response includes receipt.txHash, receipt.transactionId, and receipt.settlementMode. Submission is not confirmation. Follow Track and recover a payment to verify the final state. Held and denied requests appear in Alerts & Approvals and Audit Logs, not on Transactions, which lists executed payments. Each audit entry shows which policies were evaluated, which rules matched, and the final decision.

More scenarios

Both scenarios use the same agent and a $5 payment, so only the new policy can change the result. Create each policy in Policies > Create Policy with Applies to set to Only assigned agents, wallets, or cards, then assign it on the agent’s Permissions tab.

Blocked counterparty

Expect DENIED with the reason This recipient is not allowed by the current payment controls. The amount does not matter. The address itself is blocked.

Time window

Send a $5 payment outside 9am to 5pm UTC, or set the window to a range that excludes the current UTC time. Expect DENIED with the reason This payment is outside the permitted schedule. Remove the policy afterward so it does not block your other tests.
Time rules without a timezone are evaluated in UTC. To test a local schedule, create the rule over the API with an IANA timezone in its value. See time windows.

Troubleshooting

For setup issues such as a lost SDK key or an unfunded wallet, see If the result needs attention in the Quickstart.
Check the Permissions tab on the agent detail page. Assigned policies apply only to the agents they are assigned to, and only while they are active. Also check that each policy has rules.
Every applicable policy is evaluated with AND logic, whatever its priority. If one policy denies while another would require approval, the denial wins. For example, if both an approval threshold (>$10) and a spend limit (>$15) match, DENY wins over REQUIRES_APPROVAL. Priority changes sort order only. It does not override a failing rule. Check which policies are assigned on the Permissions tab.
Every applicable policy must pass, so the strictest cap wins. New agents are linked to the starter policies (25perpayment,25 per payment, 100 per day, review above 10).Ifthestartercapis10). If the starter cap is 25 and your policy allows 100,the100, the 25 cap wins. Edit or unassign the starter policy on the Permissions tab.

Next steps

SDK reference

Full SDK payment methods and options

Go live checklist

Checks before you enable live funds