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

# Submit job feedback

> Records feedback about the outcome a label produced for a piece of content, or a specific video frame or transcript chunk, in a completed job. Copy GetJobLabels LabelHit fields into the item's target.occurrence to address a video occurrence, or omit occurrence to address the whole result. Feedback is stored one entry per (content or video occurrence, label) pair; submitting feedback for a pair that already has feedback replaces it. actual_outcome is the thresholded section or label result, not a per-frame occurrence score. Available to policy-first and label-first accounts; works on any job in the account, including jobs from `POST /v1/labels/evaluate`.



## OpenAPI

````yaml /openapi.json post /v1/jobs/{jobUuid}/feedback
openapi: 3.0.0
info:
  title: Clavata Public API v1
  description: Endpoints for creating and managing jobs via the Clavata Public API.
  version: 1.0.0
  contact:
    name: Clavata.ai
    url: https://clavata.ai
    email: support@clavata.ai
servers:
  - url: https://gateway.app.clavata.ai:8443
security:
  - Bearer_Token: []
tags:
  - name: Public API
    description: Endpoints for creating and managing jobs via the Clavata Public API.
paths:
  /v1/jobs/{jobUuid}/feedback:
    post:
      tags:
        - Job Feedback
      summary: Submit job feedback
      description: >-
        Records feedback about the outcome a label produced for a piece of
        content, or a specific video frame or transcript chunk, in a completed
        job. Copy GetJobLabels LabelHit fields into the item's target.occurrence
        to address a video occurrence, or omit occurrence to address the whole
        result. Feedback is stored one entry per (content or video occurrence,
        label) pair; submitting feedback for a pair that already has feedback
        replaces it. actual_outcome is the thresholded section or label result,
        not a per-frame occurrence score. Available to policy-first and
        label-first accounts; works on any job in the account, including jobs
        from `POST /v1/labels/evaluate`.
      operationId: GatewayService_SubmitJobFeedback
      parameters:
        - name: jobUuid
          description: job_uuid is the unique identifier of the job the feedback is about
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GatewayServiceSubmitJobFeedbackBody'
        required: true
      responses:
        '200':
          description: A successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1SubmitJobFeedbackResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/rpcStatus'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1GRPCErrorResponse'
        '499':
          description: Precheck Failures (Canceled)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1PrecheckFailureResponse'
        default:
          description: An unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/rpcStatus'
components:
  schemas:
    GatewayServiceSubmitJobFeedbackBody:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/v1JobFeedbackItem'
          description: >-
            The feedback to record. At least one and at most 100 entries. Two
            entries

            resolving to the same content or video occurrence and label are
            rejected.
      required:
        - items
    v1SubmitJobFeedbackResponse:
      type: object
      properties:
        annotations:
          type: array
          items:
            $ref: '#/components/schemas/v1JobAnnotation'
          title: The stored feedback for each submitted entry
    rpcStatus:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
        details:
          type: array
          items:
            $ref: '#/components/schemas/protobufAny'
    v1GRPCErrorResponse:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: A [gRPC status code](https://grpc.io/docs/guides/status-codes/)
          title: gRPC Status Code
          readOnly: true
        message:
          type: string
          description: The human-readable error message
          title: Error Message
          readOnly: true
      title: A gRPC Status response
    v1PrecheckFailureResponse:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: A [gRPC status code](https://grpc.io/docs/guides/status-codes/)
          title: gRPC Status Code
          readOnly: true
        message:
          type: string
          description: The human-readable error message
          title: Error Message
          readOnly: true
        details:
          type: array
          items:
            $ref: '#/components/schemas/v1PrecheckFailure'
          description: An array of objects detailing why the content failed the prechecks.
    v1JobFeedbackItem:
      type: object
      properties:
        target:
          $ref: '#/components/schemas/v1JobFeedbackTarget'
        label:
          type: string
          description: >-
            The label this feedback is about. For policy jobs this is the name
            of the

            policy section, and is required. For label jobs, which evaluate a
            single

            label, it may be omitted or set to the job's label ID.
        expectedOutcome:
          $ref: '#/components/schemas/v1EvaluationResult'
        comment:
          type: string
          description: Why the outcome was wrong. Limited to 10,000 characters.
      description: |-
        JobFeedbackItem is feedback about the outcome one label produced for one
        content item or video occurrence within a job.
      required:
        - expectedOutcome
    v1JobAnnotation:
      type: object
      properties:
        id:
          type: string
          title: The unique identifier of this feedback entry
        jobUuid:
          type: string
          title: The job the feedback is about
        jobResultId:
          type: string
          title: The result within the job that the feedback is about
        target:
          $ref: '#/components/schemas/v1JobFeedbackTarget'
        label:
          type: string
          description: >-
            The resolved label identity: the policy section name for policy
            jobs, or the

            label ID for label jobs.
        labelId:
          type: string
          description: The label ID. Only set for label jobs.
        labelVersionId:
          type: string
          description: >-
            The version of the label that was evaluated. Only set for label
            jobs.
        expectedOutcome:
          $ref: '#/components/schemas/v1EvaluationResult'
        actualOutcome:
          $ref: '#/components/schemas/v1EvaluationResult'
        comment:
          type: string
          title: Why the outcome was wrong
        createdAt:
          type: string
          format: date-time
          title: When the feedback was first submitted
        updatedAt:
          type: string
          format: date-time
          title: When the feedback was last replaced
      description: JobAnnotation is one stored piece of job feedback.
    protobufAny:
      type: object
      properties:
        '@type':
          type: string
      additionalProperties: {}
    v1PrecheckFailure:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/v1PrecheckFailureType'
        message:
          type: string
          title: An error message associated with the failure
        details:
          description: >-
            Details provides Additional about the failure. The shape will be
            different for each failure

            type.
        matchConfidence:
          $ref: '#/components/schemas/v1PrecheckMatchConfidence'
    v1JobFeedbackTarget:
      type: object
      properties:
        contentHash:
          type: string
          description: >-
            job_results.content_hash. Required when the job evaluated more than
            one

            content item. Omit for the single-result case (typical video job).
        occurrence:
          $ref: '#/components/schemas/JobFeedbackTargetOccurrence'
      description: >-
        JobFeedbackTarget names the content item — and optionally the video
        frame or

        transcript chunk within it — that a feedback item is about.
    v1EvaluationResult:
      type: string
      enum:
        - EVALUATION_RESULT_UNSPECIFIED
        - EVALUATION_RESULT_FLAGGED
        - EVALUATION_RESULT_NOT_FLAGGED
      default: EVALUATION_RESULT_UNSPECIFIED
      title: |-
        - EVALUATION_RESULT_FLAGGED: Label flagged this content
         - EVALUATION_RESULT_NOT_FLAGGED: Label did not flag this content
    v1PrecheckFailureType:
      type: string
      enum:
        - PRECHECK_FAILURE_TYPE_UNSPECIFIED
        - PRECHECK_FAILURE_TYPE_NCMEC
        - PRECHECK_FAILURE_TYPE_UNSUPPORTED_IMAGE_FORMAT
        - PRECHECK_FAILURE_TYPE_INVALID_IMAGE
      default: PRECHECK_FAILURE_TYPE_UNSPECIFIED
      description: |2-
         - PRECHECK_FAILURE_TYPE_UNSPECIFIED: The precheck failure type is not specified
         - PRECHECK_FAILURE_TYPE_NCMEC: The content has been identified as CSAM due to its hash matching an entry in the NCMEC database.
         - PRECHECK_FAILURE_TYPE_UNSUPPORTED_IMAGE_FORMAT: The image format is not supported.
         - PRECHECK_FAILURE_TYPE_INVALID_IMAGE: The provided image is invalid or corrupted.
    v1PrecheckMatchConfidence:
      type: string
      enum:
        - PRECHECK_MATCH_CONFIDENCE_UNSPECIFIED
        - PRECHECK_MATCH_CONFIDENCE_EXACT
        - PRECHECK_MATCH_CONFIDENCE_HIGH
        - PRECHECK_MATCH_CONFIDENCE_MEDIUM
        - PRECHECK_MATCH_CONFIDENCE_LOW
      default: PRECHECK_MATCH_CONFIDENCE_UNSPECIFIED
      description: |2-
         - PRECHECK_MATCH_CONFIDENCE_UNSPECIFIED: Default / legacy / non-CSAM. Not a customer-facing confidence tier.
         - PRECHECK_MATCH_CONFIDENCE_EXACT: Exact match (NCMEC direct md5/sha1 hash lookup). Highest confidence; customers may auto-enforce.
         - PRECHECK_MATCH_CONFIDENCE_HIGH: PhotoDNA perceptual match, closest distance band (near-duplicate).
         - PRECHECK_MATCH_CONFIDENCE_MEDIUM: PhotoDNA perceptual match, middle distance band (moderate similarity).
         - PRECHECK_MATCH_CONFIDENCE_LOW: PhotoDNA perceptual match, farthest distance band (loose similarity; review recommended).
    JobFeedbackTargetOccurrence:
      type: object
      properties:
        modality:
          $ref: '#/components/schemas/v1Modality'
        startMs:
          type: string
          format: int64
          description: |-
            Milliseconds from the start of the media. Frames are point-in-time;
            chunks use the chunk's start bound. 0 is a valid start.
        endMs:
          type: string
          format: int64
          description: Set for ranged hits (audio chunks); unset for point-in-time frames.
      description: |-
        Occurrence is a video frame or transcript chunk, identified the way
        GetJobLabels reports it.
      required:
        - modality
        - startMs
    v1Modality:
      type: string
      enum:
        - MODALITY_UNSPECIFIED
        - MODALITY_VIDEO
        - MODALITY_AUDIO
        - MODALITY_IMAGE
        - MODALITY_TEXT
      default: MODALITY_UNSPECIFIED
  securitySchemes:
    Bearer_Token:
      type: http
      scheme: bearer
      bearerFormat: JWT

````

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