Guide · Oct 17, 2026 · 15 min read
Your agent is stuck. Call a specialist.
What Inferiq is, how it works, and how to start using it: a complete guide, from the problem it solves to your first request and receipt.
The problem
If you code with an AI agent every day, you know this loop.
Your agent hits an error. It patches something. The error changes shape. It patches again. Twenty minutes later you’re on attempt seven, the context window is full of failed fixes, and you still don’t know what broke.
Behind that loop is a second, quieter problem: the plumbing.
- Many keys, many accounts. Each provider has its own key, its own billing page and its own error format.
- No backup. When a provider is rate-limited or down, your tool just stops, in the middle of a session.
- No idea what anything cost. A monthly invoice tells you the total, not which request, tool or model spent it.
Inferiq is built to fix both: the plumbing first, then the loop.
What Inferiq is
Inferiq is a gateway for coding agents. You get one key that reaches every coding model we serve, through one standard endpoint. On top of the gateway sit fix agents: specialists you hand a stuck error to, which return the cause and a patch.
1. One key, one endpoint, a model hosted for you
One OpenAI-compatible endpoint, with streaming and tool calls, backed by Qwen3.8-27B on Inferiq’s own GPUs. Point Cline, OpenCode, Cursor or any OpenAI SDK at it and it works. If an attempt fails, it’s retried before your tool notices.
2. Fix agents
When your own agent keeps circling a bug, send the error to a specialist. It reads the log and the files involved and returns three things: the cause, a patch, and a way to check that the patch works. It never runs commands on your machine. It hands you a patch, and you decide.
3. Pay per call, with a receipt for every call
One balance in US dollars. Every request and every fix is paid from it. No subscription, no monthly minimum, no card on file. Fixes are quoted before they run, with a maximum they can’t go over. Every charge, including every refused or failed request, gets a receipt.
No email, no password
You sign in with your crypto wallet. Your wallet address is your account.What’s live today, and what’s coming
We’d rather be precise than impressive. The hosted gateway is in early access, and this is where things stand.
| Feature | Status |
|---|---|
OpenAI-compatible /v1/chat/completions, streaming and tool calls | Live |
Aliases inferiq/fast, inferiq/balanced, inferiq/best: one model, three reasoning levels | Live |
| Free API keys, each limited to the models you pick, with an optional daily limit | Live |
| A receipt for every request, readable over the API | Live |
| Wallet sign-in (Sign-In with Ethereum, Rabby recommended) | Live |
| Balance credited for you during early access | Live |
| Quick Fix and Build Doctor, with quotes and holds | Live |
| Anthropic-format endpoint, so Claude Code can connect | Live |
| Deposits: ETH or USDG on Robinhood Chain, or ETH or USDC on Base, on mainnet | Live |
| MCP server: ask for a fix from inside Claude Code or Cursor | Live |
| More fix agents, npx inferiq fix | PlannedPhase 5 |
The roadmap has every phase and its exit criteria.
How it works
The life of a request
Every request takes the same path through the gateway. Once you know the path, you know what Inferiq checks, where a request can fail, and what you pay for.
Your tool sends a request
A standard OpenAI-format chat request, with your Inferiq key in the Authorization header.
The key is checked
It’s hashed and looked up. Revoked keys are refused, and the key’s per-minute rate limit is applied.
The request is validated
It needs a model, at least one message and well-formed tool calls.
Models are picked
The model has to be one this key may use. An exact model is used as named; an alias expands into its models, in order. Models that can’t handle this request are skipped.
Money is checked
Your balance has to cover the request’s worst-case cost, and the key’s daily limit needs room.
The model is called
If it’s rate-limited, times out, is overloaded or down, the next model in the list is tried before anything reaches you.
You’re charged and a receipt is written
The tokens actually used are priced, your balance is debited and the receipt saved, in one database transaction.
You get your answer
A normal chat completion or stream. The headers name the model that answered and carry the receipt ID.
Refused requests cost nothing
Steps 2 to 5 happen inside Inferiq, before any model is called. A request refused there costs $0 and still gets a receipt.Aliases: pick how hard the model thinks
Every alias runs on Qwen3.8-27B. The alias sets how much it reasons before answering. You can also name the model, qwen/qwen3.8-27b, and set reasoning_effort yourself.
| You send | What answers | Use it for |
|---|---|---|
inferiq/fast | Qwen3.8-27B, light reasoning | Planning turns, small edits, cheap background work |
inferiq/balanced | Qwen3.8-27B, medium reasoning | Everyday coding. The default. |
inferiq/best | Qwen3.8-27B, full reasoning | Hard bugs, large refactors |
Deeper reasoning writes more tokens, so inferiq/best costs more per request than inferiq/fast. The model sleeps when nobody is using it: the first request after a quiet spell can take a few minutes while it wakes up.
Retry rules
- Retries
- Rate limits, timeouts, overload and outages are retried once.
- Stops
- A request the model rejects as invalid isn’t retried; you get the model’s message.
- Bounded
- At most three attempts per request. Every attempt is on the receipt, and only the one that answered is charged.
- Never mid-stream
- Once tokens have reached you, a failure ends the stream with an error instead of starting over.
Receipts
Every request writes one receipt. It shows:
- the model you asked for, and the model that answered
- every attempt, in order, with its result and duration
- tokens in and tokens out
- the cost, to the millionth of a dollar
- your balance before and after
- how long was spent inside Inferiq versus waiting on the model
- which key made the call
Receipts never contain your prompt or the model’s answer.
What gets stored, and what doesn’t
| Data | Stored |
|---|---|
| Receipts | Always. Models, tokens, cost, balance, timing and key. No prompt or answer text. |
| Your prompts and answers | Never. They pass through to the model provider and back. |
| Your Inferiq API keys | A hash only. The full key is shown once, when you create it. |
| Logs | Metadata only. Never request bodies, keys or headers. |
Limits, balances and retries are enforced in plain gateway code, before and after every model call. Inferiq never relies on asking a model to behave. The full technical path is in How it works.
How fix agents work
Fix agents are for the moment your own agent gives up, or should have.
- Quick Fix
- One error and its stack trace, plus the files it points at. Returns the cause and a small patch.
- Build Doctor
- Install, build and deploy failures: npm, pnpm, Next.js, Vite, Docker, Vercel. Checks package.json and the versions actually installed before it patches anything.
Every run follows the same four steps:
Quote
You describe the problem in your own words and send the error and the files. You get back an estimate and a hard maximum. Quotes are free.
Hold
When you approve the quote, the maximum is held from your balance.
Run
The agent finds the cause, writes a patch and checks that every part of it matches the files you sent.
Charge
You pay what the run actually cost, never more than the maximum. The rest of the hold goes back to your balance.
What to send
A fix is only as good as what the agent can read. Say in a few sentences what’s going wrong (what you were doing, what you expected, what you already tried), paste the error exactly as it was printed, and attach the files it points at. The agent reads your description first, so it fixes the problem you actually have.
Quick Fix. Describe it like: “The orders page crashes for new accounts right after login. Accounts with orders are fine. It started after I moved the fetch into a useOrders hook. I tried a ?. on orders, but then the page stays blank.” Then paste the error message and its full stack trace, copied from your terminal or the browser console.
TypeError: Cannot read properties of undefined (reading 'map')
at OrderList (src/components/order-list.tsx:14:22)
at renderWithHooks (react-dom.development.js:16305:18)- The files in the stack trace: Like src/components/order-list.tsx. The agent reads the lines the error points at.
- Files those import, if the bug may be there: Types, hooks or helpers the failing code relies on.
Build Doctor. Describe it like: “npm run build fails on Vercel since I upgraded Next.js from 15 to 16. It still builds on my laptop. I already deleted node_modules and the lockfile and reinstalled.” Then paste the whole output of the command that failed: npm install, npm run build, docker build, or your host’s build log.
> next build
./app/(shop)/cart/page.tsx:3:10
Type error: Module '"next/navigation"' has no exported member 'useRouterState'.
Error: Command "npm run build" exited with 1- package.json: Always. It says which versions you asked for.
- Your lockfile: package-lock.json, pnpm-lock.yaml, yarn.lock or bun.lock. Only the installed versions are read from it.
- The file named in the error: Like app/(shop)/cart/page.tsx.
- The config involved: next.config.js, vite.config.ts, tsconfig.json, Dockerfile or vercel.json, when the error mentions it.
Which files work
Any text file: source code (.ts, .tsx, .js, .jsx, .mjs, .py, .go, .rs, .java, .php, .rb, .vue, .svelte…), config (.json, .yaml, .toml) and Dockerfiles. Leave out .env and key files (they’re refused), node_modules, build output like dist/ or .next/, and images or other binary files. Up to 10 files at 200 KB each; lockfiles up to 1.5 MB.Each run picks one of three tiers:
| Tier | Model | Good for |
|---|---|---|
| Economy | Qwen3.8-27B · light reasoning | Clear, common errors. Cheapest. |
| Balanced | Qwen3.8-27B · medium reasoning | The default. Most bugs land here. |
| Strongest | Qwen3.8-27B · full reasoning | Tangled bugs across many files. |
What a fix costs, by tier. Your quote gives the exact estimate and maximum before anything runs.
| Tier | Quick Fix | Build Doctor |
|---|---|---|
| Economy | $0.02–$0.035 | $0.065–$0.15 |
| Balanced | $0.035–$0.10 | $0.15–$0.45 |
| Strongest | $0.10–$0.28 | $0.36–$1.50 |
Open Fix in the console, or call /v1/fix/quote from your own scripts. A failed run costs nothing. Common secrets in your logs and files are replaced with [redacted] before anything is sent, and .env files are left out. Type Fixer, Dependency Doctor and Test Fixer come next, and each has to clear the same patch-quality bar. The API calls and every result field are in Fix agents.
Guide: from zero to your first request
Sign in with your wallet
Open the console and connect an EVM wallet. Rabby is recommended, and any browser wallet that supports EIP-6963 (MetaMask and others) works too. Your wallet asks you to sign a short message. Before you sign, check that the domain in it matches the site you’re on.
- Signing is free and happens off-chain.
- It doesn’t send a transaction, approve tokens or move funds.
- Inferiq will never ask for your seed phrase or private key.
Add balance
Every request is paid from your balance, kept in US dollars. During early access, Inferiq credits it for you. You can also deposit ETH or USDG on Robinhood Chain, or ETH or USDC on Base from the wallet you signed in with. USDG and USDC count 1:1; ETH is converted at the US dollar rate when the deposit is credited. A 3% deposit fee is kept from each deposit.
Create an API key
Go to API keys → Create key. Keys are free, so make one per tool or machine. Pick the models it may use (an alias like
inferiq/balanced, exact model IDs, or all models), and optionally a daily spending limit. Copy the key: it starts withiq_and is shown only once..env# .env: server side or your shell, never in browser code INFERIQ_BASE_URL=https://api.inferiq.run/v1 INFERIQ_API_KEY=iq_••••••••Check the key
List the models your key may use. It’s the quickest check that the key and the base URL work.
terminalcurl https://api.inferiq.run/v1/models \ -H "Authorization: Bearer iq_…"Send your first request
terminalcurl $INFERIQ_BASE_URL/chat/completions \ -H "Authorization: Bearer $INFERIQ_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "inferiq/balanced", "messages": [{"role": "user", "content": "Why does Array.prototype.map return undefined items?"}], "max_tokens": 400 }'The response headers tell you which model answered and where the receipt is:
response headersHTTP/1.1 200 OK content-type: application/json x-inferiq-request-id: req_QXt5TzjNYPURUd0 x-inferiq-receipt-id: rcpt_QXt5TzjNYPURUd0 x-inferiq-model: qwen/qwen3.8-27bBecause Inferiq speaks the OpenAI format, the official SDKs work as they are:
index.tsimport OpenAI from "openai"; // Inferiq speaks the OpenAI chat format, so the official SDK works as-is. const client = new OpenAI({ baseURL: process.env.INFERIQ_BASE_URL, apiKey: process.env.INFERIQ_API_KEY, }); const res = await client.chat.completions.create({ model: "inferiq/balanced", messages: [{ role: "user", content: "Refactor this function to async/await." }], });Look up the receipt
terminalcurl $INFERIQ_BASE_URL/receipts/rcpt_QXt5TzjNYPURUd0 \ -H "Authorization: Bearer $INFERIQ_API_KEY"You’ll see the tokens, the cost and your balance before and after. The same receipts are listed in the console under Receipts.
Connect your coding tool
Cline
Cline talks to any OpenAI-compatible endpoint, so it works with Inferiq as-is.
- Open Cline’s settings and set API Provider to “OpenAI Compatible”.
- Paste the base URL and your Inferiq key.
- Set Model ID to an alias such as inferiq/balanced, or an exact model id from Models.
Base URL https://api.inferiq.run/v1
API Key iq_…
Model ID inferiq/balancedOpenCode
Add Inferiq as a custom OpenAI-compatible provider in opencode.json.
- Put your key in an environment variable: export INFERIQ_API_KEY=iq_…
- Add the provider block below to opencode.json in your project (or ~/.config/opencode/).
- Pick the model with /models inside OpenCode.
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"inferiq": {
"npm": "@ai-sdk/openai-compatible",
"name": "Inferiq",
"options": {
"baseURL": "https://api.inferiq.run/v1",
"apiKey": "{env:INFERIQ_API_KEY}"
},
"models": {
"inferiq/fast": { "name": "Inferiq fast" },
"inferiq/balanced": { "name": "Inferiq balanced" },
"inferiq/best": { "name": "Inferiq best" }
}
}
},
"model": "inferiq/inferiq/balanced"
}Cursor
Cursor can send chat to a custom OpenAI base URL.
- Open Cursor Settings → Models.
- Under OpenAI API Key, paste your Inferiq key and turn on “Override OpenAI Base URL”.
- Set the base URL below, then add inferiq/balanced as a custom model and select it in chat.
OpenAI API Key iq_…
Override OpenAI Base URL https://api.inferiq.run/v1
Custom model inferiq/balancedClaude Code
Claude Code speaks the Anthropic Messages format, which Inferiq serves at /v1/messages. Requests are answered by Qwen3.8-27B through the same aliases, limits and receipts.
- Set ANTHROPIC_BASE_URL to Inferiq (without /v1; Claude Code adds the path).
- Set ANTHROPIC_AUTH_TOKEN to your Inferiq key.
- Pick the alias with ANTHROPIC_MODEL, and the one for quick background tasks with ANTHROPIC_SMALL_FAST_MODEL.
export ANTHROPIC_BASE_URL="https://api.inferiq.run"
export ANTHROPIC_AUTH_TOKEN="iq_…"
export ANTHROPIC_MODEL="inferiq/balanced"
export ANTHROPIC_SMALL_FAST_MODEL="inferiq/fast"The console’s Connect page has the same setup with your base URL filled in. More tools are in Connect your tool.
Set your limits and rules in the console
The console is built so you never need the API docs to manage your account.
- Home
- Your balance, today’s spend and recent activity.
- Fix
- Hand an error to a fix agent and see the quote before it runs.
- Receipts
- Every request and fix, with its result (OK, Backup used or Failed) and why.
- Usage & limits
- Spend by day and by model, plus a monthly spending limit.
- Wallet
- Your balance, what’s held for running fixes, and deposits.
- Connect
- Ready-to-paste setup for Cline, OpenCode, Cursor, Claude Code and curl.
- API keys
- Create, limit and revoke keys.
- Models
- What each model costs and what it’s good at.
- Model rules
- For each alias: its model, whether a failed attempt is retried, and how many attempts it gets.
There’s also a built-in agent panel (⌘J). Type what you want in plain English, like “create a key for Cursor that can only use inferiq/fast”, or a command such as /keys create Cursor --models inferiq/balanced --limit 5. The agent shows what it’s about to do and asks you to confirm before it changes anything.
Tips for spending less and failing less
- Give each tool its own key. You’ll see what Cursor spends versus your CI pipeline, and a leaked key only exposes one tool.
- Limit cheap tools to light reasoning. A background tool whose key only allows
inferiq/fastcan’t spend on deep reasoning by accident. - Set max_tokens when your balance is low. Many coding tools leave it unset, and the model then defaults to 8,000 output tokens, so the worst-case check is larger than what you’ll actually pay.
- Keep conversations short. Every prompt token is billed, including history your tool resends, so starting a fresh chat for a new task saves money.
| You want | Send |
|---|---|
| Cheap planning, strong edits | inferiq/fast for planning, inferiq/balanced for edits |
| Your own reasoning level | qwen/qwen3.8-27b with reasoning_effort |
| The deepest thinking for a hard bug | inferiq/best |
Limits and errors you might see
| Limit | When it’s hit |
|---|---|
| Your balance | insufficient_balance: top up, or lower max_tokens |
| Daily limit on a key | budget_exceeded until 00:00 UTC |
| 120 requests per minute per key | rate_limit_exceeded, with a retry-after header |
| Monthly spending limit | budget_exceeded when “stop at the limit” is on |
| A model the key isn’t allowed | model_not_allowed: use an allowed model, or make a new key |
All of these are refused before a model is called, so none of them cost anything. Every code is listed in Errors.
FAQ
- Do I need crypto?
- You need an EVM wallet to sign in, and signing is free. During early access your balance is credited for you.
- Is there a subscription?
- No. Keys are free, and you pay per call from your balance at each model’s token price. No monthly minimum.
- Does Inferiq keep my code?
- Prompts and answers pass through to the model provider and back. Inferiq doesn’t store them, and they never appear in receipts or logs.
- What if a model goes down mid-session?
- With an alias, the next model answers and your tool keeps working. A stream that has already started ends with an error instead of switching models halfway.
- Will a fix agent change my files?
- No. It returns a patch and a way to check it. You decide whether to apply it.
- Can I withdraw unused balance?
- Not in the first release.
- Which tools work today?
- Anything that speaks the OpenAI chat format: Cline, OpenCode, Roo, Cursor’s chat, the OpenAI SDKs and curl, plus Claude Code through the Anthropic-format endpoint.
What’s next
- Phase 2 (done): Quick Fix and Build Doctor, with quotes and a hard maximum, and the Anthropic-format endpoint for Claude Code. On 60 real errors they returned a correct patch 30/30 and 27/30 times.
- Phase 3 (live): deposits on Robinhood Chain and Base mainnet, with a wallet page and low-balance alerts.
- Phase 4 (in progress): the MCP server is live at
/v1/mcp, so you can ask for a fix and approve its quote without leaving Claude Code or Cursor. - Phase 5: Type Fixer, Dependency Doctor, Test Fixer, and
npx inferiq fix.
Each phase ships when it meets its exit criteria, not on a date. A new fix agent, for example, ships only when it returns a correct patch most of the time on a set of real errors, measured against a baseline.
One key for your coding tools. Fix agents when you’re stuck.
Connect your wallet, create a free key, and send your first request in a few minutes.
Follow @inferiq_ on X (opens in a new tab) for updates as each phase ships.