Skip to main content
A run’s answer is only half the story. The other half is what your team did with it: whether someone looked at it, took the recommendation, chose something else and why, and what finally happened. Nexio records that as two kinds of signal against a run.
  • An outcome is an event in the run’s life after delivery: viewed, accepted, overridden, or a final result. Outcomes are append-only and idempotent.
  • An annotation is a person’s judgment of the run: a rating, a required comment, and an optional pointer at the part of the output it is about.
Both feed the engine’s quality measures and its improvement proposals. See How the signal is used. A run’s output is typed by the engine’s declared response schema (see Declared schemas). Outcome events are not: the event types and their payloads are fixed by the platform and are the same for every engine.

Outcomes

POST /api/v1/engines/{engine_slug}/runs/{run_id}/outcomes

Event types

Timestamps are RFC 3339 with an offset of at most 23 hours. Nexio stores identifiers as sent and does not check them against the run. The identifier fields (accepted_carrier_id, chosen_carrier_id, carrier_id, broker_id), the placement_outcome type with its status values, and the reason_code list are a fixed set; the full field list is in the endpoint reference. reason_code on overridden must come from the override reason taxonomy, version 2026-08-31-unified. Send that version in reason_taxonomy_version, or leave it out (or send an empty string) and Nexio stamps it. Any other version is refused. reason_text is at most 1,000 characters, counted as Unicode characters, not bytes. It is required, and cannot be only whitespace, when reason_code is other.

Record an outcome

Response 201 on the first write, and 200 with the same body on an identical retry:

Idempotency

  • An event_id is unique within your organization and the key’s environment bucket: live keys share one bucket, and test keys, including every named sandbox, share the other. The same ID can be used once in live and once in test. Two sandboxes do not get separate namespaces: an ID already used from one sandbox never records a second outcome from another.
  • Sending the same event_id again with the same run, engine, event type and payload returns 200 and records nothing new. Payloads are compared as JSON, so key order and whitespace do not matter.
  • Sending it with anything different returns 409 event_id_reused.
  • A retry is recognized even after the run itself has been removed by retention, so a late retry never turns into a 404.
  • The run must belong to your organization, your key’s environment, and the engine in the path. Otherwise 404 run_not_found.

Outcome errors

Annotations

POST /api/v1/engines/{engine_slug}/runs/{run_id}/annotations Annotations sent over the API are stamped source: "api", so they are distinguishable from annotations made in the portal’s run review. Annotations are not idempotent: each call creates a new annotation. Unknown body fields are ignored. The run is found by its ID in your organization and environment; unlike outcomes, the engine slug in the path is not checked against the run.
Response 201:
Annotation timestamps carry microseconds. submitter_user_id appears only on annotations made by a signed-in portal user.

Annotation errors

How the signal is used

Outcomes and annotations are inputs to the engine’s evaluation work, which Nexio operates in the portal:
  • The Judge view compares automated quality verdicts with human annotations, to show how far the automated judge can be trusted.
  • For engines of the comparison, entity_analysis and opportunity types, the improvement pass on the Proposals view reads recent annotations, outcome counts, judge verdicts and evaluation results, and drafts a configuration change as a proposal. A person approves or rejects it. Approval releases a new version behind the evaluation gate: a minor version by default, or a major version on an exact_required engine when the change breaks its request or response schema.
Recording an outcome or an annotation never changes a run’s output. See Evaluation.

Credentials

Both routes accept the organization key, or a scoped key with runs:write bound to the run’s engine. See Authentication and access.

Evaluation

Evaluation sets, the judge, and improvement proposals.

Submit run outcome

Endpoint reference.
Last modified on September 25, 2026