> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nitsor.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Every page in this documentation carries a `plans` list in its frontmatter and a page-details table naming the plans its content applies to: `All plans`, or a subset of `Community`, `Team` and `Enterprise`. A page limited to some plans also opens with a plan marker naming them.
> Use [Capabilities and limits](/product-status) for capability entitlements and documented availability and limits, and [Plans and billing](/plans-and-billing) for plan pricing and billing policy. Those pages are canonical; do not duplicate their policy values here.
> Reading this documentation grants no product access and no permission. No agent can create or approve a Nitsor release.

# Bind the workflow definition



## OpenAPI

````yaml /openapi.json post /api/v1/workflow/definition/bind
openapi: 3.1.1
info:
  title: Nitsor public API
  version: v1
  description: Generated from the Nitsor API contract; never edit by hand.
  x-nitsor-product-version: 0.1.0
servers:
  - url: https://api.nitsor.com
    description: Nitsor API
security:
  - bearerAuth: []
tags:
  - name: auth
    description: 'Authentication: the session a bearer credential reaches.'
  - name: blind-checks
    description: >-
      Blind checks: scans labelled without seeing the model, scored against it
      under a readiness plan fixed before checking starts. Plan writes need a
      person's own token, and these routes do not accept one yet; an Agent token
      is refused, so change plans on the Pipeline tab meanwhile.
  - name: capabilities
    description: 'Capability discovery: versions, limits and formats.'
  - name: datasets
    description: 'Datasets: named selections over a project''s version graph.'
  - name: decisions
    description: Audit decisions behind authorization refusals.
  - name: executions
    description: Pipeline executions and their work items.
  - name: ledger
    description: Account ledger entries.
  - name: model-label-outcomes
    description: >-
      Model label outcomes: what people did with each label a model proposed,
      per Task and per Proposal.
  - name: model-runs
    description: >-
      Model runs a person starts on Tasks: the estimate to confirm, and the
      start that runs one scan at a time.
  - name: openapi
    description: The OpenAPI description this deployment serves.
  - name: project-groups
    description: 'Project groups: the account''s shared folders on the project shelf.'
  - name: projects
    description: 'Projects: creation and listing.'
  - name: requests
    description: 'Async Requests: status, listing, cancel and the per-item report.'
  - name: service-accounts
    description: >-
      Service accounts and their tokens: the machine identities jobs run as,
      managed by a person holding service-accounts:manage on their own token. A
      secret is shown once, on the answer that created it. A service account's
      access to a project is given, changed and removed by that project's
      admins, with a personal token holding admin there.
  - name: sources
    description: Sources and mask-read presigning.
  - name: storage-connections
    description: >-
      Storage connections to customer object storage, and the
      operator-provisioned credential handles they name.
  - name: task-comments
    description: Task comments, replies and attention.
  - name: taxonomy
    description: Taxonomy definitions, display groups and binding.
  - name: version-graph
    description: Version-graph commits, branches, landmarks and merges.
  - name: workflow
    description: Workflow definition and binding.
paths:
  /api/v1/workflow/definition/bind:
    post:
      tags:
        - workflow
      summary: Bind the workflow definition
      operationId: workflowDefinitionBind
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkflowDefinitionBindRequest'
      responses:
        '200':
          description: Bind the workflow definition
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
            Nitsor-Token-Expires:
              $ref: '#/components/headers/TokenExpires'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowDefinitionBindResponse'
        '400':
          $ref: '#/components/responses/NitsorErrorAuthenticated'
        '401':
          $ref: '#/components/responses/NitsorError'
        '403':
          $ref: '#/components/responses/NitsorErrorAuthenticated'
        '404':
          $ref: '#/components/responses/NitsorErrorAuthenticated'
        '405':
          $ref: '#/components/responses/NitsorError'
        '409':
          $ref: '#/components/responses/NitsorErrorAuthenticated'
        '413':
          $ref: '#/components/responses/NitsorErrorAuthenticated'
        '422':
          $ref: '#/components/responses/NitsorErrorAuthenticated'
        '429':
          $ref: '#/components/responses/NitsorErrorAuthenticated'
components:
  schemas:
    WorkflowDefinitionBindRequest:
      type: object
      properties:
        branchId:
          type: string
          minLength: 1
          maxLength: 200
          x-nitsor-trim: true
        definition:
          $ref: '#/components/schemas/WorkflowDefinition'
        expectedWorkflowVersion:
          anyOf:
            - type: string
              minLength: 1
              maxLength: 200
            - type: 'null'
        idempotencyKey:
          type: string
          minLength: 1
          maxLength: 200
        projectId:
          type: string
          minLength: 1
          maxLength: 200
          x-nitsor-trim: true
      required:
        - branchId
        - definition
        - idempotencyKey
        - projectId
    WorkflowDefinitionBindResponse:
      anyOf:
        - type: object
          properties:
            commit:
              $ref: '#/components/schemas/VersionGraphCommit'
            workflowVersion:
              type: string
          required:
            - commit
            - workflowVersion
        - type: object
          properties:
            kind:
              type: string
              const: unchanged
            workflowVersion:
              type: string
          required:
            - kind
            - workflowVersion
        - type: object
          properties:
            kind:
              type: string
              const: superseded
            workflowVersion:
              anyOf:
                - type: string
                - type: 'null'
          required:
            - kind
            - workflowVersion
    WorkflowDefinition:
      type: object
      properties:
        gates:
          maxItems: 32
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                minLength: 1
                maxLength: 200
              predicate:
                type: string
                minLength: 1
                maxLength: 500
            required:
              - id
              - predicate
            additionalProperties: false
        maxTasks:
          type: integer
          minimum: 1
          maximum: 4096
        roles:
          minItems: 1
          maxItems: 32
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                minLength: 1
                maxLength: 200
              label:
                type: string
                minLength: 1
                maxLength: 200
            required:
              - id
              - label
            additionalProperties: false
        stages:
          minItems: 1
          maxItems: 32
          type: array
          items:
            $ref: '#/components/schemas/WorkflowStage'
        transitions:
          maxItems: 64
          type: array
          items:
            type: object
            properties:
              from:
                type: string
                minLength: 1
                maxLength: 200
              id:
                type: string
                minLength: 1
                maxLength: 200
              router:
                $ref: '#/components/schemas/WorkflowRouter'
              to:
                type: string
                minLength: 1
                maxLength: 200
              when:
                type: string
                minLength: 1
                maxLength: 500
            required:
              - from
              - id
              - router
              - to
              - when
            additionalProperties: false
        label:
          type: string
          minLength: 1
          maxLength: 200
          x-nitsor-trim: true
        version:
          type: string
          minLength: 1
          maxLength: 200
      required:
        - gates
        - maxTasks
        - roles
        - stages
        - transitions
      additionalProperties: false
      description: >-
        Ids are unique within `roles`, `stages`, `transitions` and `gates`; a
        stage's `requiredRole` names a declared role; only `consensus-read`
        stages declare `readers`, and they must; only `auto-label` stages run by
        a runner declare `runner`; every transition names declared stages; a
        sampling gate below the full rate only enters a stage that judges work
        (`adjudicate`, `consensus-read` or `review`).
    VersionGraphCommit:
      type: object
      properties:
        accountId:
          type: string
          minLength: 1
          maxLength: 200
          x-nitsor-trim: true
        ambiguousBase:
          type: boolean
        authorPrincipalIssuer:
          type: string
          minLength: 1
          maxLength: 200
          x-nitsor-trim: true
        authorPrincipalSubject:
          type: string
          minLength: 1
          maxLength: 200
          x-nitsor-trim: true
        authorPrincipalType:
          type: string
          enum:
            - agent
            - system
            - user
        authorPrincipalName:
          type: string
          minLength: 1
        authorPrincipalEmail:
          type: string
          minLength: 1
        branchId:
          type: string
          minLength: 1
          maxLength: 200
          x-nitsor-trim: true
        commitId:
          $ref: '#/components/schemas/Sha256Digest'
        committedAt:
          $ref: '#/components/schemas/UtcTimestamp'
        contentRoot:
          $ref: '#/components/schemas/Sha256Digest'
        eventRange:
          type: object
          properties:
            fromSeq:
              type: integer
              exclusiveMinimum: 0
            toSeq:
              type: integer
              exclusiveMinimum: 0
          required:
            - fromSeq
            - toSeq
        eventRangeDigest:
          $ref: '#/components/schemas/Sha256Digest'
        kind:
          $ref: '#/components/schemas/VersionGraphCommitKind'
        message:
          type: string
          maxLength: 500
        messageDisplay:
          type: string
        parentCommitIds:
          maxItems: 2
          type: array
          items:
            $ref: '#/components/schemas/Sha256Digest'
        projectId:
          type: string
          minLength: 1
          maxLength: 200
          x-nitsor-trim: true
      required:
        - accountId
        - ambiguousBase
        - authorPrincipalSubject
        - authorPrincipalType
        - branchId
        - commitId
        - committedAt
        - contentRoot
        - eventRange
        - eventRangeDigest
        - kind
        - message
        - parentCommitIds
        - projectId
    NitsorError:
      anyOf:
        - $ref: '#/components/schemas/ErrorAuthorizationDenied'
        - $ref: '#/components/schemas/ErrorValidation'
        - $ref: '#/components/schemas/ErrorNotFound'
        - $ref: '#/components/schemas/ErrorAuth'
        - $ref: '#/components/schemas/ErrorMethodNotAllowed'
        - $ref: '#/components/schemas/ErrorCheckpointRequired'
        - $ref: '#/components/schemas/ErrorManifest'
        - $ref: '#/components/schemas/ErrorDomain'
    WorkflowStage:
      type: object
      properties:
        earlierLabelVisibility:
          $ref: '#/components/schemas/EarlierLabelPolicy'
        earlierLabelEditing:
          $ref: '#/components/schemas/EarlierLabelPolicy'
        execution:
          type: string
          enum:
            - human
            - runner
        id:
          type: string
          minLength: 1
          maxLength: 200
        readers:
          type: integer
          minimum: 2
          maximum: 16
        requiredQualifications:
          maxItems: 16
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 200
        requiredRole:
          type: string
          minLength: 1
          maxLength: 200
        runner:
          $ref: '#/components/schemas/WorkflowRunnerSettings'
        type:
          type: string
          enum:
            - adjudicate
            - annotate
            - auto-label
            - consensus-read
            - review
      required:
        - execution
        - id
        - requiredQualifications
        - type
      additionalProperties: false
    WorkflowRouter:
      type: object
      properties:
        assign:
          $ref: '#/components/schemas/WorkflowRouterAssign'
        capacity:
          type: integer
          minimum: 1
          maximum: 4096
        gate:
          $ref: '#/components/schemas/WorkflowRouterGate'
        handPicking:
          type: string
          enum:
            - allowed
            - in-order-only
        inject:
          anyOf:
            - type: object
              properties:
                goldRateBps:
                  type: integer
                  minimum: 0
                  maximum: 10000
                poolRef:
                  type: string
                  minLength: 1
                  maxLength: 200
              required:
                - goldRateBps
                - poolRef
              additionalProperties: false
            - type: 'null'
        leaseDurationMs:
          type: integer
          minimum: 60000
          maximum: 86400000
        order:
          type: string
          enum:
            - fifo
            - oldest-first
            - priority
            - uncertainty-desc
        wipLimit:
          type: integer
          minimum: 1
          maximum: 4096
      required:
        - assign
        - capacity
        - gate
        - inject
        - leaseDurationMs
        - order
        - wipLimit
      additionalProperties: false
      description: '`wipLimit` never exceeds `capacity`.'
    Sha256Digest:
      type: string
      pattern: ^sha256:([0-9a-f]{64})$
    UtcTimestamp:
      type: string
      format: date-time
      pattern: >-
        ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|[+-]00:00))$
      description: >-
        RFC 3339 timestamp in UTC: the offset is `Z` or `+00:00`; any other
        offset is refused.
    VersionGraphCommitKind:
      type: string
      enum:
        - annotate
        - review
        - rework
        - handback
        - safety
        - merge
        - import
        - branch
        - checkpoint
        - run
    ErrorAuthorizationDenied:
      type: object
      properties:
        requestId:
          $ref: '#/components/schemas/RequestId'
        retryable:
          type: boolean
        reason:
          type: string
          minLength: 1
        code:
          type: string
          const: AUTHORIZATION_DENIED
        decisionId:
          type: string
          minLength: 1
        message:
          type: string
          minLength: 1
        missingScope:
          type: string
          minLength: 1
      required:
        - requestId
        - retryable
        - code
        - message
        - missingScope
    ErrorValidation:
      type: object
      properties:
        requestId:
          $ref: '#/components/schemas/RequestId'
        retryable:
          type: boolean
        reason:
          type: string
          minLength: 1
        code:
          type: string
          const: INVALID_ARGUMENT
        fieldPath:
          type: string
          minLength: 1
        message:
          type: string
          minLength: 1
        remediation:
          type: string
          minLength: 1
      required:
        - requestId
        - retryable
        - code
        - message
    ErrorNotFound:
      type: object
      properties:
        requestId:
          $ref: '#/components/schemas/RequestId'
        retryable:
          type: boolean
        reason:
          type: string
          minLength: 1
        code:
          type: string
          const: ACCOUNT_NOT_FOUND
        message:
          type: string
          minLength: 1
      required:
        - requestId
        - retryable
        - code
        - message
    ErrorAuth:
      type: object
      properties:
        requestId:
          $ref: '#/components/schemas/RequestId'
        retryable:
          type: boolean
        reason:
          type: string
          minLength: 1
        code:
          type: string
          enum:
            - AUTH_REQUIRED
            - AUTH_INVALID_TOKEN
        expiredAt:
          $ref: '#/components/schemas/UtcTimestamp'
        message:
          type: string
          minLength: 1
        remediation:
          type: string
          minLength: 1
      required:
        - requestId
        - retryable
        - code
        - message
        - remediation
    ErrorMethodNotAllowed:
      type: object
      properties:
        requestId:
          $ref: '#/components/schemas/RequestId'
        retryable:
          type: boolean
        reason:
          type: string
          minLength: 1
        code:
          type: string
          const: METHOD_NOT_ALLOWED
        message:
          type: string
          minLength: 1
        remediation:
          type: string
          minLength: 1
      required:
        - requestId
        - retryable
        - code
        - message
        - remediation
    ErrorCheckpointRequired:
      type: object
      properties:
        branchId:
          type: string
          minLength: 1
          maxLength: 200
          x-nitsor-trim: true
        headEventSeq:
          type: integer
          exclusiveMinimum: 0
        lastEventSeq:
          type: integer
          exclusiveMinimum: 0
        maxUncommittedEvents:
          type: number
          const: 256
        requestId:
          $ref: '#/components/schemas/RequestId'
        retryable:
          type: boolean
        reason:
          type: string
          minLength: 1
        code:
          type: string
          const: CHECKPOINT_REQUIRED
        message:
          type: string
          minLength: 1
        remediation:
          type: string
          minLength: 1
      required:
        - branchId
        - headEventSeq
        - lastEventSeq
        - maxUncommittedEvents
        - requestId
        - retryable
        - code
        - message
        - remediation
    ErrorManifest:
      type: object
      properties:
        requestId:
          $ref: '#/components/schemas/RequestId'
        retryable:
          type: boolean
        reason:
          type: string
          minLength: 1
        code:
          type: string
          const: NO_VALID_DICOM_SLICES
        manifest:
          type: array
          items:
            $ref: '#/components/schemas/SourceManifestEntry'
        message:
          type: string
          minLength: 1
        remediation:
          type: string
          minLength: 1
      required:
        - requestId
        - retryable
        - code
        - manifest
        - message
        - remediation
    ErrorDomain:
      type: object
      properties:
        requestId:
          $ref: '#/components/schemas/RequestId'
        retryable:
          type: boolean
        reason:
          type: string
          minLength: 1
        code:
          type: string
          enum:
            - API_ERROR
            - API_UNREACHABLE
            - CORRUPT_DICOM
            - CORRUPT_TIFF_STACK
            - CORRUPT_VGI
            - DATASET_NAME_CONFLICT
            - DATASET_NOT_FOUND
            - DATASET_REVISION_CONFLICT
            - DATASET_VERSION_NOT_FOUND
            - DATASET_VERSION_RESOLVING
            - DATASET_VERSION_NAME_CONFLICT
            - DATASET_HEAD_UNCOMMITTED
            - DATASET_NO_QUALIFYING_COMMIT
            - DATASET_MEMBERSHIP_UNDECLARED
            - DATASET_HARD_MEMBER_MISSING
            - DATASET_HARD_MEMBER_EXCLUDED
            - DATASET_SELECTION_EMPTY
            - DATASET_OBJECT_MISSING
            - DATASET_OBJECT_CHANGED
            - DATASET_MEMBER_TOO_LARGE
            - DATASET_LAYOUT_UNSATISFIABLE
            - DATASET_BUILD_UNAVAILABLE
            - DATASET_BUILD_INVALID
            - DATASET_FREEZE_TIMEOUT
            - DATASET_MANIFEST_HASH_MISMATCH
            - DATASET_READ_SESSION_NOT_FOUND
            - DATASET_READ_SESSION_CLOSED
            - DATASET_VERSION_REVOKED
            - DATASET_VERSION_TOMBSTONED
            - DATASET_VERSION_CANCELLED
            - DUPLICATE_SOP_INSTANCE_UID
            - GEOMETRY_INCONSISTENT
            - GEOMETRY_OUT_OF_RANGE
            - IDEMPOTENCY_CONFLICT
            - INVALID_JSON
            - MISSING_SLICE
            - MIXED_FORMAT_FAMILIES
            - MODEL_RUN_ESTIMATE_CHANGED
            - MODEL_RUN_MULTI_ITEM_UNSUPPORTED
            - MODEL_RUN_SCAN_TOO_LARGE
            - MODEL_RUN_NOT_OFFERED
            - PROJECT_CREATE_FAILED
            - RATE_LIMITED
            - REQUEST_NOT_CANCELLABLE
            - REQUEST_NOT_FOUND
            - REQUEST_REPORT_EXPIRED
            - SERIES_IDENTITY_MISMATCH
            - SLICE_ORDER_INCONSISTENT
            - SOURCE_LIST_FAILED
            - SOURCE_REGISTER_FAILED
            - SOURCE_VERSION_AMBIGUOUS
            - STORAGE_CONNECTION_REGISTER_FAILED
            - STORAGE_CREDENTIAL_ENVIRONMENT_FORBIDDEN
            - STORAGE_CREDENTIAL_HANDLE_CONFLICT
            - STORAGE_CREDENTIAL_HANDLE_INVALID
            - STORAGE_CREDENTIAL_HANDLE_NOT_FOUND
            - STORAGE_CREDENTIAL_HANDLE_REQUIRED
            - STORAGE_CREDENTIAL_PRESIGN_UNSUPPORTED
            - STORAGE_CREDENTIAL_ROLE_MISMATCH
            - STORAGE_CREDENTIAL_TARGET_MISMATCH
            - STORAGE_CREDENTIAL_UNAVAILABLE
            - STORAGE_CUSTOM_HOSTS_NOT_READY
            - STORAGE_OBJECT_CHANGED_DURING_READ
            - STORAGE_OBJECT_NOT_FOUND
            - STORAGE_OBJECT_TOO_LARGE
            - STORAGE_READ_FAILED
            - UNEXPECTED_ERROR
            - UNKNOWN_COMMAND
            - UNSUPPORTED_PIXEL_FORMAT
            - UNSUPPORTED_TRANSFER_SYNTAX
            - UNSUPPORTED_VGI_SCENE
            - UNRECOGNIZED_FORMAT
            - VERSION_GRAPH_OPERATION_FAILED
            - VGI_VOL_MISMATCH
            - TAXONOMY_OPERATION_FAILED
            - WORKFLOW_OPERATION_FAILED
        message:
          type: string
          minLength: 1
        remediation:
          type: string
          minLength: 1
      required:
        - requestId
        - retryable
        - code
        - message
        - remediation
    EarlierLabelPolicy:
      oneOf:
        - $ref: '#/components/schemas/EarlierLabelPolicyNoOne'
        - $ref: '#/components/schemas/EarlierLabelPolicyThisStage'
        - $ref: '#/components/schemas/EarlierLabelPolicyNamedRoles'
      type: object
      discriminator:
        propertyName: kind
        mapping:
          no-one: '#/components/schemas/EarlierLabelPolicyNoOne'
          this-stage: '#/components/schemas/EarlierLabelPolicyThisStage'
          named-roles: '#/components/schemas/EarlierLabelPolicyNamedRoles'
    WorkflowRunnerSettings:
      type: object
      properties:
        agentSubject:
          type: string
          minLength: 1
          maxLength: 200
          x-nitsor-trim: true
        categories:
          minItems: 1
          maxItems: 16
          type: array
          items:
            type: object
            properties:
              boxCategoryId:
                type: string
                minLength: 1
                maxLength: 200
              id:
                type: string
                minLength: 1
                maxLength: 200
            required:
              - id
            additionalProperties: false
          description: >-
            Each category `id` appears once, and no two entries name the same
            `boxCategoryId`.
        promptSource:
          type: string
          enum:
            - points
            - human-box
            - taxonomy-text
      required:
        - agentSubject
        - categories
        - promptSource
      additionalProperties: false
    WorkflowRouterAssign:
      oneOf:
        - $ref: '#/components/schemas/WorkflowRouterAssignManual'
        - $ref: '#/components/schemas/WorkflowRouterAssignRule'
      type: object
      discriminator:
        propertyName: kind
        mapping:
          manual: '#/components/schemas/WorkflowRouterAssignManual'
          rule: '#/components/schemas/WorkflowRouterAssignRule'
    WorkflowRouterGate:
      oneOf:
        - $ref: '#/components/schemas/WorkflowRouterGateAlways'
        - $ref: '#/components/schemas/WorkflowRouterGateUncertaintyAbove'
        - $ref: '#/components/schemas/WorkflowRouterGateSample'
      type: object
      discriminator:
        propertyName: kind
        mapping:
          always: '#/components/schemas/WorkflowRouterGateAlways'
          uncertainty-above: '#/components/schemas/WorkflowRouterGateUncertaintyAbove'
          sample: '#/components/schemas/WorkflowRouterGateSample'
    RequestId:
      type: string
      minLength: 1
      maxLength: 128
      pattern: ^[\x21-\x7e]+$
    SourceManifestEntry:
      type: object
      properties:
        byteSize:
          type: integer
          minimum: 0
        checksum:
          $ref: '#/components/schemas/Sha256Digest'
        contentFingerprint:
          $ref: '#/components/schemas/Sha256Digest'
        errors:
          maxItems: 1
          type: array
          items:
            $ref: '#/components/schemas/IngestIssue'
        etag:
          type: string
          minLength: 1
        etagWeak:
          type: boolean
        instanceNumber:
          type: integer
        objectKey:
          type: string
          minLength: 1
        pixelDataByteOffset:
          type: integer
          minimum: 0
        positionMm:
          type: number
        role:
          type: string
          enum:
            - descriptor
            - voxel-data
        sopInstanceUid:
          type: string
          minLength: 1
        status:
          type: string
          enum:
            - registered
            - rejected
      required:
        - errors
        - objectKey
        - status
    EarlierLabelPolicyNoOne:
      type: object
      properties:
        kind:
          type: string
          const: no-one
      required:
        - kind
      additionalProperties: false
    EarlierLabelPolicyThisStage:
      type: object
      properties:
        kind:
          type: string
          const: this-stage
      required:
        - kind
      additionalProperties: false
    EarlierLabelPolicyNamedRoles:
      type: object
      properties:
        kind:
          type: string
          const: named-roles
        roleIds:
          minItems: 1
          maxItems: 32
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 200
      required:
        - kind
        - roleIds
      additionalProperties: false
    WorkflowRouterAssignManual:
      type: object
      properties:
        kind:
          type: string
          const: manual
      required:
        - kind
      additionalProperties: false
    WorkflowRouterAssignRule:
      type: object
      properties:
        geography:
          type: string
          minLength: 1
          maxLength: 200
        kind:
          type: string
          const: rule
        maxLoad:
          type: integer
          minimum: 0
          maximum: 4096
        strategy:
          type: string
          const: least-loaded
      required:
        - kind
        - maxLoad
        - strategy
      additionalProperties: false
    WorkflowRouterGateAlways:
      type: object
      properties:
        kind:
          type: string
          const: always
      required:
        - kind
      additionalProperties: false
    WorkflowRouterGateUncertaintyAbove:
      type: object
      properties:
        kind:
          type: string
          const: uncertainty-above
        otherwise:
          description: >-
            The stage that tasks this gate declines go to, instead of finishing
            without this stage's review. A task arrives there by the one forward
            transition into that stage on its path, with that transition's
            lease, assignment, capacity, order and known-answer settings, and
            that transition's gate does not run again. Absent, a declined task
            finishes here. The stage must come after this transition's target,
            be entered by one forward transition on that path and sit outside
            any fork, and this transition may not leave the stage where work
            enters or send work back.
          type: string
          minLength: 1
          maxLength: 200
        threshold:
          type: number
          minimum: 0
          maximum: 1
      required:
        - kind
        - threshold
      additionalProperties: false
    WorkflowRouterGateSample:
      type: object
      properties:
        kind:
          type: string
          const: sample
        otherwise:
          description: >-
            The stage that tasks this gate declines go to, instead of finishing
            without this stage's review. A task arrives there by the one forward
            transition into that stage on its path, with that transition's
            lease, assignment, capacity, order and known-answer settings, and
            that transition's gate does not run again. Absent, a declined task
            finishes here. The stage must come after this transition's target,
            be entered by one forward transition on that path and sit outside
            any fork, and this transition may not leave the stage where work
            enters or send work back.
          type: string
          minLength: 1
          maxLength: 200
        rateBasisPoints:
          type: integer
          minimum: 0
          maximum: 10000
      required:
        - kind
        - rateBasisPoints
      additionalProperties: false
    IngestIssue:
      type: object
      properties:
        code:
          $ref: '#/components/schemas/IssueCode'
        fieldPath:
          type: string
        message:
          type: string
          minLength: 1
          maxLength: 250
        remediation:
          type: string
          minLength: 1
          maxLength: 100
      required:
        - code
        - message
        - remediation
    IssueCode:
      type: string
      enum:
        - ACCOUNT_NOT_FOUND
        - API_ERROR
        - API_UNREACHABLE
        - AUTHORIZATION_DENIED
        - AUTH_INVALID_TOKEN
        - AUTH_REQUIRED
        - CHECKPOINT_REQUIRED
        - CORRUPT_VGI
        - CORRUPT_DICOM
        - CORRUPT_TIFF_STACK
        - DATASET_NAME_CONFLICT
        - DATASET_NOT_FOUND
        - DATASET_REVISION_CONFLICT
        - DATASET_VERSION_NOT_FOUND
        - DATASET_VERSION_RESOLVING
        - DATASET_VERSION_NAME_CONFLICT
        - DATASET_HEAD_UNCOMMITTED
        - DATASET_NO_QUALIFYING_COMMIT
        - DATASET_MEMBERSHIP_UNDECLARED
        - DATASET_HARD_MEMBER_MISSING
        - DATASET_HARD_MEMBER_EXCLUDED
        - DATASET_SELECTION_EMPTY
        - DATASET_OBJECT_MISSING
        - DATASET_OBJECT_CHANGED
        - DATASET_MEMBER_TOO_LARGE
        - DATASET_LAYOUT_UNSATISFIABLE
        - DATASET_BUILD_UNAVAILABLE
        - DATASET_BUILD_INVALID
        - DATASET_FREEZE_TIMEOUT
        - DATASET_VERSION_CANCELLED
        - DATASET_MANIFEST_HASH_MISMATCH
        - DATASET_READ_SESSION_NOT_FOUND
        - DATASET_READ_SESSION_CLOSED
        - DATASET_VERSION_REVOKED
        - DATASET_VERSION_TOMBSTONED
        - DUPLICATE_SOP_INSTANCE_UID
        - GEOMETRY_INCONSISTENT
        - GEOMETRY_OUT_OF_RANGE
        - IDEMPOTENCY_CONFLICT
        - INVALID_ARGUMENT
        - INVALID_JSON
        - METHOD_NOT_ALLOWED
        - MISSING_SLICE
        - MIXED_FORMAT_FAMILIES
        - MODEL_RUN_BUDGET_EXHAUSTED
        - MODEL_RUN_ESTIMATE_CHANGED
        - MODEL_RUN_ITEM_LANDS_FROM_JOB
        - MODEL_RUN_ITEM_SETTLED
        - MODEL_RUN_LANDED_LATE
        - MODEL_RUN_MODEL_FAILED
        - MODEL_RUN_MULTI_ITEM_UNSUPPORTED
        - MODEL_RUN_NOT_OFFERED
        - MODEL_RUN_PIN_CHANGED
        - MODEL_RUN_REPLACEMENT_CHANGED
        - MODEL_RUN_REPORT_EXPIRED
        - MODEL_RUN_REQUEST_STOPPING
        - MODEL_RUN_SCAN_TOO_LARGE
        - MODEL_RUN_SOURCE_CHANGED
        - MODEL_RUN_SUPERSEDED
        - MODEL_RUN_TASK_BINDING_LOST
        - MODEL_RUN_TASK_NOT_ELIGIBLE
        - MODEL_RUN_TIME_LIMIT
        - NO_VALID_DICOM_SLICES
        - PROJECT_CREATE_FAILED
        - RATE_LIMITED
        - REQUEST_LANDING_TOO_LARGE
        - REQUEST_NOT_CANCELLABLE
        - REQUEST_NOT_FOUND
        - REQUEST_REPORT_EXPIRED
        - REQUEST_WORKER_EXHAUSTED
        - SERIES_IDENTITY_MISMATCH
        - SERVER_VERSION_INCOMPATIBLE
        - SLICE_ORDER_INCONSISTENT
        - SOURCE_LIST_FAILED
        - SOURCE_REGISTER_FAILED
        - SOURCE_VERSION_AMBIGUOUS
        - STORAGE_CONNECTION_REGISTER_FAILED
        - STORAGE_CREDENTIAL_ENVIRONMENT_FORBIDDEN
        - STORAGE_CREDENTIAL_HANDLE_CONFLICT
        - STORAGE_CREDENTIAL_HANDLE_INVALID
        - STORAGE_CREDENTIAL_HANDLE_NOT_FOUND
        - STORAGE_CREDENTIAL_HANDLE_REQUIRED
        - STORAGE_CREDENTIAL_PRESIGN_UNSUPPORTED
        - STORAGE_CREDENTIAL_ROLE_MISMATCH
        - STORAGE_CREDENTIAL_TARGET_MISMATCH
        - STORAGE_CREDENTIAL_UNAVAILABLE
        - STORAGE_CUSTOM_HOSTS_NOT_READY
        - STORAGE_OBJECT_CHANGED_DURING_READ
        - STORAGE_OBJECT_NOT_FOUND
        - STORAGE_OBJECT_TOO_LARGE
        - STORAGE_READ_FAILED
        - UNEXPECTED_ERROR
        - UNKNOWN_COMMAND
        - UNSUPPORTED_VGI_SCENE
        - UNSUPPORTED_PIXEL_FORMAT
        - UNSUPPORTED_TRANSFER_SYNTAX
        - UNRECOGNIZED_FORMAT
        - VERSION_GRAPH_OPERATION_FAILED
        - VGI_VOL_MISMATCH
        - TAXONOMY_OPERATION_FAILED
        - WORKFLOW_OPERATION_FAILED
  headers:
    RequestId:
      description: The request id every answer carries; echo it when reporting a problem.
      schema:
        type: string
    TokenExpires:
      description: >-
        The instant the credential that made the request stops working, RFC 3339
        in UTC. Sent on every authenticated answer, a refusal after
        authentication included, once the credential has 14 days or fewer left.
        Never sent on a 401 or a 405, or by a route that needs no credential.
      schema:
        type: string
        format: date-time
    RetryAfter:
      description: >-
        Whole seconds to wait before polling an accepted Request or retrying a
        429 refusal.
      schema:
        type: integer
        minimum: 0
  responses:
    NitsorErrorAuthenticated:
      description: >-
        The request was refused. `code` names the refusal; `requestId`
        correlates it.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
        Nitsor-Token-Expires:
          $ref: '#/components/headers/TokenExpires'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NitsorError'
    NitsorError:
      description: >-
        The request was refused. `code` names the refusal; `requestId`
        correlates it.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NitsorError'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        An Agent credential (`nits_…`), or a person token (`nitp_…`) on a
        deployment that enables them. `GET /api/v1/session` names the principal
        a credential proves.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.