Developers

One endpoint. Every model. An OpenAI-compatible API funded with cryptocurrency. Point anything you already use at askr with a base URL and a key. No card, no subscription, no per-model account.

Sixty seconds

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.

curl -fsSL https://heyaskr.ai/install.sh | sh
askr login
askr

The third line is askr 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: askr "what changed in HTTP/3?" Unquoted, your shell claims the ? before askr sees it.

Or straight to the API

export ASKR_KEY="askr_live_..."

curl https://heyaskr.ai/v1/chat/completions \
  -H "Authorization: Bearer $ASKR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.6-sol",
    "messages": [{"role": "user", "content": "hello"}]
  }'

Two settings

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.

Base URL   https://heyaskr.ai/v1
API key    askr_live_…

Cursor

Settings → Models → add an OpenAI key, then set the override base URL.

Continue

In config.json: "provider": "openai", "apiBase": "https://heyaskr.ai/v1".

Aider

--openai-api-base https://heyaskr.ai/v1 --openai-api-key $ASKR_KEY

OpenAI SDK

Pass base_url and api_key. Nothing else changes.

LangChain / LlamaIndex

Any OpenAI chat model class that accepts a base URL.

Your own script

It is HTTP and JSON. curl works.

Endpoints

MethodPathWhat it does
GET/v1Connection check. Returns your balance and the key in use: plain text in a terminal, JSON everywhere else.
GET/v1/modelsEvery model you can call, in the shape the OpenAI SDKs expect.
POST/v1/chat/completionsThe one that does the work. Streaming and non-streaming.

Streaming

Send stream:true for a standard server-sent event stream, the same frames your client already parses.

curl -N https://heyaskr.ai/v1/chat/completions \
  -H "Authorization: Bearer $ASKR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.6-sol","messages":[{"role":"user","content":"hi"}],"stream":true}'

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.

What a call costs

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.

"usage": {
  "prompt_tokens": 12,
  "completion_tokens": 37,
  "total_tokens": 49,
  "completion_tokens_details": { "reasoning_tokens": 0 }
},
"askr": { "credits_charged": 1.5382 }

Reasoning tokens

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.

Nothing succeeds silently

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.

Credit does not expire

It is prepaid access to model usage, spent only when you ask for something. It cannot be withdrawn or converted back.

Keys

Make as many as you like at your wallet. A key is shown once. Only a hash is kept, so it cannot be recovered, only replaced.

Set a daily cap

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 bounds what one key can do, and it is checked before the request runs rather than after.

Revoke instantly

Revoking stops the next request with that key. Its past usage stays on the record so you can still see what it spent.

Treat it like a card number

It spends real money and it is a bearer credential: whoever holds it can use it. Environment variable, not a committed file.

Where we differ from OpenAI

The request and response shapes match. These are the deliberate differences, and there are only four.

DifferenceWhy
askr.credits_charged on every responseAdditive, so clients that do not know about it ignore it. Knowing the cost of a call without a second round trip is most of the point.
402 when the balance is shortIt names how many credits the request needed, so a script can decide whether to top up or back off.
Chat and image modelsA model that answers chat completions with a picture works here, and the picture comes back in message.images. Video runs in the workspace on its own endpoint and is not on this API yet. Audio and embedding ids are refused.
No fine-tuning, files or assistantsNot built. The endpoints above are the whole surface.

Fund once. Ask anything.

Get a key