Skip to main content

Changelog

Changes to the API and the product that affect how you build on ReOpenly, newest first.

1 November 2026: See what a Search index costs before you build it​

GET .../search/estimate?dataset_id=...&model=... returns what building an index of a dataset with a model is expected to cost: its distinct passages, their input tokens and estimated_credits in US dollars. It is free and embeds nothing. The app shows the expected cost beside the spending ceiling, which is the most a build may spend, not its price. See Playground and Search.

1 November 2026: Resume is offered only with a checkpoint​

A job's detail adds checkpoint_available: true when a paused run has a verified checkpoint to continue from. The app now offers Resume only then; a paused run without one says so and offers a new run, instead of a Resume the server would refuse with 409. See Pause, resume, finish and cancel.

1 November 2026: The training system prompt is shown and offered back​

A text job's detail adds training_system_prompt: the system prompt the fine-tune was trained with and where it came from (run, examples, mixed, none or not_recorded). Your own hosted model reads carry it too; shared and public viewers get null. The job detail now says, for example, "From the training examples (300 of 300)" instead of "None configured", the playground fills the prompt in for your fine-tunes, and the "Use model" snippet sends it first. Jobs trained before this read not_recorded. Nothing changes at serving: a model still answers exactly the messages you send. See Call it with the system prompt it was trained with.

1 November 2026: Updated Terms and Privacy Policy​

The Terms and the Privacy Policy are updated to match how billing now works. You pay from a prepaid balance in US dollars, inference is charged per token, and training per minute of measured training time; each request is charged at least the per-request minimum ($0.00001, Terms dated 31 October); your usage statement shows what was used, the price applied and the amount. Your balance still does not expire. You do not need to accept the Terms again.

1 November 2026: Text LoRA rank goes up to 64​

A text training job's lora_rank now accepts 4, 8, 16, 32 or 64; 128 is no longer offered. GET /api/v1/base-models publishes the new choices under limits.lora_rank, and a new job sent with 128 answers 400 unsupported_value for lora_rank. The default (16) is unchanged. A job frozen above the largest choice keeps reading and downloading as it ran, but its retry answers 409 unsupported_value. See Text settings.

1 November 2026: Inference is billed per token​

Inference is now billed per token instead of per minute. A text request pays for its input (prompt) tokens and its output tokens at separate prices per million tokens, reasoning tokens counting as output; an embedding request pays for its input tokens. A hosted fine-tuned model pays its base's prices times a multiplier. Training is still billed per minute of measured training time.

What you can read. GET /api/v1/pricing/platform adds inference_prices, each model's prices; GET /api/v1/pricing/models adds inference_price to each model. POST /api/v1/pricing/estimate prices inference from those prices (basis: "published_price"), and no request is charged less than the per-request minimum, $0.00001 (minimum_credits_per_request). Statement entries in GET /api/v1/credits/usage add the tokens and the prices each inference line was charged at, and billing_basis. A request must be covered by your balance for its prompt plus max_tokens before it runs. All changes are additive. See How inference is billed.

1 November 2026: Also in this release​

  • Start from an example. Create a project that already holds a small public dataset, one per project type. See Start from an example.
  • Act on many chats at once. Delete chats or change their tags over a selection of ids or a filter, and filter the chats that have no tag (untagged=true). See Act on many chats at once.
  • Search feedback readiness. GET .../retrieval-readiness answers how close a dataset is to something a run can train on, with counts and checks only. See Check readiness.
  • Readiness checks before Start. Both training estimates return checks and ready, and the text estimate returns required_credits. An embedding run now starts when your balance covers its estimate with the safety margin, as a text run does, instead of the price of its whole time limit. See Estimate before you start.
  • A run pauses before your balance runs out, at its next checkpoint; add funds, then resume it. See Low balance.
  • See a run's cost while it trains. A job's detail adds cost_so_far, which moves with the run, with your balance and how long it lasts. See Follow a run.
  • A request pays the prices it was accepted at. A price change while it runs applies to later requests only. See How inference is billed.
  • A run keeps the rate it started at. Training is charged at the per-minute rate shown when the run starts, for the whole run, even if the rate changes while it trains; the job's cost so far uses the same rate. See How training is billed.
  • OpenAI-compatible requests: supported or refused. stop, seed, the penalties and response_format are applied by the model. A valid OpenAI value this API cannot honour, such as n above 1 or logprobs: true, now answers 400 unsupported_value naming the field instead of being ignored; the same fields at their default values are still accepted. See Request fields.
  • Not charged when refused. A request refused while the model is warming up or busy is not charged, streamed or not. See How inference is billed.
  • Change your email address with a code sent to the new address and your current password. See Change an email address.
  • Small embedding datasets train again under the default settings: a selection whose validation set is a single pair can start. See Training jobs.

1 November 2026: Prices in US dollars​

Prices, balances and charges are now written in US dollars instead of credits. One credit was always one US dollar, so no amount changes: a balance of 10 credits is $10, and the rate reads $0.03 per minute instead of 0.03 credits per GPU minute. Training is billed per minute of measured training time, and inference per token (see Inference is billed per token); queue time and idle time stay free.

Nothing changes in the API. Field names such as available_credits, required_credits and credits_per_minute, routes such as /api/v1/credits, the error code insufficient_credits and the pricing estimate's unit: "credits" keep their names, so existing clients keep working; their values are US dollars. Only the human-readable text changed: error messages, the API reference and the payment page now say dollars and balance. See Pricing and billing.

22 October 2026: Embedding projects​

A new project type, embedding, for training and serving your own embedding models:

  • Embedding projects: choose "type": "embedding" when you create a project. See Projects.
  • Training pairs: datasets of an anchor, a positive and an optional negative, added through the API or imported from CSV or JSONL. See Embedding datasets.
  • Embedding fine-tunes: train on your pairs with settings you choose within published bounds. See Training jobs.
  • OpenAI embeddings API: call a hosted embedding model, or a base model without a project, through the OpenAI SDK. See OpenAI-compatible API.
  • Search: rank a whole dataset with a hosted embedding model before you build on it. See Playground and Search.
  • Search feedback: report real searches, review them and promote them into training pairs. See Search feedback.

The Quickstart covers both project types.

13 October 2026: Inference is billed in 100 ms units​

Every successful paid inference request is charged in 100 ms units of the time the model spent on it, rounded up, at the rate in force when it ran. That rate is frozen with the request, so a later price change does not alter it. Before this change each request was rounded up to a whole second. See Pricing and billing.