> ## Documentation Index
> Fetch the complete documentation index at: https://docs.naga.ac/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Changes to the NagaAI API, billing and dashboard that affect your code or your bill.

<Update label="2026-09-26" tags={["API", "Docs"]}>
  * PDFs and text files reach every model that accepts files. Models without native file input receive the text of the file.
  * `file_url` works on every model in Chat Completions and Responses, and `url` sources work for documents in Messages.
  * A `file_id` fails with `400 file_id_unsupported`, and an `item_reference` in Responses fails with `400`; NagaAI used to drop it.
  * Text to speech returns `400` for a `response_format` the model cannot produce.
  * `/v1/messages` accepts mid-conversation `role: "system"` messages with text content. Claude Code sends them on its first request.
  * A provider failure inside a stream, before any content, moves the request to another provider. If every attempt fails, you get the generic `503`.
  * A provider's rejection inside a stream arrives as `400 invalid_request_error` with `Upstream returned an error:` in front of its text.
  * NagaAI no longer returns `502`. A request no provider could serve returns `503`.
  * Image, audio, embedding and moderation endpoints report provider errors like the chat endpoints: a generic `503`, `400` with `Upstream returned an error:`, or `400` with `Request rejected by upstream content moderation.` (was `403 inappropriate_content`).
  * `/v1/messages` uses Anthropic error types by status: `authentication_error`, `billing_error`, `not_found_error`, `rate_limit_error`.
  * A `function_call_output` without its `function_call` fails with `400 tool_output_unmatched`. A `language` that is not an ISO 639-1 code fails with `400` on transcriptions. `days` outside 1 to 30 on `/v1/account/activity` fails with `400` instead of `500`.
  * `/v1/models` no longer lists `web_search_options`, `functions`, `function_call`, `logit_bias`, `logprobs` or `prediction` in `supported_parameters`: NagaAI does not pass them to any provider.
  * `json_object` works without the word "json" in the prompt.
  * Responses output lists reasoning before the answer.
  * `/v1/responses` carries Codex CLI's tool formats: freeform tools such as `apply_patch`, MCP tools grouped by namespace, and the compact tool list of `gpt-6-*` and `gpt-5.6-*`.
  * The API reference documents the `x-naga-routing-strategy` request and response header.
  * An unknown `default_routing_strategy` in `POST` or `PATCH /v1/account/keys` now fails with `400` instead of `500`. The response to `POST /v1/account/keys` includes `default_routing_strategy`.
  * This documentation was rewritten against the current API. New pages: [Routing](/build/routing), [Differences from OpenAI and Anthropic](/build/compatibility), [Limits](/build/rate-limits).
</Update>

<Update label="2026-09-20" tags={["Billing"]}>
  * Crypto top-ups go through CoinGate: BTC, ETH, USDC, SOL and other coins. USDT is not accepted there.
  * The legacy crypto method with USDT and 200+ coins stays available to accounts that have paid \$1,000 or more in total.
</Update>

<Update label="2026-09-17" tags={["Billing"]}>
  * Card and PayPal payments add credits only when the payment completes. A refund or chargeback removes the credits it paid for.
  * Bank debit methods such as SEPA are no longer offered at checkout.
</Update>

<Update label="2026-09-14" tags={["API", "Routing"]}>
  * Routing strategies: `reliability`, `balanced`, `latency`, `throughput` and `cache`. Set one in the `routing` body field, the `x-naga-routing-strategy` header or as a key default. The `x-naga-routing-strategy` response header names the strategy NagaAI used. See [Routing](/build/routing).
</Update>

<Update label="2026-09-05" tags={["API"]}>
  * NagaAI removes reasoning signatures issued by one provider before a request goes to another. Conversations with reasoning models no longer fail when the provider changes.
</Update>

<Update label="2026-09-04" tags={["API", "Errors"]}>
  * Errors come in three kinds. A provider failure moves the request to another provider, and if all fail you get a generic `503` or `502`. A provider's content filter returns `400` with `code: "content_moderation"`. A provider's refusal of a valid request returns `400` with `Upstream returned an error:` in front of its text.
  * NagaAI drops parameters a model does not list in `supported_parameters` before the request reaches a provider.
  * A conversation with a tool call and no matching tool result fails with `400`.
</Update>

<Update label="2026-08-30" tags={["API", "Pricing"]}>
  * An input the model cannot read, such as an image for a text-only model, fails with `400 unsupported_modality` before it reaches a provider.
  * `pricing` in `/v1/models` has new units: `per_input_audio_token`, `per_output_audio_token`, `per_input_audio_hour`, `per_output_audio_hour`, `per_output_text_token`, `per_input_text_character` and `per_output_text_character`. `per_audio_token` is gone.
</Update>

<Update label="2026-08-27" tags={["Pricing"]}>
  * NagaAI charges cached input tokens at `per_cached_input_token` on every model that has the price. Before, some models charged them at zero.
</Update>

<Update label="2026-08-23" tags={["API"]}>
  * Every response from an API endpoint carries an `x-request-id` header. The same id identifies the request on the Logs page.
  * Response ids have the prefixes `chatcmpl-`, `resp_` and `msg_`, and `model` always holds the catalog id.
  * A request body that stops arriving for 60 seconds, or takes longer than 15 minutes, fails with `408`.
</Update>

<Update label="2026-08-16" tags={["Models"]}>
  * `dall-e-3` and `dall-e-3:free` left the catalog after OpenAI retired them.
</Update>

<Update label="2026-07-15" tags={["API", "Limits"]}>
  * Request bodies are limited to 32 MiB and single inline files to 20 MiB. Larger requests fail with `413`.
</Update>

<Update label="2026-07-13" tags={["API", "Errors"]}>
  * Validation errors return `400 invalid_request_error` with a text `message` such as `body.messages: ...`.
  * A model with no available provider returns `503` with `No upstream available.`
</Update>

<Update label="2026-07-12" tags={["Billing", "Limits"]}>
  * NagaAI does not charge a request that fails before its answer reaches you.
  * A running paid request reserves 0.05 credits of the balance. A paid request with less than 0.05 credits left fails with `402`.
  * `max_tokens` in Chat Completions works as an alias of `max_completion_tokens`.
</Update>

<Update label="2026-07-04" tags={["API"]}>
  * Chat models that draw return images in all three chat formats: `message.images` in Chat Completions, `image_generation_call` in Responses and `image` blocks in Messages.
</Update>

<Update label="2026-07-02" tags={["API"]}>
  * Chat Completions and Responses accept audio input on models that support it.
</Update>

<Update label="2026-07-01" tags={["API"]}>
  * `reasoning_effort` is moved to the nearest level a model supports instead of failing.
</Update>

<Update label="2026-04-12" tags={["Dashboard", "Privacy"]}>
  * Data logging (beta) on the Privacy page stores request and response bodies for 30 days and shows them in Logs.
</Update>

<Update label="2026-04-09" tags={["API"]}>
  * `/v1/models` no longer has `supported_parameters_by_endpoint`. Use `supported_parameters`.
</Update>
