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

# Create proof review

> Requires eval:write and the designated reviewer with self-review restrictions. Optional assessmentBinding records an explicit scoped outcome using canonical subject pins. Human evidence, configuration and provenance review, and every runtime assessment, require the reviewer's authenticated browser session; API keys cannot self-certify these assessments. Principal identity is derived by the server, never accepted in JSON. Legacy reviews remain valid without scoped fitness. Evidence acceptance does not establish control effectiveness, standards conformance or release authorization.



## OpenAPI

````yaml /api-reference/openapi.json post /api/proof/risks-and-controls/submissions/{submissionId}/review
openapi: 3.1.2
info:
  title: EvalGate API
  version: 18.13.0
  description: EvalGate API. See docs/api-contract.md for stability commitments.
servers:
  - url: https://evalgate.com
    description: Production
  - url: http://localhost:3000
    description: Local
security: []
paths:
  /api/proof/risks-and-controls/submissions/{submissionId}/review:
    post:
      tags:
        - proof
      summary: Create proof review
      description: >-
        Requires eval:write and the designated reviewer with self-review
        restrictions. Optional assessmentBinding records an explicit scoped
        outcome using canonical subject pins. Human evidence, configuration and
        provenance review, and every runtime assessment, require the reviewer's
        authenticated browser session; API keys cannot self-certify these
        assessments. Principal identity is derived by the server, never accepted
        in JSON. Legacy reviews remain valid without scoped fitness. Evidence
        acceptance does not establish control effectiveness, standards
        conformance or release authorization.
      operationId: post_proof_risks_and_controls_submissions_submissionId_review
      parameters:
        - name: submissionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/PostApiProofRisksAndControlsSubmissionsSubmissionIdReviewRequest
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/PostApiProofRisksAndControlsSubmissionsSubmissionIdReviewResponse200ApplicationJson
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      security:
        - bearerAuth: []
components:
  schemas:
    PostApiProofRisksAndControlsSubmissionsSubmissionIdReviewRequest:
      type: object
      properties:
        status:
          oneOf:
            - type: string
              enum:
                - accepted_for_requirement
            - type: string
              enum:
                - needs_clarification
            - type: string
              enum:
                - rejected
        reviewerNote:
          type: string
        expectedRequestWriteRevision:
          type: number
        assessmentBinding:
          type: object
          properties:
            profileId:
              type: string
            expectedProfileDigest:
              type: string
            evidenceItemId:
              type: number
            expectedContentHash:
              type: string
            method:
              oneOf:
                - type: string
                  enum:
                    - adversarial_probe
                - type: string
                  enum:
                    - configuration_review
                - type: string
                  enum:
                    - deterministic_assertion
                - type: string
                  enum:
                    - human_evidence_review
                - type: string
                  enum:
                    - provenance_artifact_review
                - type: string
                  enum:
                    - resilience_exercise
                - type: string
                  enum:
                    - trace_telemetry_requirement
            outcome:
              oneOf:
                - type: string
                  enum:
                    - not_established
                - type: string
                  enum:
                    - not_supported
                - type: string
                  enum:
                    - partially_supported
                - type: string
                  enum:
                    - supported
            subject:
              oneOf:
                - type: object
                  properties:
                    kind:
                      type: string
                      enum:
                        - evaluation_run
                    runId:
                      type: number
                    expectedManifestHash:
                      type: string
                    role:
                      type: string
                      enum:
                        - evaluation_harness
                  additionalProperties: false
                  required:
                    - kind
                    - runId
                    - expectedManifestHash
                    - role
                - type: object
                  properties:
                    kind:
                      type: string
                      enum:
                        - knowledge_document
                    documentId:
                      type: number
                    expectedDocumentHash:
                      type: string
                  additionalProperties: false
                  required:
                    - kind
                    - documentId
                    - expectedDocumentHash
                - type: object
                  properties:
                    kind:
                      type: string
                      enum:
                        - runtime_version
                    runtimeVersionId:
                      type: number
                    expectedConfigurationHash:
                      type: string
                  additionalProperties: false
                  required:
                    - kind
                    - runtimeVersionId
                    - expectedConfigurationHash
          additionalProperties: false
          required:
            - profileId
            - expectedProfileDigest
            - evidenceItemId
            - expectedContentHash
            - method
            - outcome
            - subject
      additionalProperties: false
      required:
        - status
        - reviewerNote
        - expectedRequestWriteRevision
    PostApiProofRisksAndControlsSubmissionsSubmissionIdReviewResponse200ApplicationJson:
      type: object
      properties:
        submission:
          type: object
          properties:
            id:
              type: number
            organizationId:
              $ref: '#/components/schemas/OrganizationId'
            requestId:
              type: number
            revision:
              type: number
            submitterUserId:
              oneOf:
                - type: 'null'
                - type: string
            submitterKind:
              type: string
            guestInviteId:
              oneOf:
                - type: 'null'
                - type: number
            explanation:
              type: string
            status:
              type: string
            reviewerNote:
              oneOf:
                - type: 'null'
                - type: string
            supersedesSubmissionId:
              oneOf:
                - type: 'null'
                - type: number
            createdAt:
              type: string
              format: date-time
            updatedAt:
              type: string
              format: date-time
          additionalProperties: false
          required:
            - id
            - organizationId
            - requestId
            - revision
            - submitterUserId
            - submitterKind
            - guestInviteId
            - explanation
            - status
            - reviewerNote
            - supersedesSubmissionId
            - createdAt
            - updatedAt
        acceptedForRequirementDoesNotImplyControlEffective:
          type: boolean
          enum:
            - true
      additionalProperties: false
      required:
        - submission
        - acceptedForRequirementDoesNotImplyControlEffective
    OrganizationId:
      type: string
      format: uuid
    ApiError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - UNAUTHORIZED
                - FORBIDDEN
                - NOT_FOUND
                - INVALID_REFERENCE
                - VALIDATION_ERROR
                - RATE_LIMITED
                - CONFLICT
                - INTERNAL_ERROR
                - SERVICE_UNAVAILABLE
                - QUOTA_EXCEEDED
                - FEATURE_LIMIT_REACHED
                - NO_ORG_MEMBERSHIP
                - SHARE_REVOKED
                - SHARE_EXPIRED
                - SHARE_UNAVAILABLE
                - PROVIDER_KEY_MISSING
                - PROVIDER_KEY_EXPIRED
                - PROVIDER_RATE_LIMITED
                - PROVIDER_UNAUTHORIZED
                - PROVIDER_UNAVAILABLE
                - AGENT_HANDOFF_INVALID
                - AGENT_HANDOFF_EXPIRED
                - AGENT_HANDOFF_DENIED
                - AGENT_HANDOFF_CONSUMED
                - PAYLOAD_TOO_LARGE
                - METHOD_NOT_ALLOWED
            message:
              type: string
            details: {}
            requestId:
              type: string
              format: uuid
            redaction:
              type: object
              properties:
                applied:
                  type: boolean
                  enum:
                    - true
                fieldCount:
                  type: integer
                  minimum: 0
                secretCount:
                  type: integer
                  minimum: 0
              required:
                - applied
                - fieldCount
                - secretCount
          required:
            - code
            - message
      required:
        - error
  responses:
    ValidationError:
      description: Validation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
      headers:
        RateLimit-Limit:
          description: Quota in requests for the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Remaining:
          description: Remaining requests in the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Reset:
          description: Reset delay in seconds (not a Unix timestamp).
          schema:
            type: integer
            minimum: 1
        X-RateLimit-Limit:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Remaining:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Reset:
          description: Legacy reset timestamp in Unix milliseconds.
          schema:
            type: integer
            minimum: 0
        RateLimit-Policy:
          description: IETF HTTPAPI structured quota policy (work in progress).
          schema:
            type: string
        RateLimit:
          description: >-
            IETF HTTPAPI structured remaining quota and reset delay (work in
            progress).
          schema:
            type: string
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
      headers:
        RateLimit-Limit:
          description: Quota in requests for the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Remaining:
          description: Remaining requests in the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Reset:
          description: Reset delay in seconds (not a Unix timestamp).
          schema:
            type: integer
            minimum: 1
        X-RateLimit-Limit:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Remaining:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Reset:
          description: Legacy reset timestamp in Unix milliseconds.
          schema:
            type: integer
            minimum: 0
        RateLimit-Policy:
          description: IETF HTTPAPI structured quota policy (work in progress).
          schema:
            type: string
        RateLimit:
          description: >-
            IETF HTTPAPI structured remaining quota and reset delay (work in
            progress).
          schema:
            type: string
        WWW-Authenticate:
          description: >-
            Bearer challenge. Agent-facing routes include the RFC 9728
            resource_metadata URL.
          schema:
            type: string
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
      headers:
        RateLimit-Limit:
          description: Quota in requests for the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Remaining:
          description: Remaining requests in the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Reset:
          description: Reset delay in seconds (not a Unix timestamp).
          schema:
            type: integer
            minimum: 1
        X-RateLimit-Limit:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Remaining:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Reset:
          description: Legacy reset timestamp in Unix milliseconds.
          schema:
            type: integer
            minimum: 0
        RateLimit-Policy:
          description: IETF HTTPAPI structured quota policy (work in progress).
          schema:
            type: string
        RateLimit:
          description: >-
            IETF HTTPAPI structured remaining quota and reset delay (work in
            progress).
          schema:
            type: string
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
      headers:
        RateLimit-Limit:
          description: Quota in requests for the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Remaining:
          description: Remaining requests in the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Reset:
          description: Reset delay in seconds (not a Unix timestamp).
          schema:
            type: integer
            minimum: 1
        X-RateLimit-Limit:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Remaining:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Reset:
          description: Legacy reset timestamp in Unix milliseconds.
          schema:
            type: integer
            minimum: 0
        RateLimit-Policy:
          description: IETF HTTPAPI structured quota policy (work in progress).
          schema:
            type: string
        RateLimit:
          description: >-
            IETF HTTPAPI structured remaining quota and reset delay (work in
            progress).
          schema:
            type: string
    Conflict:
      description: Conflict
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
      headers:
        RateLimit-Limit:
          description: Quota in requests for the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Remaining:
          description: Remaining requests in the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Reset:
          description: Reset delay in seconds (not a Unix timestamp).
          schema:
            type: integer
            minimum: 1
        X-RateLimit-Limit:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Remaining:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Reset:
          description: Legacy reset timestamp in Unix milliseconds.
          schema:
            type: integer
            minimum: 0
        RateLimit-Policy:
          description: IETF HTTPAPI structured quota policy (work in progress).
          schema:
            type: string
        RateLimit:
          description: >-
            IETF HTTPAPI structured remaining quota and reset delay (work in
            progress).
          schema:
            type: string
    RateLimited:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
      headers:
        RateLimit-Limit:
          description: Quota in requests for the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Remaining:
          description: Remaining requests in the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Reset:
          description: Reset delay in seconds (not a Unix timestamp).
          schema:
            type: integer
            minimum: 1
        X-RateLimit-Limit:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Remaining:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Reset:
          description: Legacy reset timestamp in Unix milliseconds.
          schema:
            type: integer
            minimum: 0
        RateLimit-Policy:
          description: IETF HTTPAPI structured quota policy (work in progress).
          schema:
            type: string
        RateLimit:
          description: >-
            IETF HTTPAPI structured remaining quota and reset delay (work in
            progress).
          schema:
            type: string
        Retry-After:
          description: Delay in seconds before retrying when present.
          schema:
            type: integer
            minimum: 1
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
      headers:
        RateLimit-Limit:
          description: Quota in requests for the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Remaining:
          description: Remaining requests in the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Reset:
          description: Reset delay in seconds (not a Unix timestamp).
          schema:
            type: integer
            minimum: 1
        X-RateLimit-Limit:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Remaining:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Reset:
          description: Legacy reset timestamp in Unix milliseconds.
          schema:
            type: integer
            minimum: 0
        RateLimit-Policy:
          description: IETF HTTPAPI structured quota policy (work in progress).
          schema:
            type: string
        RateLimit:
          description: >-
            IETF HTTPAPI structured remaining quota and reset delay (work in
            progress).
          schema:
            type: string
    ServiceUnavailable:
      description: Service unavailable
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
      headers:
        RateLimit-Limit:
          description: Quota in requests for the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Remaining:
          description: Remaining requests in the active window.
          schema:
            type: integer
            minimum: 0
        RateLimit-Reset:
          description: Reset delay in seconds (not a Unix timestamp).
          schema:
            type: integer
            minimum: 1
        X-RateLimit-Limit:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Remaining:
          schema:
            type: integer
            minimum: 0
        X-RateLimit-Reset:
          description: Legacy reset timestamp in Unix milliseconds.
          schema:
            type: integer
            minimum: 0
        RateLimit-Policy:
          description: IETF HTTPAPI structured quota policy (work in progress).
          schema:
            type: string
        RateLimit:
          description: >-
            IETF HTTPAPI structured remaining quota and reset delay (work in
            progress).
          schema:
            type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: EvalGate API key
      description: >-
        Organization-scoped EvalGate API key. Discover the supported agent
        scopes at /.well-known/oauth-protected-resource. Per-operation grants
        are listed in x-evalgate-required-scopes; OpenAPI bearer security
        requirement arrays remain empty as required for non-OAuth schemes.
      x-evalgate-scopes-supported:
        - eval:read
        - eval:write
        - objectives:read
        - objectives:write
        - runs:read
        - runs:write
        - traces:read
        - traces:write
        - exports:download
        - reports:write
        - prompt:publish
        - scorer:publish
        - red_team:read
        - red_team:run
        - red_team:approve
        - docs:read
        - agent:read
        - agent:execute
        - resources:read
        - resources:write
        - contexts:read
        - contexts:write
        - observations:write
        - checks:read
        - checks:run
        - standards:read
        - standards:write
        - standards:approve
        - grants:read
        - grants:write
        - admin:keys
        - admin:workspace
        - admin:org
      x-evalgate-protected-resource-metadata: https://www.evalgate.com/.well-known/oauth-protected-resource

````

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