Skip to main content
All plans This page describes the public resources the API serves: what each one is, how it is identified, how it relates to the others and how it moves through its lifecycle. The wire shapes are in the OpenAPI document; paths below omit the /api/v1 prefix.

Public resources

Event-sourced state

An event is an attributable fact about what was requested and accepted, appended to a branch with a sequence number. Reducers fold events into the derived resources above, and state can be rebuilt from the log. Authorization happens before the event is appended. Both an allowed operation and a denial are explainable. The Decision records the policy result (allow or deny, policy, reason code, resource, scope, principal), and the Ledger connects an accepted event to the acting principal and Decision. Anything that grows with annotation count is content-addressed and chunked, so a content state stays small whatever the annotation count; annotations, classification answers and project assets share that shape.

Version and content identity

A commit’s commitId identifies the commit object; its contentRoot identifies the covered content and combines the asset, instruction, label, project-metadata, review, taxonomy and workflow roots. They are not interchangeable. An annotation’s hash is content plus provenance and excludes review state.

Routing, review, and machine work

A workflow definition holds up to 32 stages, 32 roles, 64 transitions and 32 gates, with a task limit up to 4096. Each stage has a human or runner actor. Annotate, review and auto-label stages use annotate, review and auto-label; a runner stage names an Agent, categories and a prompt source. The stage schema also names consensus-read and adjudicate, so a definition that carries one still loads, but the pipeline designer does not offer either kind and refuses to apply a pipeline that carries one. Work that reaches either stage cannot finish. See Capabilities and limits. Each transition carries a router with the following fields:
  • manual or rule assignment, with least-loaded assignment and a load cap.
  • A gate of always, uncertainty-above a threshold, or sample at a rate in basis points.
  • Gold injection fields, goldRateBps and a pool. Nitsor has no known-answer pool; a sampled route records the gold candidate as unavailable.
  • A lease from one minute to one day.
  • An order of fifo, oldest-first, priority or uncertainty-desc.
  • Capacity and a work-in-progress limit that cannot exceed capacity.
A Task is one unit of work over a Source at one stage, with a holder, a lease and a status. A Job is a bounded model-compute request with model family, version and prompt. It moves through submitted, running, succeeded, failed and refused. No rule refuses a Job before its model runs, so a new Job does not end refused. A Run dispatches work to the run plane and records GPU class, cap, confirmation ceiling and runtime measurements, including billableDuration in seconds. These measurements are cost and resource telemetry, not customer billing units; launch billing counts completed scan/model results under the existing identity rules. Settlement is settled or active-unsettled. Cancellation requests of drain or kill are recorded separately from status.

Not in the data model

A Dataset Version pins the branch head at creation. It carries no approval mark or signature and does not certify that all work on the branch is complete. Model proposals carry no calibration certificate or calibrated uncertainty guarantee. Existing Sources register by reference. Uploads use a writable customer or Nitsor-managed destination. New customer connections are read-only; see Data boundary for what Nitsor keeps and which features need write access. The contract declares one webhook event type, but the API has no subscription route and delivers no product webhooks.

Next step

Read Public HTTP API for the transport surface or Release a dataset for the version lifecycle.
PlansAll plans
Last verified2026-10-21