Skip to main content
POST
Submit Run

Behavior

  • Send Idempotency-Key (at most 255 characters) to make retries safe. The same key and request return the original run; a changed request returns 409 idempotency_key_reused. Keys have no timer and last as long as the run. See Runs.
  • Engines of the matching type need an acting principal in X-Nexio-Acting-Principal. See Authentication and access.
  • The shape of input depends on the engine’s type and configuration. See Engine types and the engine’s Contract page in the portal.

Authorizations

Authorization
string
header
required

Send the key as Authorization: Bearer <key>. Two kinds of key exist.

Organization keys are issued in the portal (Settings, then API keys), each bound to one environment, shaped nx_<environment slug>_<64 hex>. They carry no capabilities and pass every capability check, with one exception: routes under /records, /actions, /operations, /api/v1/engines/{id}/opportunities, /api/v1/graph and /api/v1/catalog/documents accept an organization key only when its environment is live, and refuse any other with 403 scoped_key_required. Revocation takes effect within 60 seconds.

Scoped keys are issued by Nexio on request, shaped nxsk_v1_<24 hex key id>_<43 character secret>. Each is bound to one org, one environment, a set of engines and a set of capabilities. A malformed, unknown or revoked nxsk_ key fails with 401 and is never retried as an organization key. Revocation takes effect on the next request. A scoped key without a route's capability gets 403 insufficient_capability; a scoped key not bound to the engine gets 403 engine_binding_forbidden.

Key-grantable capabilities: engines:read, runs:write, runs:read, runs:defensibility:read, runs:test, catalog:read, catalog:documents:read, webhooks:manage, conversations:use, conversations:export, records:read, records:opportunities:run, actions:write, actions:read, graph:read, records:analyze.

Routes that accept organization keys only (every scoped key gets 403 insufficient_capability): environment management, engine create, update, configuration and publish, and conversation instance authoring. Each operation description names the capability a scoped key needs.

Headers

Idempotency-Key
string

Optional retry key, at most 255 characters (400 invalid_idempotency_key otherwise). Scoped to the organization, the key's environment, the submitter (the acting principal, or the API key when none is sent) and the key value. The same key with the same request returns the original run with 202 and creates nothing. The same key with a changed request returns 409 idempotency_key_reused with the original run_id in details. Keys have no timer; the binding lasts as long as the run.

Maximum string length: 255
X-Nexio-Acting-Principal
string

The person in your organization the run acts for. An engine of the matching type refuses a submission without it (400 run_requires_acting_principal). A nonempty body submitted_by must equal this header after trimming, and is refused when the header is absent (400 acting_principal_mismatch).

X-Nexio-Acting-Email
string

The acting person's verified sign-in email, sent with X-Nexio-Acting-Principal. The seat is derived from it.

Path Parameters

engine_slug
string
required

Engine identifier slug (e.g. default).

Body

application/json
input
object
required

Engine-specific submission. The fields depend on the engine type and its configuration: see Engines overview and the engine's Contract page in the portal, which renders the typed request schema.

offerings
object[]

Alternatives to rank, for the types that take them: required in practice by comparison engines; optional on matching engines, which source candidates from connected data. The offering rules below apply to these engines. An offering without id or a positive attributes.line_premium is dropped. A comparison run reports each drop in output.warnings; a matching run does not list drops. A kept offering must also carry provider_id, provider_name and category, or the submission answers 400 invalid_offerings. An unknown key on an offering or in its constraints fails with 400 invalid_request; coverage and attributes accept extra keys.

engine_version
string

Pins which released engine configuration and request/response schemas this run uses.

  • "1.3": exact released configuration and schemas.
  • "1.x": auto-track the latest released minor of major 1 (you ride minor releases only when the engine policy permits it).
  • "draft": mutable unpublished config, accepted only in a sandbox environment.

Bare major ("1") and three-tier semver ("1.0.0") are rejected. Omission resolves to the latest release on engines with the default pin policy, and fails with 500 engine_version_none_released when the engine has no release. exact_required engines refuse an omitted pin (engine_version_required) and an N.x pin (engine_version_exact_required); draft from a sandbox key is still accepted. The resolved exact version is stable for the run and is echoed by polling and webhooks. See Versions and releases.

Pattern: ^(\d+\.(\d+|x)|draft)$
Example:

"1.0"

test_scenario
enum<string>

Deterministic supported-version fixture. Requires a sandbox environment, a scoped key with runs:test, and an exact N.M engine_version present in the published registry, which today holds only the generic fixture engine. Fixture runs make no provider calls and count against the monthly run cap. See Sandbox fixtures.

Available options:
completed,
degraded,
failed
submitted_by
string

An optional restatement of the acting principal. It is not an alternative to the X-Nexio-Acting-Principal header: a nonempty value is accepted only when the header is also sent with the same value (after trimming). A value without the header, or with a different header value, fails with 400 acting_principal_mismatch. Engines of the matching type require the header.

Response

Run accepted. A new run is queued. A retry with the same Idempotency-Key and request returns the existing run with its current status.

run_id
string<uuid>
required

Unique run identifier. Use this to poll for results.

status
string
required

queued for a new run. On a retry with the same Idempotency-Key, the existing run's current status, lowercased (for example running or completed). Treat any value as "the run exists" and poll it.

Last modified on September 25, 2026