> ## 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.

# Read the workflow definition



## OpenAPI

````yaml /openapi.json get /api/v1/workflow/definition
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:
    get:
      tags:
        - workflow
      summary: Read the workflow definition
      operationId: workflowDefinition
      parameters:
        - in: query
          name: branchId
          schema:
            type: string
            minLength: 1
            maxLength: 200
            x-nitsor-trim: true
          required: true
        - in: query
          name: projectId
          schema:
            type: string
            minLength: 1
            maxLength: 200
            x-nitsor-trim: true
          required: true
      responses:
        '200':
          description: Read 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/WorkflowDefinitionResponse'
        '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:
  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
  schemas:
    WorkflowDefinitionResponse:
      type: object
      properties:
        definition:
          anyOf:
            - $ref: '#/components/schemas/WorkflowDefinitionOutput'
            - type: 'null'
        workflowVersion:
          anyOf:
            - type: string
            - type: 'null'
      required:
        - definition
        - workflowVersion
    WorkflowDefinitionOutput:
      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
        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
        stages:
          minItems: 1
          maxItems: 32
          type: array
          items:
            $ref: '#/components/schemas/WorkflowStageOutput'
        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/WorkflowRouterOutput'
              to:
                type: string
                minLength: 1
                maxLength: 200
              when:
                type: string
                minLength: 1
                maxLength: 500
            required:
              - from
              - id
              - router
              - to
              - when
        label:
          type: string
          minLength: 1
          maxLength: 200
          x-nitsor-trim: true
        version:
          type: string
          minLength: 1
          maxLength: 200
      required:
        - gates
        - maxTasks
        - roles
        - stages
        - transitions
      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`).
    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'
    WorkflowStageOutput:
      type: object
      properties:
        earlierLabelVisibility:
          $ref: '#/components/schemas/EarlierLabelPolicyOutput'
        earlierLabelEditing:
          $ref: '#/components/schemas/EarlierLabelPolicyOutput'
        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/WorkflowRunnerSettingsOutput'
        type:
          type: string
          enum:
            - adjudicate
            - annotate
            - auto-label
            - consensus-read
            - review
      required:
        - execution
        - id
        - requiredQualifications
        - type
    WorkflowRouterOutput:
      type: object
      properties:
        assign:
          $ref: '#/components/schemas/WorkflowRouterAssignOutput'
        capacity:
          type: integer
          minimum: 1
          maximum: 4096
        gate:
          $ref: '#/components/schemas/WorkflowRouterGateOutput'
        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
            - 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
      description: '`wipLimit` never exceeds `capacity`.'
    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
    EarlierLabelPolicyOutput:
      oneOf:
        - $ref: '#/components/schemas/EarlierLabelPolicyNoOneOutput'
        - $ref: '#/components/schemas/EarlierLabelPolicyThisStageOutput'
        - $ref: '#/components/schemas/EarlierLabelPolicyNamedRolesOutput'
      type: object
      discriminator:
        propertyName: kind
        mapping:
          no-one: '#/components/schemas/EarlierLabelPolicyNoOneOutput'
          this-stage: '#/components/schemas/EarlierLabelPolicyThisStageOutput'
          named-roles: '#/components/schemas/EarlierLabelPolicyNamedRolesOutput'
    WorkflowRunnerSettingsOutput:
      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
          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
    WorkflowRouterAssignOutput:
      oneOf:
        - $ref: '#/components/schemas/WorkflowRouterAssignManualOutput'
        - $ref: '#/components/schemas/WorkflowRouterAssignRuleOutput'
      type: object
      discriminator:
        propertyName: kind
        mapping:
          manual: '#/components/schemas/WorkflowRouterAssignManualOutput'
          rule: '#/components/schemas/WorkflowRouterAssignRuleOutput'
    WorkflowRouterGateOutput:
      oneOf:
        - $ref: '#/components/schemas/WorkflowRouterGateAlwaysOutput'
        - $ref: '#/components/schemas/WorkflowRouterGateUncertaintyAboveOutput'
        - $ref: '#/components/schemas/WorkflowRouterGateSampleOutput'
      type: object
      discriminator:
        propertyName: kind
        mapping:
          always: '#/components/schemas/WorkflowRouterGateAlwaysOutput'
          uncertainty-above: '#/components/schemas/WorkflowRouterGateUncertaintyAboveOutput'
          sample: '#/components/schemas/WorkflowRouterGateSampleOutput'
    RequestId:
      type: string
      minLength: 1
      maxLength: 128
      pattern: ^[\x21-\x7e]+$
    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.
    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
    EarlierLabelPolicyNoOneOutput:
      type: object
      properties:
        kind:
          type: string
          const: no-one
      required:
        - kind
    EarlierLabelPolicyThisStageOutput:
      type: object
      properties:
        kind:
          type: string
          const: this-stage
      required:
        - kind
    EarlierLabelPolicyNamedRolesOutput:
      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
    WorkflowRouterAssignManualOutput:
      type: object
      properties:
        kind:
          type: string
          const: manual
      required:
        - kind
    WorkflowRouterAssignRuleOutput:
      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
    WorkflowRouterGateAlwaysOutput:
      type: object
      properties:
        kind:
          type: string
          const: always
      required:
        - kind
    WorkflowRouterGateUncertaintyAboveOutput:
      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
    WorkflowRouterGateSampleOutput:
      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
    Sha256Digest:
      type: string
      pattern: ^sha256:([0-9a-f]{64})$
    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
  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.