IronStratum Get an API key

API pricing: what a call bills, what it never bills, and what stops it

Every rate this platform charges lives in one table on this page, and the table is generated, not written. A registry file in the serving layer holds each model's unit and rate; the meter that computes your bills reads it at runtime, and the table you read here renders from it at build time. One file is the parent of both. No rate on this page is typed by a person, so no rate on this page can disagree with the one you are billed.

The prose around the table is the part calculators and price lists leave out: which unit a workload bills in, what a call reports about its own charge, which outcomes cost nothing, and what enforces the ceiling on a runaway loop. Those four laws hold for every model in the catalog, and they hold today, before you look at a single row.

Last verified: 2026-09-11

What an API bill is made of

Strip any metered API bill to its skeleton and two things remain: a count of units and a rate per unit. The count comes from what the call actually consumed. The rate is a published number. Multiply them and you have the charge. Everything else in a pricing page, tiers, bundles, credits, monthly minimums, is a wrapper around that skeleton, and the wrapper is where surprises hide.

The hard part is that the industry bills in different units for different work, and the units do not convert cleanly. The same text to speech product is quoted per character at one host, per minute at another, per token at a third, and per credit at a fourth. Google's own speech pricing page is the honest exhibit: its classic voices are priced per character while its newer model line is priced per input and output tokens, on the same page, for the same product type. Credits are the least legible wrapper of all, because a credit is a unit a vendor defines, and comparing credit prices across vendors means comparing things that are not the same size.

So the comparison skill that matters is unit literacy: before you compare two numbers, know what each one counts. The rest of this page is that skill, applied to this platform.

The five metering units

This platform meters five unit classes, one per product family, and states the unit beside every rate in the table.

UnitWhere it appliesWhat countsWhat does not count
TokensChat and embeddingsTokens actually processed, counted from the call's own usage record, or estimated from the text if the lane reports noneRequests refused at the gateway; failed attempts
CharactersSpeechCharacters of input text you asked to synthesizeThe voice catalog read; refused or failed synthesis
Audio timeTranscriptionDuration of the speech processed, from the transcript's own timingsSilence you never sent; refused or failed requests
PagesDocument parsingPages processed, counted by the lane or by the files you sentJob creation; polling a job's status
SearchesRerankOne search per requestThe size of the document list, however large

Three of these classes have a shape worth knowing in advance.

Tokens carry three rates, not one. A chat call bills three things: the input you send, the output the model writes, and any prefix served from cache. Each of the three carries its own rate. Cached input is a prefix the platform has processed before; billing it below fresh input is how the industry handles repeated context, and OpenAI's caching guide describes the same split at the largest scale. Reasoning output is output: a model that thinks before answering bills the thinking as tokens generated. Embedding work bills tokens too, read from the usage record the response itself carries, so a single request with a dozen inputs bills them as one combined figure.

Audio time follows the speech, not the clock. On the streaming transcription face, the meter sums the durations the transcript itself reports for finished sections. A slow network, a long connection, or idle silence at your end never inflates the number. The batch face, which accepts compressed formats, falls back to the upload's wall-clock duration when the lane reports no timings, because a compressed file's size is not a duration.

Pages are counted even when the count is quiet. The parsing lane bills the pages the document contained. If a lane fails to report a page count, the gateway counts the files you sent rather than treating the work as free. Long documents run through a job mode where creating the job bills nothing and the single read that collects the finished result bills once; the result payload is consumed on first read, so polling again cannot bill twice.

Every call reports its own charge

Each response carries a usage object, the same field OpenAI's chat reference documents for token counts, with one addition: a cost field holding this call's charge at this platform's rates. It is the platform's own retail number, computed from the counts and rounded to six decimals, never a figure passed through from some upstream host.

Streaming does not lose this. The final chunk of every stream carries the usage object, always, with no opt-in flag to remember. That differs from the norm the same reference documents, where usage in streaming mode is opt-in and an interrupted stream may never deliver the count at all.

Two reads answer the account-level question. A credits endpoint returns the wallet balance and the rolling thirty-day spend, computed live on every call, so a fresh top-up is visible the moment it lands. And the console keeps the full ledger, one row per attempt with its charge, which is the record an operator pulls when a bill is questioned.

What never bills

The lists above say what counts. What follows is the rest of the contract, and it is short enough to state exactly.

  • Refused before relay. A request turned away at the door bills nothing: input past the cap, a field it does not know, a model name that is wrong, an empty wallet. The refusal is a named error with a request id, not a silent drop.
  • Failure on the far side. When the serving lane dies mid-call, the attempt is logged for operations and the ledger row carries no charge. On speech routes, a generation that dies partway through leaves the delivered audio free. On transcription streams, sections already delivered before a death are the exception: finished work bills.
  • Job machinery. Creating a parsing job and asking whether it is done cost nothing. The work bills once, when its result is collected.
  • Catalog reads. Listing models, reading a voice catalog, checking health: these are reads, not work, and they carry no charge.

One edge belongs on the same list in the interest of honesty, because it is the classic double-charge trap. A client that retries after a dropped connection re-runs its request. On the chat, embeddings, and rerank routes an idempotency key turns that retry into a replay of the original answer, charged once. On the audio and document parsing routes the key is accepted but replay is off: replaying a half-delivered audio stream would hand back a truncated file that reads as complete, so a retried audio call runs again and bills again. The safe pattern there is to check whether the bytes arrived before you retry.

The wallet: prepaid, and the balance is the stop

Payment here is prepaid by construction. You fund a wallet on the console; every completed call takes its charge out of that balance in the same database transaction that records the call, so a charge and its ledger row cannot exist apart. No subscription sits underneath, no seat count scales the bill, and the wallet holds money you loaded, not promotional credits on a countdown.

The stop is arithmetic. A call that reaches the gateway after the balance hits zero is turned back with a named error, before any model is asked to work. The error code is one the industry already uses for an exhausted prepaid balance; OpenAI's prepaid billing guide documents the same code name for the same situation. What differs is the posture around it. Prepaid credits are common in this market, Anthropic bills most API organizations through them and OpenAI offers them, but at the large platforms prepay usually rides beside an auto-reload that refills the balance when it runs low, and purchased credits can carry an expiry date. Here there is no auto-reload at all. Refilling is a decision a human makes, and until it is made, the meter is dark.

The exact edges: the guard runs against a cached balance that a top-up refreshes at once and, at worst, within half a minute, and a long call already in flight when the balance crosses zero can finish and slightly overdraw before the stop closes. For a workload that must never pause, that window is the thing to monitor; the credits endpoint shows the live balance at any moment. For everyone else, it is the reason the worst case is bounded at seconds of usage rather than a month of invoices. The guide on avoiding API bill shock, linked below, teaches the monitoring discipline in full, and the prepaid structure enforces it by construction.

Keys and the limits on them

Every call authenticates with an API key you create on the console, and the key is the unit of containment. Any single key can be switched off alone, taking effect within the key cache's short refresh, without touching the other keys the wallet funds. The working shape is one key per project: when a key leaks, you retire it, and the rest of the account never notices.

A per-key spending cap, a limit that lets one key exhaust its own budget while the wallet funds the others, is on the roadmap for a later sprint. It does not exist on the platform today, and no page on this site will describe it as though it did. The ceiling in force now is the wallet balance, and it bounds every key on the account at once.

How to read the rate table

A build step renders the table on this page from that same registry. Each row carries a model's name, its metering unit, its rate for that unit, and its state. For chat rows the rate is a triple, input, cached input, output, per million tokens. For every other family it is a single rate against the unit you read above: characters, audio time, pages, or searches.

The state column is the honesty mechanism, and it is worth knowing how to read it. Rows show what the registry holds: models serving traffic, models wired and verified with their serving card stopped ahead of the platform's fleet wave, models staged behind a wiring pass, and announced models whose rows and rates land together when their wiring does. A row for a model that is not yet serving says so in its state rather than in fine print, and the model's own page carries the full story, measurements, caps, and what each state means for a buyer. One streaming route currently sits outside the catalog entirely, dropped pending a published quality bar with stated return conditions; its page documents both.

Because the meter and the table share one source, a rate change appears here on this page's next build, from the same edit, and this page's verification date at the top covers the laws, not the numbers, which never needed protecting from drift. The platform is in closed beta, entry by invitation; an account opened now carries its wallet and keys ready for every row that lights up.

Getting started

  1. Enter through the console's invitation gate. The platform is in closed beta, entry by invitation; your balance, your keys, and the full spend ledger are there.
  2. Create a key per project. Splitting projects across keys means a leak costs you one switch, not the account.
  3. Make one small call. Take a code tab from any model page, run it with your key, and read the usage object that comes back: the counts, and the cost of the call you just made, from the same arithmetic that will bill it.
  4. Watch the meter as it runs. Every response reports the cost of its own call, and the credits endpoint reads the wallet live: a budget dashboard you already have, before any monitoring tooling. When you want the operating discipline that keeps a metered account quiet, the bill shock guide below is the deep treatment; when you want to move an existing OpenAI-compatible integration over, the base-URL guide is the short path.

The rate tables

Chat & reasoning

Chat and reasoning models — context window, price per million tokens in and out and cached, capabilities
ModelContext$/1M in$/1M out$/1M cached inCapabilities
qwen3.8-27b262,1440.352.550.105thinking · streaming
qwen3.6-35b131,0720.110.800.044thinking · streaming
minimax-m2.7196,6080.240.950.072streaming
muse-glimmer-30b131,0720.281.200.084streaming
glm-5.3-flash1,048,5760.110.350.033streaming
deepseek-v4-flash-07311,310,7200.150.420.045streaming
gemma-4-31b-it262,1440.220.490.066streaming
deepseek-v4-pro1,000,0001.132.210.339streaming

Self-hosted, only here

Chat and reasoning models — context window, price per million tokens in and out and cached, capabilities
ModelContext$/1M in$/1M out$/1M cached inCapabilities
ornith-1.5-35b100,0000.352.550.105thinking · streaming · only here
ornith-1.5-9b100,0000.100.300.03thinking · streaming · only here

Speech, transcription, embeddings & rerank

Specialty models — kind and unit price
ModelKindPrice
kokoro-ttstext to speech$15 / 1M chars
chatterbox-ttstext to speech$25 / 1M chars
pocket-ttstext to speech$16 / 1M chars
audio8-ttstext to speech$8 / 1M chars
hayamimi-sttspeech to text$0.60 / audio-hour
whisperspeech to text$0.25 / audio-hour
bge-m3embeddings$0.05 / 1M tokens
bge-reranker-v2-m3rerank$1.50 / 1k searches

Token prices per 1M unless the unit says otherwise; a dash means the value isn't set yet — confirmed when the model goes live. Everything here is served by the same API that bills you: GET /v1/models. The full list with model details lives on the model index.

Guides

Questions

How much does this API cost?
It costs the number of units a call consumed times the rate printed for that model in the table on this page, and no other term enters the bill. Which unit applies depends on the route: chat and embeddings meter tokens, speech meters characters, transcription meters audio time, document parsing meters pages, and rerank meters searches. No rate is written into this answer or anywhere in the prose layer, because a number copied by hand stops matching the registry the day it changes. Read the row for your model, note its unit, and multiply.
Which metering unit will my workload bill in?
Follow the product type. Text generation and embedding work bills in tokens. Synthesizing a voice from text bills in characters of input. Turning audio into text bills in audio time, the duration of the speech itself. Reading documents bills in pages. Rescoring a search shortlist bills one search per request, however many documents it carries. The table states the unit beside every rate, so a wrong guess is hard to make.
Is there a free tier or trial credits?
No. There is no free allotment and there are no promotional credits. The account works the other way: you fund a wallet, the meter spends it down, and once it empties the next call is refused until you load more. The wallet holds money you put in, not credits on a countdown. The models themselves are open weight, so running them on your own hardware costs nothing in licensing, and every model page links its official download.
What happens when the wallet runs out?
Calls are refused with a named error, insufficient credits, before any model is asked to do work, so an empty account cannot generate charges while you sleep. The check runs against a cached balance that a top-up refreshes at once and, at worst, within half a minute, and a call already in flight when the balance crosses zero can finish and slightly overdraw before the stop bites. There is no automatic reload: refilling is a deliberate act on the console, and the balance endpoint shows a fresh top-up immediately.
Am I charged for failed or refused API calls?
Refused calls never bill: a request turned away at the gateway for an over-long input, an unknown field, or an empty wallet costs nothing. Failed calls never bill either: when the upstream serving lane dies, the attempt is logged for operations but no debit lands. On speech routes a mid-generation death leaves the delivered audio unbilled. On transcription streams, transcript sections already delivered before a failure are billed. Retries are the one place money can move twice: the chat, embeddings, and rerank routes accept an idempotency key that returns the original answer without re-running the work, while audio and parsing routes do not replay, so a retried request runs and bills again.
Is there a monthly plan, per-seat pricing, or an expiry on funds?
None of those exist here. No invoice is computed from the calendar, a seat count, or a request count, and no clock runs against the money in your wallet. You pay per unit of work from a prepaid balance, and that is the entire commercial surface. This contrasts with prepaid plans elsewhere in the market that auto-reload by default or expire purchased credits after a set period; those are their mechanisms, described so the difference is plain.
Can I cap what one API key spends?
Not today, and this page does not claim otherwise. What exists today is revocation: any single key can be switched off alone, on the console, without touching the other keys on the account, which contains a leaked key to the work it was doing. A per-key spending cap is on the roadmap for a later sprint. Until that sprint, the wallet balance is the only ceiling in force, and it caps every key on the account at once.