Skip to main content
A version is an immutable release of an engine’s configuration, numbered major.minor (for example 1.0, 1.3, 2.0). Each version points at one archived configuration and at the request and response schemas derived from it. Runs choose a version at submission and keep it for their whole life. Versions let you change an engine while production callers keep a fixed contract until they choose to move.

How it works

  1. You save changes to the draft configuration. Runs that do not pin draft execute as before. Three settings, expose_warnings, notify_on_supersede and quotas.requests_per_minute, are read from the saved configuration. See Configuration.
  2. You publish. Nexio validates the configuration, runs the evaluation gate, derives the request and response schemas, decides the version number, and records the release.
  3. Each run submitted through the API resolves its engine_version pin at submission and is stamped with the resolved version and configuration hash.
  4. The worker executes the stamped configuration. A later publish does not move a run that already exists.
A new engine has no released version. Until you publish one, a run that does not pin a version fails with 500 engine_version_none_released. From a sandbox key you can run the draft with engine_version: "draft" before you publish.

Pins

Send engine_version in the run request body. Anything else, including a bare major (1) or a three-part version (1.0.0), is refused with 400 engine_version_invalid_format.

Pin policies

Each engine has one pin policy.

What is stamped on a run

GET /api/v1/runs/{run_id} and webhook payloads return engine_version (the resolved N.M, or draft) and engine_config_version_hash (the 16-character hash of the configuration the run executed). Store both with your own record of the result.

What a version freezes

A version freezes the configuration bytes and the request and response schemas. It does not freeze model output, external data, provider behavior or latency. Two runs on the same version with the same input can differ where a model or an external source is involved.

Publish a version

POST /api/v1/engines/{engine_slug}/versions releases the current draft. The body is optional.
Response 200:
Publishing an unchanged draft again is not an error. It returns the current latest version with already_released: true and creates nothing. Publishing from the portal (the version control in the top bar on an engine’s pages) is done by Nexio today. It shows a preview of the version number and the breaking-change reasons before Nexio confirms. Your integration publishes through POST /api/v1/engines/{engine_slug}/versions, and both paths pass the same evaluation gate.

Version numbers

The first release is 1.0. After that, Nexio compares the new schemas with the latest release and bumps the major or the minor. On engines with the default pin policy, a change is major when:
  • an output field is removed, or its type changes;
  • a new input field is required;
  • an input field’s type changes;
  • an optional input field becomes required.
Everything else is minor: added output fields, new optional input fields, removed input fields, required fields that become optional, and changes to behavior with no schema change. On exact_required engines, any change to the request schema or the response schema is major, with reasons request_schema_changed and response_schema_changed. A configuration change that leaves both schemas identical is minor. is_breaking_from_previous_major is true only on an N.0 release that follows an earlier major. reasons lists what made a major bump.

The evaluation gate

Publishing runs the evaluation gate against the candidate configuration:
  • An engine with no evaluation set publishes without a gate.
  • Every release needs a pass on each evaluation set that declares a tolerance, that is, a limit on how many labeled cases may disagree with their labels.
  • The first release of an engine that has evaluation sets, none of which declares a tolerance, needs a completed evaluation of the candidate with no case errors.
  • Later releases are not blocked by sets without a tolerance.
gate_verified is true only on an engine’s first release, and only when the passing evaluation compared the candidate against labeled cases. Later releases read false, even when they passed the gate. cold_start_eval_set_id names that set. Nexio manages evaluation sets; see Evaluation.

List and read versions

Response 200, newest first:
GET /api/v1/engines/{engine_slug}/versions/{version} returns one entry in the same shape. The route returns schema hashes, not schema bodies. For the generic fixture engine, the schema bodies are published in the supported contract versions registry; for your own engines, read the schema on the Contract page or in the downloaded OpenAPI file.

Upgrade a pinned integration

1

Record the baseline

Store the exact version your live requests pin and its two schema hashes.
2

Review the target

Read the target version with GET /api/v1/engines/{engine_slug}/versions/{version}: its changelog, is_breaking_from_previous_major and schema hashes. Compare the hashes with your baseline. Equal hashes mean the contract did not change. The bump and reasons fields appear only in the publish response, not in later reads, so keep that response if you need them.
3

Test in a sandbox

Submit representative requests pinned to the target N.M from a sandbox key. Check parsing, polling and webhook handling against the results.
4

Change the pin

Deploy your integration with the new exact pin. On exact_required engines, never send N.x.
5

Keep the evidence

Store the resolved engine_version and engine_config_version_hash from each run with your records.
Rolling back means pinning the earlier version again. Behavior that a version does not freeze (model output, external data) is not restored by a rollback.

Errors

Resolving a pin at run submission: Publishing: Reading versions: 400 engine_version_invalid_format for a malformed {version}, 404 engine_version_not_found, 404 engine_not_found, 403 engine_archived for an archived engine.

Credentials

Listing and reading versions accept the organization key or a scoped key with engines:read bound to the engine. Publishing accepts only the organization key. See Authentication and access.

Runs

How a pinned run executes and reports.

Evaluation

Evaluation sets and the release gate.

Publish engine version

Endpoint reference.

Supported contract versions

The fixture registry and API versioning.
Last modified on September 25, 2026