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
Four recordings from production, with narration.
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.
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.
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.
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
90-second walkthrough
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.
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.
Interactive demo
Start with the 90-second walkthrough, then try each part on its own: tokens, access limits, budgets and payments.
1 · Limit access
Limit what an agent can call, hand a narrower token to a sub-agent, then revoke it.
2 · Cap spending
Run the simulation below and watch SatGate refuse an agent once its budget runs out.
3 · Charge external agents
Make an external agent pay before its request goes through. Payment refusals get a signed receipt, and so do most paid requests.
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
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.
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.
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.