The fastest route is the terminal client. It remembers your key and your model, so you choose once and then simply type. Needs Node 18 or newer.
The third line is kytro on its own, which opens a conversation and keeps it. /models to browse, /model <id> to switch without losing the thread, /exit to leave.
To ask one thing and exit, quote it: kytro "what changed in HTTP/3?" Unquoted, your shell claims the ? before Kytro sees it.
Anything that speaks the OpenAI API works, because the shape is the same one it already sends. There is nothing to install and no integration to wait for.
Settings → Models → add an OpenAI key, then set the override base URL.
In config.json: "provider": "openai", "apiBase": "https://kytro.xyz/v1".
--openai-api-base https://kytro.xyz/v1 --openai-api-key $KYTRO_KEY
Pass base_url and api_key. Nothing else changes.
Any OpenAI chat model class that accepts a base URL.
It is HTTP and JSON. curl works.
| Method | Path | What it does |
|---|---|---|
| GET | /v1 | Connection check. Returns your balance and the key in use: plain text in a terminal, JSON everywhere else. |
| GET | /v1/models | Every model you can call, in the shape the OpenAI SDKs expect. |
| POST | /v1/chat/completions | The one that does the work. Streaming and non-streaming. |
Send stream:true for a standard server-sent event stream, the same frames your client already parses.
Stop reading mid-answer and the upstream call is cancelled immediately. You are charged for what was generated up to that point and nothing after it.
A dollar buys 1,000 credits. Each request is priced from what it actually cost upstream, plus our margin, and the figure comes back with the response, so a script never has to guess or make a second call to find out.
On a thinking model, most of a short reply can be reasoning you never see. It is billed like any other output token, so reasoning_tokens is reported separately. Check it before pointing a loop at one.
A request that returns no content is an error, not an empty answer, and it is not charged. A failure before the model runs releases the reservation untouched.
It is prepaid access to model usage, spent only when you ask for something. It cannot be withdrawn or converted back.
Make as many as you like from your account. A key is shown once. Only a hash is kept, so it cannot be recovered, only replaced.
A script in a retry loop can spend a balance in minutes in a way nobody typing into a chat box ever will. A cap is checked before the request runs rather than after.
Revoking stops the next request with that key. Its past usage stays on the record so you can still see what it did.