Agent Control

Quick start

Get set up in a few minutes

1-day trial. Agent payments control with spend limits you set. You keep the keys.

Works on

  • Solana
  • Ethereum
  • Base
  1. 01

    Create an account

    Start a 1-day (24 hour) trial. No card.

  2. 02

    Add an agent wallet

    Paste the address. You keep the keys.

  3. 03

    Set spend rules

    A daily cap and where they can send.

  4. 04

    Connect your agent

    Connect your agent with an API key so it checks Agent Control before every spend — you keep the keys.

    How to connect →
  5. 05

    Watch the console

    Inbox is where holds wait for you. Agent Audit builds an on-demand Excel, PDF, or CSV of the check trail. Pause if something looks wrong.

The check only works if you connect your agent. If it skips the check, Inbox cannot stop that send.

Inbox is where off-policy and first-time destinations wait: Allow once, Always allow this address, or Block. Holds expire in 10 minutes and are then treated as a block. When a spend is held, optional email (Settings → Email alerts) and a Slack incoming webhook (if you set the URL in Settings) can ping you with a link to Approval Inbox. No action within 10 minutes = block — the agent must abort. Agent Audit generates an on-demand Excel, PDF, or CSV of the Agent Control trail — not a full chain explorer or ghost replay. Nothing is auto-emailed from Agent Audit. Optional warning alerts can also ping you for a policy alert or spend near the daily cap.

Connect your agent

Check before spend

Agent Control adds a check before spend for agent wallets. Connect your agent so every send asks Agent Control first — agent spend limit and approval before agent send. Off-policy or first-time destinations HOLD in Approval Inbox (hold vs block). You keep the keys. External audit for your agents; agent payments control on Solana, Ethereum, and Base.

Works with Coinbase AgentKit and any agent that can ask before it sends.

  1. 1

    Sign up

    Start at agent-control.net. 1-day trial, no card.

  2. 2

    Enroll the wallet

    Add the agent wallet address. You keep the keys.

  3. 3

    Set policy

    Daily and per-tx caps, plus destinations.

  4. 4

    Create an API key

    Issue an agent API key in the console.

  5. 5

    Check before every send

    The agent POSTs /api/v1/check (or MCP check_transfer, then get_approval on hold). If the check says stop, do not send.

  6. 6

    Inbox and Audit

    Open /inbox for holds (Allow once / Always allow this address / Block). Open /audit for an on-demand Excel, PDF, or CSV trail.

Coinbase AgentKit (and similar)

If your agent already asks before it sends — like Coinbase AgentKit — send that ask to Agent Control. You set the limit. Over the line → hold vs block.

  • You set the spend limit in Agent Control.
  • The agent asks before every send.
  • Under the limit, it can send.
  • Over the line: hold waits in Approval Inbox. Block means do not send.
  • You keep the keys.

That ask is POST /api/v1/check:

fetch("https://agent-control.net/api/v1/check", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_AGENT_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ to: destination, value_usd: amount }),
})

If the check says stop, do not send. Prefer the adapter if you do not want to write fetch yourself.

Adapters

Drop-in helpers so you do not write fetch yourself. They only call the same check. Connect your agent. You keep the keys.

Allow means send. Wait is a hold — you decide in Approval Inbox (hold vs block). Stop means do not send.

Coinbase AgentKit — pass the policy helper:

import { createAgentKitPolicyProvider } from "./src/adapters/agentkit.ts";

const policyProvider = createAgentKitPolicyProvider({
  apiKey: process.env.AGENT_CONTROL_API_KEY,
});
// Pass policyProvider into AgentKit BasePayConfig

Daily cap + approval threshold recipe: Policy recipe. Partner signup with ?partner=agentkit.

x402 — run the same check before money moves:

import { createX402BeforePaymentHook } from "./src/adapters/x402.ts";

client.onBeforePaymentCreation(
  createX402BeforePaymentHook({ apiKey: process.env.AGENT_CONTROL_API_KEY }),
);

Copy src/adapters from the repo. If the check says stop, do not send. Wallet and runtime partners: /partners.

AgentKit policy recipe

Daily cap + approval threshold, then Connect your agent. Copy this tiny createAgentKitPolicyProvider helper. You keep the keys.

  1. In the console, set a daily cap and an approval threshold (max single send).
  2. Create an API key for that agent.
  3. Connect your agent with this helper. Over the line → hold vs block. You keep the keys.
import { createAgentKitPolicyProvider } from "./src/adapters/agentkit.ts";

const policyProvider = createAgentKitPolicyProvider({
  apiKey: process.env.AGENT_CONTROL_API_KEY,
});
// Pass policyProvider into AgentKit BasePayConfig

Same check as adapters. If the check says stop, do not send.

Hold notifications

When a spend is held, we reuse the same email and Slack paths already in Settings. No extra vendor.

  • Email alerts (on by default) send a link to Approval Inbox.
  • Paste a Slack incoming webhook URL in Settings to get the same ping there.
  • No action within 10 minutes = block — the agent must abort.

Coding agents (Cursor and similar) connect the same way: give the agent the API key, then check before spend. HTTP today: POST /api/v1/check with the Bearer key. MCP at POST /api/v1/mcp — tools check_transfer, get_approval, get_agent_status, plus storefront get_pricing, start_trial, attach_human, create_checkout, and get_status. If the check says stop, do not send. If the agent skips the check, Inbox cannot stop that send — funds can move.

Agent storefront

Price, trial, and checkout for agents

Agents find us via /llms.txt and MCP. A human principal signs up and owns billing and Approval Inbox; agents connect under that account. You keep the keys.

1-day trial, no card, no KYC. Then Starter $29 / Pro $49 / Team $149 in USDC on Solana. The agent opens the pay request. The human pays. Agents cannot decide Approval Inbox.

  1. 1

    Read pricing

    GET /api/v1/storefront/pricing or MCP get_pricing. No API key.

    fetch("https://agent-control.net/api/v1/storefront/pricing")
  2. 2

    Start a trial for a human

    POST /api/v1/storefront/trial with that person's email. Agents cannot open a root account. attach_human is the same idea when you already have a principal.

    fetch("https://agent-control.net/api/v1/storefront/trial", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ human_email: "ops@example.com" }),
    })
  3. 3

    Start checkout

    POST /api/v1/billing/checkout with the agent API key. That opens a pay request for the human principal — Solana USDC by default.

    fetch("https://agent-control.net/api/v1/billing/checkout", {
      method: "POST",
      headers: {
        Authorization: "Bearer YOUR_AGENT_API_KEY",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({ plan: "starter" }),
    })

GET /api/v1/storefront/status returns that human's trial or plan. MCP tools: get_pricing, start_trial, attach_human, create_checkout, get_status. Then connect your agent so every send asks Agent Control first.

Compare

When to use Agent Control

Agent payments control for agent wallets. Not a package scanner. Not a firewall you run on your own machine. Not a control plane or cards. You keep the keys. You can use both SpendGuard DIY and Agentspay beside us.

vs agentaudit.dev

Them. They scan code packages.

Us. Agent payments control — spend limits, approval before agent send, Approval Inbox, Agent Audit on wallet sends.

Pick us when the risk is an agent spending crypto, not a code package.

vs SpendGuardx402-spendguard

Them.

  • A firewall you run on your own machine
  • For EVM and x402
  • You run it yourself

Us.

  • Hosted Approval Inbox and Agent Audit
  • Solana, Ethereum, and Base
  • You set the limits. You keep the keys.

They run on your machine. We host the human inbox. You can use both.

vs Agentspaycontrol plane or cards

Them.

  • Control plane or cards
  • Or DIY libs you run yourself

Us.

  • Hosted Approval Inbox and Agent Audit
  • Solana, Ethereum, and Base
  • You keep the keys.

You can use both. They are a control plane or cards. We sit beside the wallet you already have.

vs Turnkey (and similar: Privy)

Them. Wallets and keys.

Us. Connect your agent. We answer allow / hold vs block. You keep the keys.

Pick us when you already have keys and need hold vs block plus an agent wallet audit.

When to use us

Use Agent Control when an operator runs agent wallets that can send crypto and needs spend limits, approval before agent send, and an agent wallet audit trail — External audit for your agents — without giving up custody.

Partners

Wallet and runtime partners

Agent Control complements wallets and runtimes (Turnkey, Privy, Coinbase, x402) — it does not replace them. Non-custodial external audit: spend limits, Approval Inbox (hold vs block), and Agent Audit. You keep the keys. Partner page. Adapters: Connect your agent. First-touch links use ?partner= on signup.

For builders · API details

Give the agent its API key. Before every send it should call the check. If must_abort is true, do not send. Pause and denylist still block (never hold). Off-policy or first-time destinations return hold with poll_url — poll until allow or block (10-minute TTL; expired holds are a block).

curl -s https://agent-control.net/api/v1/check \
  -H "Authorization: Bearer YOUR_AGENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"<destination>","value_usd":2400}'

Hold response includes poll_url and approval_id. MCP tool get_approval polls the same decision. Same tools on POST /api/v1/mcp: check_transfer, get_approval, get_agent_status, plus storefront get_pricing, start_trial, attach_human, create_checkout, get_status.

Machine-readable product brief: /llms.txt.