gvnr enforces budgets and rate limits in real time — before the call, not after the invoice.
One MCP endpoint, settled in USDC on Base. Compose budget_clear → rate_check → idempotency_check → call LLM → reconcile before every provider request, or hand off to request_approval when an agent needs a human.
budget_clear deducts before the call.approval_id + a mobile-friendly URL the human taps to approve or deny. Email today; Telegram + SMS forward-compat.Every tool draws from one operation quota. Same auth, same endpoint, no extra infra. Any tool can be added or removed without re-integrating.
Pick a recipe. Each one is independent — you can layer them as your agent grows.
curl -X POST https://gvnr.dev/v1/account
# → { "api_key": "bg_...", "account_id": "..." }
Then open the pay page in your browser (replace the key):
# Set the envelope (once)
curl -X PUT https://gvnr.dev/v1/budget/envelope \
-H "Authorization: Bearer bg_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"agent_id":"my-agent","limit_usd":5,"window":"daily"}'
# Before each LLM call
curl -X POST https://gvnr.dev/v1/budget/clear \
-H "Authorization: Bearer bg_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"agent_id":"my-agent","model":"claude-sonnet-4-6","estimated_tokens":2000}'
# After the LLM responds
curl -X POST https://gvnr.dev/v1/budget/reconcile \
-H "Authorization: Bearer bg_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"agent_id":"my-agent","actual_input_tokens":1800,"actual_output_tokens":2400}'
# Set the rate envelope (once)
curl -X PUT https://gvnr.dev/v1/rate/envelope \
-H "Authorization: Bearer bg_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"agent_id":"my-agent","provider":"anthropic","model":"claude-sonnet-4-6","requests_per_minute":30}'
# Before each LLM call
curl -X POST https://gvnr.dev/v1/rate/check \
-H "Authorization: Bearer bg_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"agent_id":"my-agent","provider":"anthropic","model":"claude-sonnet-4-6"}'
is_first_call=true the first time, false on replays.curl -X POST https://gvnr.dev/v1/idempotency/check \
-H "Authorization: Bearer bg_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"key":"job-abc-123","ttl_seconds":3600}'
# Set your notification email (once)
curl -X POST https://gvnr.dev/v1/account/notification-email \
-H "Authorization: Bearer bg_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com"}'
# Request approval (returns approval_url)
curl -X POST https://gvnr.dev/v1/approval/request \
-H "Authorization: Bearer bg_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"agent_id":"my-agent","action_summary":"Spend $42 on Opus extraction over 30 docs","ttl_seconds":600}'
# Poll for the decision
curl https://gvnr.dev/v1/approval/check/APPROVAL_ID \
-H "Authorization: Bearer bg_YOUR_KEY"
# → { "decision": "pending" | "approved" | "denied" | "timeout", ... }
claude-opus-4-8 $5.00 / $25.00 per M tokens (in / out) claude-opus-4-7 $5.00 / $25.00 claude-opus-4-6 $5.00 / $25.00 claude-sonnet-4-6 $3.00 / $15.00 claude-haiku-4-5 $1.00 / $5.00 gpt-4o-mini $0.15 / $0.60 gpt-4o $2.50 / $10.00 gpt-4-turbo $10.00 / $30.00 text-embedding-3-small $0.02 / M (input-only) text-embedding-3-large $0.13 / M (input-only) gemini-embedding-001 $0.15 / M (input-only) gemini-embedding-2 $0.20 / M (input-only)
These are provider list rates — they set your per-agent spend cap (the envelope), not gvnr's charge. gvnr bills a flat governance fee per operation (see the packs above); your LLM tokens are billed by your provider directly. budget_clear estimates the cap debit (output tokens for chat models, input tokens for embedding/input-only models); reconcile trues it to actual. Unlisted models fall back to the highest rate (fail-safe). Updated May 2026.
Pick an amount (or name your own on the pay page). Ops cover governance operations (budget_clear, rate_check, idempotency_check…); your LLM tokens are billed by your provider, not by gvnr. Credited after on-chain settlement.