Configuring Spending Policy
A practical guide to policy configuration for common agent deployment patterns. Start tight. Expand based on observed behavior.
Policy templates by use case
Inference agent (MPP sessions)
An agent making high-frequency calls to an inference provider via MPP Session intent. The session cap bounds each individual session; the daily limit bounds total spend across all sessions.
{
"max_single_transfer": 20,
"max_daily_spend": 200,
"categories": ["inference"],
"require_memo": false,
"paused": false
}
Micro-task payment agent
An agent paying sub-agents for small completed tasks. Payments should be small and frequent.
{
"max_single_transfer": 50,
"max_daily_spend": 500,
"categories": ["agent-reward"],
"require_memo": true,
"paused": false
}
Vendor payment agent
An agent paying known vendors on a fixed allowlist. Higher per-transfer limit, strict counterparty control.
{
"max_single_transfer": 2000,
"max_daily_spend": 5000,
"allowed_counterparties": [
"9xTz4KqR8mYvPn3SdFgHj6WbCeAuLo1XkQi5NtZpMwV",
"acct_03x1m7p9k2qrst4ab",
"acct_04y2n8q0l3rsuv5cd"
],
"require_memo": true,
"paused": false
}
Multi-service data agent
An agent calling multiple MPP data providers via Charge intent. No allowlist needed — it pays a range of providers. Use categories to restrict spend type rather than specific counterparties.
{
"max_single_transfer": 5,
"max_daily_spend": 100,
"categories": ["data", "search"],
"require_memo": false,
"escalation_threshold": 4,
"paused": false
}
Revenue-collecting agent (incoming only)
An agent that only receives payments — it should never send. Pause outbound transfers completely.
{
"max_single_transfer": 0,
"max_daily_spend": 0,
"paused": false
}
Setting limits to 0 blocks all outbound transfers without using the pause flag — the account can still receive USDC.
Updating policy
Policy updates are a full replacement. To change a single field without affecting others, read the current policy first:
const current = await client.policy.get(accountId);
await client.policy.update(accountId, {
...current,
max_daily_spend: 3000, // only this field changes
});
Emergency pause
If you see anomalous spending, pause the account immediately:
# Via API
curl -X PUT https://api.mppcash.xyz/v1/accounts/acct_01j8k4x9p2qrst7yz/policy \
-H "Authorization: Bearer $MPPPAL_API_KEY" \
-d '{"paused": true}'
# Via CLI
mppcash policy pause --account acct_01j8k4x9p2qrst7yz
To resume after investigation:
mppcash policy resume --account acct_01j8k4x9p2qrst7yz
Monitoring policy violations
Every rejected transfer fires a transfer.rejected webhook event. Set up an alert on this event — a spike in rejections means either an agent bug, a policy misconfiguration, or a security event.
See Setting Up Webhooks for alert configuration.