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

# Poll a video signing job

> Status of an asynchronous video signing job. On `completed`, a fresh time-limited
download link is minted for the signed copy on every call. Jobs are scoped to your
tenant; another tenant's job is simply not found. Not billed. Requires the
`provenance:sign:invoke` key scope.




## OpenAPI

````yaml /openapi/zebratruth-v1.yaml get /media/provenance/jobs/{jobId}
openapi: 3.1.0
info:
  title: ZebraTruth Compliance API
  version: 1.0.0
  description: >
    AI-powered compliance checking for advertising content. Check text and
    images against

    jurisdiction laws, platform policies, and rights clearance requirements.
    Results include

    embeddable annotations mapped to content locations (text spans, video
    timestamps, image regions).
  contact:
    name: ZebraTruth Support
    email: support@zebratruth.ai
    url: https://developers.zebratruth.ai
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
  - url: https://api.zebratruth.ai/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Video Compliance
    description: >
      **Primary endpoint.** Async compliance analysis for video ads. 3-step
      flow:

      get an upload URL, upload the video bytes, submit for analysis. Poll or

      receive an HMAC-signed webhook with the report. Returns timestamped

      findings citing stable evidence IDs (`audio_NNN`, `frame_NNN`, `ocr_NNN`,

      `signal_NNN`). 3-180 second videos. mp4 / webm /

      quicktime. Built for ad agencies and creators.
  - name: Authentication
    description: Validate API keys and check account status
  - name: Compliance
    description: >-
      Run compliance checks on text + image content (sync). For video, use the
      Video Compliance endpoints above.
  - name: Agents
    description: Discover and invoke individual compliance agents
  - name: Jobs
    description: Poll async job status and view execution traces
  - name: Reports
    description: Retrieve and replay compliance reports
  - name: Observability
    description: Request logs and webhook delivery status
  - name: Billing
    description: Subscriptions, plan changes, and credit balance
  - name: Documents
    description: Extract text from PDF and Word documents before or as part of a check
  - name: Check History
    description: List and retrieve past compliance checks for the workspace
  - name: Provenance
    description: Inspect and sign Content Credentials (C2PA) on images and video
  - name: Corpus
    description: >-
      Review queue for proposed changes to the governed legal corpus (dashboard
      session)
  - name: Webhooks
    description: Saved webhook endpoints (dashboard session) and delivery logs
paths:
  /media/provenance/jobs/{jobId}:
    get:
      tags:
        - Provenance
      summary: Poll a video signing job
      description: >
        Status of an asynchronous video signing job. On `completed`, a fresh
        time-limited

        download link is minted for the signed copy on every call. Jobs are
        scoped to your

        tenant; another tenant's job is simply not found. Not billed. Requires
        the

        `provenance:sign:invoke` key scope.
      operationId: getProvenanceSignJob
      parameters:
        - name: jobId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Job status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProvenanceSignJob'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: '`data.code`: `job_not_found`.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CodedError'
        '503':
          $ref: '#/components/responses/ServiceUnavailableCoded'
components:
  schemas:
    ProvenanceSignJob:
      type: object
      required:
        - jobId
        - status
        - createdAt
        - source
        - declared
        - signerId
      properties:
        jobId:
          type: string
        status:
          type: string
          enum:
            - queued
            - running
            - completed
            - failed
          description: >-
            `queued` → `running` → `completed` or `failed`. Terminal states
            never change.
        createdAt:
          type: string
          format: date-time
        startedAt:
          type: string
          format: date-time
        completedAt:
          type: string
          format: date-time
        source:
          type: object
          properties:
            blobPath:
              type: string
            sha256:
              type: string
            priorC2paStatus:
              $ref: '#/components/schemas/C2paStatus'
        declared:
          type: object
          properties:
            digitalSourceType:
              $ref: '#/components/schemas/DigitalSourceType'
        signerId:
          type: string
        signed:
          type: object
          description: >-
            Present when `status` is `completed`. `downloadUrl` is minted per
            request and never stored.
          properties:
            blobPath:
              type: string
            downloadUrl:
              type: string
              format: uri
            expiresAt:
              type: string
              format: date-time
            byteSize:
              type: integer
            sha256:
              type: string
        c2pa:
          type: object
          properties:
            status:
              allOf:
                - $ref: '#/components/schemas/C2paStatus'
              nullable: true
        complianceGate:
          type: object
          properties:
            enforced:
              type: boolean
            note:
              type: string
        error:
          type: object
          description: Present when `status` is `failed`.
          properties:
            code:
              type: string
              enum:
                - signer_not_found
                - signer_not_active
                - asset_unavailable
                - unsupported_container
                - already_signed
                - existing_invalid_manifest
                - remote_signer_failed
                - signing_unavailable
                - signing_failed
                - verification_failed
                - authority_revoked
                - charged_but_output_withheld_after_revocation
            message:
              type: string
    CodedError:
      type: object
      description: >
        Standard error envelope. `data.code` is the stable discriminator to
        branch on;

        `statusMessage` is the human-readable reason. Unless a response
        documents extra

        named fields, `data` is reduced to `{ code }` before it is sent.
      required:
        - statusCode
        - message
      properties:
        error:
          type: boolean
          example: true
        url:
          type: string
          format: uri
        statusCode:
          type: integer
        statusMessage:
          type: string
        message:
          type: string
        data:
          type: object
          required:
            - code
          properties:
            code:
              type: string
              example: review_scope_not_enabled
          additionalProperties: true
    C2paStatus:
      type: string
      enum:
        - present_trusted
        - present_untrusted
        - present_invalid
        - absent
        - unsupported
        - inspection_failed
      description: >
        `present_trusted`: a valid manifest signed by a trusted signer.
        `present_untrusted`:

        valid manifest, signer not on the trust list. `present_invalid`: a
        manifest is present

        but fails validation. `absent`: no manifest. `unsupported`: the format
        cannot carry one.

        `inspection_failed`: the inspection itself errored.
    DigitalSourceType:
      type: string
      enum:
        - digitalCapture
        - computationalCapture
        - humanEdits
        - minorHumanEdits
        - screenCapture
        - digitalArt
        - softwareImage
        - composite
        - trainedAlgorithmicMedia
        - compositeWithTrainedAlgorithmicMedia
        - algorithmicallyEnhanced
        - algorithmicMedia
      description: >
        The IPTC digital source type declared in the signed manifest.
        `trainedAlgorithmicMedia`,

        `compositeWithTrainedAlgorithmicMedia`, `algorithmicMedia` and
        `algorithmicallyEnhanced`

        indicate generative AI.
  responses:
    Unauthorized:
      description: |
        Invalid, missing, or expired API key. Standard error envelope —
        read `message` for the human-readable reason.
      content:
        application/json:
          schema:
            type: object
            description: Standard error envelope.
            required:
              - statusCode
              - message
            properties:
              error:
                type: boolean
                example: true
              url:
                type: string
                format: uri
                example: https://api.zebratruth.ai/v1/whoami
              statusCode:
                type: integer
                example: 401
              statusMessage:
                type: string
                example: Invalid API key
              message:
                type: string
                description: Canonical human-readable reason — pattern-match on this field.
                example: Invalid API key
    ServiceUnavailableCoded:
      description: >-
        A dependency is unavailable. `data.code` says which; `retryable` is
        `true` when a retry is sensible.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CodedError'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: |
        API key starting with `zt_live_` (production) or `zt_test_` (sandbox).
        Get your key at https://developers.zebratruth.ai

````

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