Answers · agent payments
How do I temporarily pause an AI agent's spend without revoking its credential?
Last updated
TL;DR: Revoking an agent's credential is permanent: to resume, you issue a new credential with a new key and rewire everything that used it. Often you only need a pause, for example during a vendor incident, a billing review, a holiday freeze or while you look into an odd purchase. Pause at the policy layer. Record a new set_spend_policy version that denies everything (caps of 0 and an allowlist holding only a placeholder domain that matches nothing), or give the live policy an expires_at so authorize_spend returns policy_expired after a set time. Set any Stripe Issuing card the agent holds to inactive, which can be reversed, unlike canceled. Use account_controls freeze if credit spending, listings and new work on the whole Rightshold account should stop too. To resume, record the old policy again and set the card back to active. The credential, its key and its reputation stay the same. That is different from the mid-task spend revoke page (revoke_agent, a permanent cut) and from kill-switch pages. authorize_spend proves the pause is in force, and ledger_verify keeps the pause and resume checkable.
What should I check, step by step?
1. Decide that you want a pause, not a revoke. If the key may be compromised or the agent is acting maliciously, revoke instead (revoke_agent can't be undone). A pause is for situations where you trust the credential and want to resume later.
- Save the current policy first: GET /v1/spend/policies/{credential_id} returns the live policy and spent_today_minor, so you can record the same rules again on resume.
- Pause with a new set_spend_policy version: per_tx_max_minor 0, daily_max_minor 0, and allowed_domains holding one placeholder domain such as paused.invalid. Any positive amount returns over_per_transaction_cap and over_daily_cap, and every real merchant returns merchant_not_allowed.
- Don't pause by clearing the allowlist. An empty allowed_domains or allowed_categories list means no restriction, so clearing the list widens spend instead of stopping it.
- For a planned, time-boxed window, set expires_at on the live policy instead. After that time, authorize_spend returns policy_expired until you record a new policy. expires_at must be in the future when you set it.
- Pause the money rails too: set a Stripe Issuing card to inactive (authorizations decline with card_inactive, and you can set it back to active later). Never use canceled for a pause, because it is permanent. Pause or disable the wallet key or payment-provider key the agent uses.
- If the whole Rightshold account should stop (credit spending, new listings, new work), use account_controls freeze with a reason, then unfreeze when you're done. It does not change authorize_spend answers by itself, so keep the policy pause in place.
- Resume by recording the saved policy again (a new version), setting the card back to active and unfreezing. Then confirm one authorize_spend allow. Test both directions: while paused, one deny; after resume, one allow, on the same credential.
What is the difference between pausing and revoking an AI agent's spend authority?
revoke_agent is a permanent cut. Every Rightshold check refuses the credential from that moment, and resuming means a new credential, a new key and a fresh reputation. The page on revoking spend authority mid-task covers that path for when trust is gone.
- A pause keeps the credential, its key and its track record, and stops new spend decisions from returning allow. That fits incidents where the agent is fine but the situation isn't: a vendor outage, a disputed invoice, an audit, or an owner who wants to look at the run before more money moves.
- NIST SP 800-53 Rev. 5 AC-2(3) (disable accounts) and AC-3 (access enforcement) treat disabling access as different from deleting it. EU AI Act Article 14 expects oversight people who can step in and stop a system. A recorded, reversible pause is that step for agent spend.
How do I pause an AI agent's spend with a deny-all policy version or expires_at?
set_spend_policy records a new version that replaces the old one from the moment it is recorded. A deny-all version (caps of 0, allowlist of paused.invalid) makes authorize_spend return a signed deny with over_per_transaction_cap, over_daily_cap and merchant_not_allowed for any real purchase.
- expires_at lets the pause start on its own: after the timestamp, authorize_spend adds policy_expired. That suits a policy that should only last for a sprint or a promotion. To pause right away, record the deny-all version, because expires_at must be in the future when it is set.
- Don't pause by sending an empty allowlist. Empty allowed_domains and allowed_categories mean no restriction, so that change widens spend. Keep the paused version and the saved live version side by side so resuming is one call.
How do I pause an AI agent's card and account, then resume spend safely?
Rightshold signs decisions but does not hold the agent's card or wallet. Set a Stripe Issuing card to inactive (it declines with card_inactive and can be set back to active). Canceled is permanent, so keep it for a revoke. Pause or disable any wallet or provider key the agent holds.
- account_controls freeze stops credit spending, new listings and new work on the Rightshold account until the owner unfreezes. Use it when the pause covers the whole account, together with the policy pause that governs authorize_spend.
- Resume in order: record the saved policy again, set the card back to active, unfreeze, then run one authorize_spend and confirm it allows. Every pause and resume is a ledger entry, and ledger_verify is free and keyless.
How do I ask Rightshold about this (free, no key)?
Add the MCP server https://www.rightshold.com/mcp to Claude, Cursor, ChatGPT, Grok or VS Code, then ask: “Pause my purchasing agent's spending without revoking its credential: record a deny-all spend policy (0 caps, placeholder allowlist) so authorize_spend denies everything, and tell me how to resume with my old policy later.”
{
"tool": "set_spend_policy",
"arguments": {
"credential_id": "crd_YOUR_AGENT_CREDENTIAL",
"currency": "USD",
"per_tx_max_minor": 0,
"daily_max_minor": 0,
"allowed_domains": [
"paused.invalid"
],
"allowed_categories": [
"paused"
]
}
}- Needs your owner account key. It's in the trust toolset (connect to /mcp?toolset=trust). Save the live policy with GET /v1/spend/policies/{credential_id} first, and resume by calling set_spend_policy with those values again.
- authorize_spend proves the pause: any real purchase returns a signed deny (over_per_transaction_cap, over_daily_cap, merchant_not_allowed). After resume, the same call allows.
- account_controls with action freeze stops credit spending, listings and new work on the whole account. unfreeze lifts it. It doesn't change authorize_spend answers, so keep the policy pause in place.
- revoke_agent is the permanent option if the pause turns into a compromise. check_revocation is free, and ledger_verify is free and keyless for every pause and resume.
Rightshold records spending policies, signed allow/deny decisions, account freezes and revocations on a hash-chained ledger. It never holds, moves or settles money, and it can't set your Stripe cards, wallets or provider keys to inactive for you. Pausing those rails, and making merchants refuse denied purchases, are steps you run around those records. Not financial or legal advice.
What are the sources?
- NIST SP 800-53 Rev. 5: AC-2(3) (disable accounts) and AC-3 (access enforcement)
- Stripe API: update an Issuing card (status active, inactive, canceled)
- Stripe: Issuing for agents
- EU AI Act, Regulation (EU) 2024/1689: Article 14 (human oversight)
- Agent spending policies on Rightshold
- Agent kill-switch on Rightshold
Related
- How to revoke an AI agent's spend authority mid-task and freeze pending payments
- How to build a kill switch for an autonomous AI agent
- How to alert when an AI agent approaches its spend cap before the hard deny
- How to give an AI agent a virtual card with a spending limit
Not legal advice. JSON · Markdown · All answers
Get a free API key in one call
No card and no email needed. 100 free credits; the license and policy checks stay free without a key.
curl -s -X POST https://www.rightshold.com/v1/accounts/signup -H "Content-Type: application/json" -d '{"accept_terms":true}'
export RIGHTSHOLD_API_KEY=rs_... # the api_key from the reply (shown once)
curl -s https://www.rightshold.com/v1/licenses/check -H "Authorization: Bearer $RIGHTSHOLD_API_KEY" \
-H "Content-Type: application/json" -d '{"license":"MIT","intended_use":{"commercial_use":true}}'
