# SatGate: economic firewall for agent workloads > Keep your agents within budget. Make external agents pay before they use your API. Get a signed receipt for every decision. > Three controls: Observe, Control and Admit. All three sign receipts. ## Purpose SatGate sits in front of APIs and MCP tools and checks each agent request before it runs. Your own agents spend from a budget you set. External agents pay before the request goes through, on the routes you choose to charge for. Paying never gets an agent past its permissions, an expired or revoked token, or another tenant's data. Charging for access makes abuse more expensive. It works alongside rate limits and access controls, not instead of them. Observe on its own does not block anything. ## Core controls ### Observe See which agent, route and tool is behind each request, and what it costs, without blocking anything. ### Control Enforce your agents' budgets and permissions before each request runs. Observe shows usage; Control enforces the limits. ### Admit Let external agents in with limited access, and make them pay first on the routes you choose. Payment never overrides permissions. ## Proof across all three controls SatGate signs a receipt for every decision, on HTTP APIs and MCP tools, for your own agents and for external ones. Receipts are exported together as an Evidence Pack. Anyone can check them against SatGate's published keys (JWKS) with the open-source verifier. A receipt shows what SatGate decided. It is not a compliance certificate, and it does not prove answer quality, that a supplier told the truth, anyone's legal identity or that an outside payment settled. ## Agent choice and owner enforcement Agents may choose SatGate because it helps them get work done. The limits stay owner-enforced either way. Make SatGate the only route to the API: block direct access to the origin, keep upstream API keys behind SatGate and restrict outbound traffic so agents cannot go around it. ## Discovery and availability - Start here: https://satgate.io/build - Trust metadata and adapter status: https://satgate.io/.well-known/satgate - Public source: https://github.com/SatGate-io/satgate - Simulated HTTP demo you run locally, with cleanup steps: https://github.com/SatGate-io/satgate/tree/main/demo - Demo in the browser: https://satgate.io/sandbox#golden-path - Start a 14-day free trial of Pro features, no credit card: https://cloud.satgate.io/cloud/signup - Pricing: https://satgate.io/pricing - Optional 90-day design-partner pilot for larger teams that want help: https://satgate.io/design-partners The demo above uses simulated traffic and local test keys. It does not cover trusted issuers, sub-agent budgets, MCP or real payments. For a real paid call, see "Try it as an agent" below. Installing a public SDK does not give you hosted API access; that starts with the 14-day free trial. The issue, pay and verify API is in private beta. Testing a new agent with sub-agents needs a setup and permissions agreed with the owner first; there is no public one-click installer for that. The trust metadata lists which payment adapters are supported and which are planned. AgentCore Payments and Pay.sh are planned. The metadata says what is available; try an adapter yourself before saying it works. ## Handoffs, refusals and retries Pick a task with a set budget. Before starting, give each sub-agent narrower permissions and its own share of the budget. Check that a request outside its permissions and a request past its budget are both refused, and judge that apart from answer quality. If a call times out and you don't know whether it went through, check whether the deployment can look up that same operation before you retry, and check that a retry is not charged twice. An unknown result is unknown, not a failed call. Judge separately: did the task get done, was abuse stopped, would agents choose it on their own, and will people pay for it. ## Developer details Fiat402 is internal budget control, not a payment or settlement rail. No Lightning payment is involved: SatGate subtracts from the agent's budget and no money moves. Paid routes that charge external agents take L402 (Lightning), x402 (USDC on Base), or both. These are ways to pay, not a fourth control. ### Lightning (L402) flow on a paid route that takes Lightning 1. Agent requests the paid route with `X-SatGate-Tenant: ` on api.satgate.io. 2. SatGate returns `402 Payment Required` with the L402 challenge, plus JSON `tenant`, `tenant_selector_header`, `status_url`, `terms` (including `terms.status`), and `Link: ; rel="payment-status"`. `X-SatGate-Spend-Mode: paid_rail` means this is a Lightning quote, not an empty budget. 3. The owner pays the invoice from any wallet. If the wallet shows the preimage, the agent retries with `Authorization: L402 :`. 4. If the wallet hides the preimage, the agent polls `GET ` with `Authorization: L402 ` (macaroon only, no preimage; wait at least 10 seconds) until `status` is `paid`, then retries the original route with the returned `authorization` value. POST with JSON `{"macaroon":""}` is also accepted. A 401 includes `WWW-Authenticate: L402 realm="payment-status"` and a hint to send that header. It does not echo caller input. 5. SatGate verifies that proof through the normal L402 path before forwarding. The status endpoint does not grant access. A bad, cross-tenant, or wrong-route macaroon reveals nothing. ### USDC (x402) on a paid route A route owner can accept USDC on Base next to Lightning, or USDC only. When a route takes USDC, its 402 carries a `PAYMENT-REQUIRED` header and an `accepts` list in the body (x402 version 2, scheme `exact`). Each entry gives the network, the amount in USDC base units (1 USDC = 1000000), the USDC contract, and the owner's receiving address. 1. Sign an EIP-3009 `transferWithAuthorization` for that exact amount, to that address, from a wallet that holds USDC on that network. 2. Retry the same request with the signed payload in the `PAYMENT-SIGNATURE` header. 3. SatGate settles the payment, checks the transfer on-chain, and forwards the request. The `PAYMENT-RESPONSE` header carries the transaction hash. One USDC payment buys one request. A signed payment is accepted once; sending it again returns 402. A USDC-only route's 402 has no Lightning invoice and no L402 challenge, so pay it with USDC. The receipt records the rail as x402 with the network, amount and transaction. The public demo route below takes both. ### Try it as an agent A public paid route is open. The agent does not need an account. - URL: GET https://mcp-prod-final.satgate.cloud/paid/premium - Price: 10 sats over Lightning, or 0.01 USDC on Base (x402) - `terms.buys.uses` is 1 (and `terms.x402.buys.uses` is 1): each payment buys one request. 1. Call the route. Read the 402 and the terms in the body. 2. To pay with Lightning: show the invoice to the owner and ask them to pay it from any Lightning wallet, such as Cash App. Poll payment status using the rules in "Lightning (L402) flow on a paid route that takes Lightning" above. Send `Authorization: L402 ` only, without a preimage, and wait at least `terms.status.poll_min_interval_secs` between polls. When status is paid, retry the original request with `Authorization` set to the returned value. 3. To pay with USDC: follow "USDC (x402) on a paid route" above, using the `accepts` entry in the same 402. 4. A paid call returns 200 and a signed receipt. This route is Admit. In the dashboard, Admit is the Charge policy. ## Free Tools and Calculators - AI Agent Cost Control Tools Hub: https://satgate.io/tools - Runaway Agent Cost Calculator: https://satgate.io/runaway-agent-cost-calculator - AI Agent Runaway Spend Benchmark: https://satgate.io/ai-agent-runaway-spend-benchmark - Runaway Spend Index JSON Data: https://satgate.io/data/ai-agent-runaway-spend-index-2026-04.json - Runaway Spend Index CSV Data: https://satgate.io/data/ai-agent-runaway-spend-index-2026-04.csv - Benchmark JSON Data: https://satgate.io/data/ai-agent-runaway-spend-benchmark.json - Benchmark CSV Data: https://satgate.io/data/ai-agent-runaway-spend-benchmark.csv - MCP connect snippet: https://satgate.io/mcp-proxy-config-generator - MCP signed receipt (Evidence Pack) sample: https://satgate.io/policy-templates/mcp-governance/mcp-evidence-pack.sample.v1.json - MCP Spend Caps Template: https://satgate.io/policy-templates/mcp-governance/spend-caps.v1.yaml - MCP Tool Allowlist Template: https://satgate.io/policy-templates/mcp-governance/tool-allowlist.v1.yaml - MCP Tenant Isolation Template: https://satgate.io/policy-templates/mcp-governance/tenant-isolation.v1.yaml - MCP Delegation Depth Template: https://satgate.io/policy-templates/mcp-governance/delegation-depth.v1.yaml - Economic Firewall Readiness Grader: https://satgate.io/economic-firewall-readiness-grader ## Category Pages - Economic Firewall: https://satgate.io/economic-firewall - AI Agent Cost Control: https://satgate.io/ai-agent-cost-control - LLM Cost Dashboard: https://satgate.io/llm-cost-dashboard - Agent Spending Limits: https://satgate.io/agent-spending-limits - MCP quickstart (Cursor, Claude Code, Claude Desktop, OpenClaw): https://satgate.io/mcp - Agent Control Plane: https://satgate.io/agent-control-plane - Signed receipt (Evidence Pack) demo: https://satgate.io/evidence-pack-demo - Signed receipt (Evidence Pack) JSON v1: https://satgate.io/evidence-packs/sample-evidence-pack.v1.json - Signed receipt (Evidence Pack) schema v1: https://satgate.io/evidence-packs/evidence-pack.schema.v1.json - Capability Auth: https://satgate.io/capability-auth - Agent Capability Tokens: https://satgate.io/agent-capability-tokens - Capability Lifecycle Demo: https://satgate.io/capability-lifecycle-demo ## Comparison Pages - SatGate vs LiteLLM: https://satgate.io/compare/litellm - SatGate vs Portkey: https://satgate.io/compare/portkey - SatGate vs Helicone: https://satgate.io/compare/helicone - SatGate vs Cloudflare AI Gateway: https://satgate.io/compare/cloudflare-ai-gateway - SatGate vs Kong AI Gateway: https://satgate.io/compare/kong-ai-gateway - SatGate vs Apigee: https://satgate.io/compare/apigee - SatGate vs Tyk: https://satgate.io/compare/tyk - SatGate vs Langfuse: https://satgate.io/compare/langfuse - SatGate vs Bifrost: https://satgate.io/compare/bifrost - SatGate vs Zuplo: https://satgate.io/compare/zuplo - SatGate vs Cloud-Native API Gateways: https://satgate.io/compare/cloud-native ## High-Intent Guides - What Is an Economic Firewall?: https://satgate.io/blog/what-is-an-economic-firewall - AI Agent API Cost Control: https://satgate.io/blog/ai-agent-api-cost-control - OpenAI API Budget Limits: https://satgate.io/blog/how-to-add-budget-limits-to-openai-api-calls - MCP Budget Enforcement Guide: https://satgate.io/blog/mcp-budget-enforcement-guide - Hard-Cap MCP Tool Spend: https://satgate.io/blog/hard-capping-mcp-tool-spend - API Gateway for AI Agents: https://satgate.io/blog/api-gateway-for-ai-agents - API Monetization for AI Agents: https://satgate.io/blog/api-monetization-ai - LLM Cost Management: https://satgate.io/blog/llm-cost-management - LLM cost dashboard checklist: https://satgate.io/llm-cost-dashboard - Macaroon Tokens vs API Keys: https://satgate.io/blog/macaroon-tokens-vs-api-keys - Zero Trust for AI Agents: https://satgate.io/blog/zero-trust-for-ai-agents - Intelligent AI Delegation and Capability Tokens: https://satgate.io/blog/deepmind-intelligent-delegation-satgate - Agent Swarm Cost Control: https://satgate.io/blog/agent-swarms-cost-governance - L402 Protocol Explained: https://satgate.io/blog/l402-protocol-explained - HTTP 402 Use Cases: https://satgate.io/blog/http-402-payment-required-use-cases - Why Routing Is Not Governance: https://satgate.io/blog/why-routing-isnt-governance - Why Economic Firewalls Enable Autonomous Agents: https://satgate.io/blog/why-economic-firewalls-are-the-prerequisite-for-autonomous-ai-agents - AI Agent Spending Limits: https://satgate.io/blog/ai-agent-spending-limits - MCP Gateway Guide: https://satgate.io/blog/mcp-gateway-guide - Beyond Connection: Spending Controls in MCP: https://satgate.io/blog/beyond-connection-economic-governance-mcp ## Architecture ``` Agent / App / MCP Client → CDN/WAF → SatGate gateway → API / MCP Server / Model Provider ``` SatGate runs as a gateway, a sidecar or an MCP proxy. It adds budgets, permissions and payments in front of the APIs and tools you already have, so you don't have to rewrite them. ## Development references - Gateway quickstart: https://github.com/SatGate-io/satgate/blob/main/docs/getting-started/quickstart.md - SDK and beta API documentation: https://github.com/SatGate-io/satgate/blob/main/docs/index.md - Capability schema: https://github.com/SatGate-io/satgate/blob/main/docs/reference/capability-schema.md - Receipt schema: https://github.com/SatGate-io/satgate/blob/main/docs/reference/receipt-schema.md Check the prerequisites and whether you have access before running an example. An example command is not the owner's permission to install software, call a supplier or spend money. ## Product and Demo Pages - Enterprise AI Agent Governance: https://satgate.io/govern - SatGate Demo: https://satgate.io/sandbox - SatGate Mint / Capability Token Demo: https://satgate.io/mint-demo - SatGate Design Partners: https://satgate.io/design-partners - Pricing: https://satgate.io/pricing - Security: https://satgate.io/security ## Links - Website: https://satgate.io - Blog: https://satgate.io/blog - Tools: https://satgate.io/tools - Pricing: https://satgate.io/pricing - Security: https://satgate.io/security - Documentation: https://cloud.satgate.io/docs - Cloud signup: https://cloud.satgate.io/cloud/signup - Cloud login: https://cloud.satgate.io/cloud/login - GitHub: https://github.com/SatGate-io/satgate - Python SDK: https://pypi.org/project/satgate/ - Node.js SDK: https://www.npmjs.com/package/@satgate/sdk ## Plans - Starter: free. Observe (usage tracking) up to a fair-use cap, 3 routes, default protection, community support. - Pro: $99/month. 14-day free trial of Pro features, no credit card; the account is created when you confirm your email. Unlimited Observe, 1M Control and Admit requests per month, 25 routes, unlimited team members, all three controls (the dashboard calls Admit "Charge"), budgets, token management, priority support. Upgrade yourself by card in the dashboard (Stripe). - Enterprise: custom pricing, no usage limits. You run the same SatGate software that powers SatGate Cloud on your own servers, with your own database. It does not take policy from SatGate Cloud. SCIM, signed configs in Git, WORM audit export, dedicated support + SLA. Contact: contact@satgate.io. - A free 90-day design-partner pilot is available for larger teams that want hands-on help. You don't need it to get started. ## Contact - Email: contact@satgate.io