See SatGate on production

Four recordings from production, with narration.

Your agents' API calls: a budget they can't overspend

Connect an API, set a route to Control, and mint a token with a 100-credit budget. Without the token the route returns 401; with it, 200. A demo agent spends the budget at 10 credits a call until SatGate blocks its next call. Then the open-source verifier checks the signed receipt for that refusal.

The agent in the recording is the dashboard's built-in demo agent.

Your agents' tool calls: only the tools you allow, within budget

Add an MCP server, mint a token with a 3-credit budget that can call one tool, and copy its config into Claude Code, Cursor, Hermes, OpenClaw or any other MCP client. A tool outside the list is refused before it runs. Once the budget is spent, the next call is refused too. SatGate signs a receipt when it refuses an agent over a budget, a missing payment or a tool permission, and when an agent spends from a budget in Control. The open-source verifier checks the receipts.

The agent in the recording is a scripted MCP client using the public satgate-mcp-bridge npm package.

Your agents on a real brokerage account: each with its own limits

Two agents trade one real brokerage account through SatGate, each with its own token. The trading agent can spend $200 a day, needs the owner's OK for any order over $4, and can only use its own account. It's refused on the owner's main account, buys $1 of Bitcoin, and is refused a $250 order the account could pay for. A $5 order waits until the owner approves it from the link in the email, then fills. The owner revokes the trading agent's token. Its next connection is refused, and the savings agent keeps trading. The refusals, the hold and each order get a signed receipt, and the open-source verifier checks them.

The agents in the recording are scripted MCP clients. The orders are real: three Bitcoin buys, $7 in total. Account numbers are masked.

External agents: pay before they get in

Set a route to Admit and choose how external agents pay: USDC on Base, sats over Lightning, or both, each with its own price. An agent with no wallet gets 402 Payment Required and never reaches your API. In the recording, a second agent sends one cent in USDC, the payment settles on Base, and the call goes through. Sending the same payment again is refused. With USDC, each payment buys one request. On Lightning you choose how many requests one payment buys, and on sat-priced routes the price can rise under load, up to a ceiling you set; unpaid 402s don't raise it. Paying never gets an agent past your access rules. Payment refusals get a signed receipt, and so do most paid requests.

The agents in the recording are scripted HTTP clients. The USDC payment is real: one cent, settled on Base.

Check the receipts from the video yourself. The paid call: live receipt or downloaded copy. A call refused for no payment: live receipt or downloaded copy. Then run the open-source verifier against SatGate's public key:

python3 tools/verify_evidence_pack.py https://api.satgate.io/v1/evidence/evid_e-suLq8DGymE6LvIJ2D1mTN95Oavy_4E --jwks-url https://api.satgate.io/.well-known/jwks.json --require-trusted-issuer

What the verifier checks

90-second walkthrough

One agent, allowed, blocked and revoked.

This walkthrough is a simulation with sample data, so it runs the same way every time. The receipts match the sample signed receipt (Evidence Pack) in the viewer. To see SatGate on production, watch the four recordings above.

1 · No token

HTTP 401
decision
denied
reason
AUTHENTICATION_REQUIRED: no token presented
route or tool
/v1/invoices/search
budget impact
Nothing spent
receipt
none

2 · Token issued

token created
decision
none
reason
tenant_id = acme-finance
route or tool
agent:invoice-reconciler-worker
budget impact
30 credits budget
receipt
none: issuing a token is an audit log entry

3 · Allowed

HTTP 200
decision
allowed
reason
budget_authorized
route or tool
mcp:invoices.search
budget impact
10 credits spent; 20 credits remaining
receipt
rcpt_demo_003

4 · Blocked: not allowed

HTTP 403
decision
denied
reason
policy_denied: the token's scope does not cover this route
route or tool
/v1/invoices/export
budget impact
Nothing spent
receipt
rcpt_demo_006

5 · Blocked: out of budget

HTTP 402
decision
denied
reason
budget_exhausted
route or tool
/v1/invoices/reconcile
budget impact
30 of 30 credits spent when refused
receipt
rcpt_demo_007

6 · Blocked: token revoked

HTTP 401/403
decision
denied
reason
token_revoked
route or tool
mcp:invoices.search
budget impact
Nothing spent after the revoke
receipt
none

7 · Receipt exported

Signed receipt (Evidence Pack) ep_demo_2026_05_10_001 bundles every receipt above with the policy, the agent, the budget and the hashes. It is sample data with a placeholder signature, so it will not pass a signature check.

Watch SatGate stop an agent

Two cases: an admin revokes an agent and its next request fails, and an agent runs out of budget and stops before the bill arrives.

Ready

Click "Run Simulation" to watch it step by step.

FAQ

SatGate demo questions

What does the SatGate demo show?

Four things: creating a token for an agent, limiting what it can call, capping what it can spend, and charging external agents before they get in.

How does SatGate stop unauthorized agent spend?

Before SatGate forwards a request, it checks who the agent is, what its token allows, how much budget is left and whether the token was revoked. If any check fails, the request stops at SatGate.

Is the demo for AI agent cost control or security?

Both. SatGate checks permissions and budget on the same request, so one gateway handles access limits and spending limits, with a receipt for a budget spend, and for a refusal over a budget, a missing payment or a tool permission.

This demo is a simulation with sample data. The recordings at the top of this page show SatGate running on production.