Pricing by modality
Every rate card is per million tokens — here is how each kind of model actually bills, and what to type in.
One rate card, many billing models
Janus prices every request from its rate card in USD per million tokens, using the token counts the upstream reports. That is the native unit for chat and embeddings, but providers quote speech, transcription, image and realtime models in their own units — per minute, per character, per image tier. The tables below show each modality in the shape its provider publishes, with the per-1M-token figure to enter in Janus highlighted.
Figures are illustrative public list prices at the time of writing; check the provider’s pricing page before relying on attribution. A rate card with the wrong denominator is the most common cause of a bill that does not reconcile.
Chat and embeddings
Text models are the straightforward case: the provider bills the same units the rate card uses. Enter input, output and cached-input rates as published; leave cache-write rates empty unless the provider bills them (Anthropic does).
| Model | Input | Cached input | Output |
|---|---|---|---|
| gpt-4o | 2.50 | 1.25 | 10.00 |
| gpt-4o-mini | 0.15 | 0.075 | 0.60 |
| claude-sonnet-4 | 3.00 | 0.30 | 15.00 |
| text-embedding-3-small | 0.02 | — | — |
Voice (text-to-speech)
Speech models are quoted two ways. Token-native models (gpt-4o-mini-tts) bill text input and audio output per million tokens, which the provider also expresses as an approximate per-minute cost. Janus can meter them only when the caller streams with stream_format: sse, whose final event reports the tokens; a plain audio response carries no usage.
A speech response with no usage, which includes every response from character-billed models (tts-1, tts-1-hd), is recorded as not metered (unmetered_modality) with zero tokens and zero cost, so a rate card has no effect on it; attribution for those requests depends on the provider’s invoice.
| Model | Billed | Provider unit | Rate | Janus rate card |
|---|---|---|---|---|
| gpt-4o-mini-tts Text | Text input | per 1M tokens | 0.60 | 0.60 in |
| Audio | Audio output | per 1M tokens (≈ 0.015 / min) | 12.00 | 12.00 out |
| tts-1 Chars | Input text | per 1M characters | 15.00 | not metered |
| tts-1-hd Chars | Input text | per 1M characters | 30.00 | not metered |
Audio-token models: roughly 1 minute of speech ≈ 1,250 audio tokens, so a per-minute quote × 800 gives the per-1M-token rate.
Image generation
Image models bill several modalities on one request: text input (the prompt), image input (edits and references) and image output. The provider publishes each as its own per-1M-token rate, so a model appears as a block with one sub-row per modality. Batch pricing is a separate tier at half price — use the tab that matches how your callers submit work. A Janus rate card has one input rate, so text and image input are priced at the same rate: enter the image-input rate if most requests are edits, otherwise the text rate. Image output is priced as output tokens. When a provider reports the request cost directly, that figure is used instead (accounting method upstream_reported_cost).
An image response that reports neither token usage nor a cost is recorded as not metered (unmetered_modality); check the provider’s invoice for those requests.
Standard
| Model / modality | Input | Cached input | Output |
|---|---|---|---|
| gpt-image-1 Text | 5.00 | 1.25 | — |
| Image | 10.00 | 2.50 | 40.00 |
| gpt-image-1-mini Text | 2.00 | 0.20 | — |
| Image | 2.50 | 0.25 | 8.00 |
Batch
| Model / modality | Input | Cached input | Output |
|---|---|---|---|
| gpt-image-1 Text | 2.50 | — | — |
| Image | 5.00 | — | 20.00 |
| gpt-image-1-mini Text | 1.00 | — | — |
| Image | 1.25 | — | 4.00 |
Per-image list prices (e.g. 0.04 for a 1024×1024 medium-quality image) are what these token rates work out to.
Transcription (speech-to-text)
Transcription is quoted per minute of audio. Token-native models (gpt-4o-transcribe) also publish per-1M-token rates for audio input and text output, which map directly onto a Janus rate card. Minute-billed models (whisper-1) report seconds of audio, which Janus records as one input unit per started second: enter the per-second price × 1,000,000 as the input rate (0.006 per minute = 100.00). Response formats that return plain text (text, srt, vtt) carry no usage, so Janus estimates output from the transcript’s length and records no input.
| Model | Use case | Per minute | Audio in | Text out |
|---|---|---|---|---|
| gpt-4o-transcribe | Accuracy | 0.006 | 2.50 | 10.00 |
| gpt-4o-mini-transcribe | Cost | 0.003 | 1.25 | 5.00 |
| whisper-1 | Per second of audio | 0.006 | 100.00 | — |
Realtime (speech-to-speech)
Janus does not proxy Realtime sessions. They run over WebSocket or WebRTC, which the gateway does not carry, so realtime models cannot be used through Janus and their usage never reaches the request log. The provider’s rates are shown below for reference only.
| Model / modality | Input | Cached input | Output |
|---|---|---|---|
| gpt-realtime Text | 4.00 | 0.40 | 16.00 |
| Audio | 32.00 | 0.40 | 64.00 |
| Image | 5.00 | 0.50 | — |
| gpt-realtime-mini Text | 0.60 | 0.06 | 2.40 |
| Audio | 10.00 | 0.30 | 20.00 |