The whole migration is two lines.
Change the base URL and the key. Model names, streaming, tool calls, and vision work exactly as they do on OpenRouter, because the request is relayed to OpenRouter as you sent it, with one addition: routing is pinned to zero-retention endpoints.
# before, OpenRouter
OPENAI_BASE_URL=https://openrouter.ai/api/v1
OPENAI_API_KEY=sk-or-v1-...
# after, Folio. Same two variables.
OPENAI_BASE_URL=https://folio.example/api/v1
OPENAI_API_KEY=sk-folio-...Try any request in the Playground before you change your base URL.
What you are buying
A fixed amount of API credit in dollars. $100 of credit is $100 of model usage at OpenRouter's listed prices, which are the providers' own prices. You pay in USDG on Robinhood Chain. With no subsidy you pay what the credit costs to buy; with subsidy your price drops, capped at 20% under face.
Am I getting the real model
Yes. Responses carry the provider's own model name and id. Nothing is swapped or downgraded.
Do you store prompts
No. The gateway keeps billing metadata: model, token counts, cost, and timing. Prompts and completions pass through and are not written anywhere. Every request carries provider.zdr = true so it only reaches zero-retention endpoints.
Where the discount comes from
25% of the 2% creator tax on FOLIO trades goes to a discount vault. When that vault has cash, it covers the gap between what you pay and what OpenRouter charges for the credit. When it has none, you pay cost. Your payment buys your credit; none of it is margin.
Holding and staking
FOLIO you hold counts once toward the daily perk, FOLIO you stake counts twice, and requesting an unstake drops it back to once for a 7 day wait.
Why the desk might pause
Every 5 minutes the sum of every balance, yours included, is compared with the OpenRouter account balance. If balances would exceed it, buying and new awards pause and your key answers 402 until a top-up lands. What you already hold can still be spent down to what upstream will serve.
Refunds
Credit is a grant of product access, not cash. If your USDG sits in SaleEscrow for 24 hours without being filled, call refund(quoteId) on the contract yourself and it returns to your wallet.