Bring a wallet. Get an answer.
A paid LLM router with no signup. Your funds stay in your own wallet; each request is authorized by your wallet and billed for the tokens actually used.
Direct-wallet mode: no router account, email, API key, prepaid balance or subscription. An x402-aware client pays as it calls. The separate fixed-price Circle Gateway mode requires Gateway balance.
How it works
Four steps, no registration anywhere in them. Discovery is free; only a completed answer is billed, once.
1 · Discover
GET /v1/models returns the priced models, the tariffs, and the request limits. Free, no payment header.
2 · Ask
The router prepares your answer privately and measures its actual input and output tokens. Your agent receives an exact x402 invoice, not an estimated token bill.
3 · Pay the invoice
Your wallet checks the exact invoice against its budget, signs that amount, and repeats the same HTTP request or MCP call with the payment.
4 · Get the answer
Your wallet pays that exact invoice within its spending limit. The prepared answer and payment receipt are then released, with one settlement per answer.
Endpoints
OpenAPI 3.1 · Agent API docs and examples
Circle Gateway: fixed 0.010000 USDC
POST /v1/gateway/chat/completions. Choose either listed model; requested output limit 128 tokens. Real multi-network x402 through Circle Gateway. This optional mode requires funded Gateway balance on an accepted network. Request and payment example.
Served from this origin. Free endpoints never need a wallet; the paid endpoint uses the same settlement core as the MCP tool, so it is one charge, never two.
POST /v1/chat/completions
/v1/chat/completions
OpenAI-style request body, text only: model, messages (roles system, user, assistant), optional max_tokens; buffered JSON, not live streaming. No tools, no images, no n, no other OpenAI options. An unsigned call prepares the answer privately and returns its actual-token x402 invoice (HTTP 402). Your wallet is not charged until payment; the provider bears the unpaid generation work.
POST /mcp
/mcp
Native paid MCP (streamable HTTP, stateless, JSON responses, POST only). Tools: list_models (free), quote (free), chat (paid). Payment travels inside the tool call as params._meta["x402/payment"]; registering this server costs nothing and pays nothing.
GET /v1/models
/v1/models
The available models with their payment requirements, tariffs and limits. GET /healthz returns the service status and network. Both are free.
Base URL
This service origin
/
Use the same origin for the paid and free paths. The public host is reachable over HTTPS only.
Models & direct-wallet pricing
The following token tariff applies to direct-wallet HTTP/MCP. The separate Gateway endpoint costs a fixed 0.010000 USDC.
Loaded live from GET /v1/models on this origin. Nothing on this page is a hard-coded model list or an invented number: if the endpoint is unreachable, the page says so.
The tariff, in plain English
Client budget vs. actual charge
The client budget is not the charge. The answer is prepared first, its actual token cost is calculated, and your wallet signs only that exact invoice amount. A bill above the budget is refused, not charged.
When you are not billed
If the upstream fails, the answer is empty or malformed, or the request is rejected before settlement, there is no settlement and no charge. A repeated request with the same private recovery key returns the already-paid answer with a charge of zero instead of a second settlement.
What your wallet needs
Payment comes from your wallet, not from a router balance. There is nothing to top up inside this service.
USDC on Base
A Base mainnet USDC balance in the wallet you call with (eip155:8453, USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913). No Gateway deposit, no router credit, no prepaid balance.
One x402 authorization per request
Your client signs a single x402 v2 exact USDC authorization after receiving the invoice. This EIP-3009 path needs no token allowance, router deposit or Gateway top-up.
An x402-aware client
Use a client with x402 v2 exact EIP-3009 support on Base, or an MCP wallet bridge. The invoice amount is calculated from actual usage before signing; exact payment does not mean a flat per-call price.
Keep the recovery key private
Pass a private random UUIDv4 as request_id (MCP) or Idempotency-Key (HTTP) to retry for free and recover the same answer. On-chain payment signatures are public calldata, so that key — not the signature — proves the recovery. It is a per-request capability, not an account or a router API key, and it is never shown on this page.
chat tool call, when your wallet signs for it.Setup
Choose HTTP or MCP. Model and price discovery are free; chat uses x402 payment.
1 · Read the models and prices (free)
curl -sS https://x402-direct.46-225-27-102.sslip.io/v1/models
The response carries the priced models with their payment requirements and limits, plus the tariff when the catalog publishes one.
2 · Call the paid endpoint
curl -sS https://x402-direct.46-225-27-102.sslip.io/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: <private-random-uuidv4>' \
-H 'PAYMENT-SIGNATURE: <x402-payment-payload>' \
-d '{"model":"<model-id-from-/v1/models>","messages":[{"role":"user","content":"Say hello."}],"max_tokens":64}'
Run it once with no PAYMENT-SIGNATURE header: the 402 response is free and contains the exact x402 requirement to sign. Your client then fills the header and repeats the call. The answer arrives with the model's usage counts and a payment receipt.
3 · Point an MCP client at the paid tools
{
"mcpServers": {
"llm-wallet-router": {
"type": "http",
"url": "https://x402-direct.46-225-27-102.sslip.io/mcp"
}
}
}
A plain MCP client can discover and quote for free, but paying needs payment handling on the wallet side. The sample is a real endpoint; the paid chat tool is the only thing that can be charged.
Request flow in one line
model request → answer prepared privately → actual-token invoice → exact wallet payment → answer + receipt
Live payment proof
Actual model answers, token counts and Base payment receipts from /proof.json.
/proof.json…