OpenRouter, from your terminal
One key. Every model.
Reached with ssh.
RouterCafe is a model router with an OpenAI-compatible API, one balance across every provider, and a front end that is a terminal you already know how to open. Pay in SOL. Your private key never leaves your machine.
The shape of it
Four steps, and the fourth is optional
There is no sign-up, because there is nothing to sign up for: the key you connect with is already a Solana account, and that account is the balance.
Connect
An ed25519 key is a Solana account, so the key that authenticates your SSH session names the account the money belongs to. No email, no password, no onboarding.
ssh -A router.cafe
Deposit
The Deposit tab. Type an amount. The server
asks your own agent,
reached through the ssh -A you forwarded, for a
signature on a transfer. Your key never crosses the connection.
The transaction that comes back is checked against what was asked for before it is broadcast: one System transfer, two accounts, the amount you typed.
Mint a key
On the API Keys tab, press n. A
rc_… key is shown once, and only its fingerprint is
kept, so the server's own ledger is not a file of live credentials.
Press y and your terminal is asked to copy it.
Point a client at it
Anything that speaks the OpenAI API works. Swap the base URL and the key, and the model names are RouterCafe's, so they do not change when a provider does.
export OPENAI_BASE_URL=https://api.router.cafe/v1 export OPENAI_API_KEY=rc_a7c4...3f9a
The part that is different
There is no shell. Not hidden, not disabled, not behind a flag.
Every public SSH service eventually grows a command that runs something. This one never does, and the reason is structural rather than a promise: the session is a program, so there is no path from a connection to a process.
ssh router.cafe uptime
refused, exit 1
ssh -s router.cafe sftp
subsystem refused
ssh -L 8080:127.0.0.1:8080 router.cafe
no channel
ssh -D 1080 router.cafe
no channel
ssh -A router.cafe
the session UI
The only four things a connection can reach: the UI, the ledger, the API, and a signature request to the agent you forwarded.
Your key stays yours
A deposit is an ordinary signature request to the ssh-agent your client forwarded. The private key is never sent, and the server never holds one.
The transaction is read back before it is sent
The signed bytes are decoded and checked: one System Program transfer, the fee payer is the account paying, no writable account other than the source and the treasury, and the amount is the amount you typed. Anything else is refused and nothing is broadcast.
Balances are integers
Credit is counted in millionths of a dollar in an int64, and a request reserves the most it could cost before it starts and is refunded the difference afterwards. A balance cannot go negative and there is no rounding rule anywhere near the decision.
The ledger is not a credential file
API keys are stored as SHA-256 digests. A copy of the ledger gives an attacker balances and fingerprints, not keys.
What it routes to
The name you send is the model you get
A request naming a model this router does not have is refused by name. Guessing at the nearest one is how a request meant for one model quietly gets billed as another.
| model | provider | input / 1M | output / 1M |
|---|---|---|---|
| routercafe/free | pooled | free | free |
| gpt-6-luna | openai | $0.10 | $0.50 |
| claude-haiku-5-5 | anthropic | $0.10 | $0.50 |
| gemini-3.8-flash | $0.75 | $3.75 | |
| claude-sonnet-5-5 | anthropic | $2.00 | $10.00 |
| gpt-6.1-sol | openai | $2.00 | $10.00 |
| claude-opus-5-5 | anthropic | $4.00 | $20.00 |
| gemini-3.1-pro-preview | $2.00 | $12.00 | |
| gpt-6-astra | openai | $10.00 | $50.00 |
List prices, in the units OpenRouter publishes, so the two can be compared by eye. Every deposit records the rate it was credited at, so changing the rate never rewrites somebody's history.
Questions people actually ask
Before you connect
Why not just use OpenRouter?
You may well. RouterCafe is the same shape with two differences: you pay in SOL from the terminal, and the front end is a terminal session rather than a dashboard. If you want a web console and a card, they are the better product.
What does a deposit cost?
The Solana network fee, which is a few thousand lamports, taken out of the amount you send. Deposits below roughly 0.00001 SOL are refused rather than spent entirely on the fee, and the TUI says so before you sign anything.
Why does it need ssh -A?
Because that is how it asks your key to sign. Without agent forwarding there is no way for the server to reach a key that is on your machine, and it would have to ask you to hand it over, which is exactly the thing it should not do. The deposit screen tells you this rather than failing silently.
Can I use a wallet instead of an SSH key?
Yes. The browser terminal at /app signs in with a Solana wallet and shows the transaction for you to approve before it is sent, which is the same flow through a different key holder.
What happens to my key if it leaks?
On the API Keys tab press x to revoke
it, then press n to mint another. The balance belongs to
the account rather than to the key, so revoking does not touch your
credit.
Is the rate fixed?
The SOL price is set by whoever runs this instance and recorded on every deposit, so what you were credited at is not something that can change afterwards. It is shown on the deposit screen before you sign.
The terminal is the whole product
Connect, deposit, and take a key. Everything after that is your usual OpenAI client with two environment variables changed.
- deposits to
ALT1SYDQCygmHbXyVsLp9B72pxdXgP7ZtpuLpPXTKCHs- sol price
$200 per SOL- provider