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

# Judge a workflow without creating a job — by served name, or as immutable snapshot bytes

> Runs the same admission as POST /v1/jobs (ADR-131 · both forms) over the exact request body, and creates nothing.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/check
openapi: 3.1.0
info:
  description: >-
    Authenticated loopback remote execution and declarative schedules.
    Artifacts, schedule list/delete/trigger/backfill, /v1/arm, and POST /v1/run
    are absent.
  title: nika serve
  version: 0.120.0
servers:
  - url: http://127.0.0.1
security:
  - bearerAuth: []
paths:
  /v1/check:
    post:
      summary: >-
        Judge a workflow without creating a job — by served name, or as
        immutable snapshot bytes
      description: >-
        Runs the same admission as POST /v1/jobs (ADR-131 · both forms) over the
        exact request body, and creates nothing.
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/CheckByName'
                - $ref: '#/components/schemas/ExecutionSnapshot'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SnapshotValidationAck'
          description: >-
            Compact snapshot validation acknowledgement, not the full engine
            check report
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Error envelope
        '408':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Request deadline
        '413':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Encoded body or decoded snapshot resource limit
        '415':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Content-Type or Content-Encoding refused
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Malformed, unsupported, tampered, or semantically refused snapshot
components:
  schemas:
    CheckByName:
      additionalProperties: false
      description: >-
        Source-only Check by served name. Required launch inputs may remain
        unsupplied; caller inputs are accepted only on POST /v1/jobs and are
        refused here. Check does not execute an access plan.
      properties:
        access:
          description: >-
            Access pin, same vocabulary as `--access` (class or harness id). A
            pin never silently substitutes a metered seat.
          maxLength: 64
          minLength: 1
          type: string
        workflow:
          maxLength: 4096
          minLength: 1
          type: string
      required:
        - workflow
      type: object
    ExecutionSnapshot:
      additionalProperties: false
      description: >-
        Immutable byte-owned execution world — the body `nika check <file>
        --json --sdk-snapshot` prints (the engine is the one producer; a client
        never hashes). Unit bytes are canonical lowercase hexadecimal. `digest`
        and every unit `digest` are OPTIONAL caller-supplied integrity digests
        (canonical lowercase SHA-256 · a content assertion, never a signature):
        absent, the resident computes them and the receipt carries the result;
        present, they must match the bytes or the request is refused as
        `snapshot_tampered`. The decoded unit aggregate is limited to 16 MiB and
        the complete encoded request to 33 MiB. This object is the request body
        itself, not a path-bearing wrapper.
      properties:
        digest:
          description: >-
            Optional caller-supplied integrity digest of the world (never a
            signature)
          pattern: ^[0-9a-f]{64}$
          type: string
        format_version:
          const: 1
          type: integer
        root:
          maxLength: 4096
          minLength: 1
          type: string
        units:
          items:
            additionalProperties: false
            properties:
              bytes_hex:
                pattern: ^(?:[0-9a-f]{2})*$
                type: string
              digest:
                description: >-
                  Optional caller-supplied integrity digest of the unit (never a
                  signature)
                pattern: ^[0-9a-f]{64}$
                type: string
              kind:
                description: >-
                  0 root (the admitted workflow) · 1 child (a transitively
                  invoked workflow) · 2 skill (an Agent Skill document) · 3
                  import (an opaque import the caller supplied)
                maximum: 3
                minimum: 0
                type: integer
              path:
                maxLength: 4096
                minLength: 1
                type: string
            required:
              - path
              - kind
              - bytes_hex
            type: object
          maxItems: 256
          type: array
      required:
        - format_version
        - root
        - units
      type: object
    SnapshotValidationAck:
      additionalProperties: false
      description: >-
        Compact remote acknowledgement that the exact snapshot was revalidated.
        This is not the engine's public full check report; SDK callers retain
        the engine-owned report captured with the snapshot and return it only
        after this acknowledgement succeeds.
      properties:
        root:
          minLength: 1
          type: string
        snapshot_digest:
          pattern: ^[0-9a-f]{64}$
          type: string
        status:
          const: accepted
          type: string
        units:
          minimum: 1
          type: integer
      required:
        - status
        - snapshot_digest
        - root
        - units
      type: object
    Error:
      additionalProperties: false
      properties:
        error:
          additionalProperties: false
          properties:
            code:
              type: string
            message:
              type: string
          required:
            - code
            - message
          type: object
      required:
        - error
      type: object
  securitySchemes:
    bearerAuth:
      description: 'Exactly one Authorization: Bearer value from the token file'
      scheme: bearer
      type: http

````