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

# Get everything recorded as proof of a pull request

> The captures of every task that published this pull request, and every review run against it with the verdict it posted, the head it reviewed and its own captures. Captures are the same task media rows /tasks/{taskID}/media serves, newest first, each carrying the head it was recorded against to compare with the pull request's current head. Nothing is fetched from GitHub. Requires membership in the owning organization of a task linked to this pull request — the task that published it or a task that reviewed it — and current GitHub access to the repository. 404 covers an unknown pull request, one linked to no organization the caller belongs to, and one whose GitHub access the caller has lost; the three are deliberately indistinguishable.



## OpenAPI

````yaml api-reference/openapi.json GET /pull-requests/{pullRequestID}/proof
openapi: 3.1.0
info:
  title: Aether API
  version: 0.1.0
servers:
  - url: https://api.runaether.dev
security:
  - bearerAuth: []
paths:
  /pull-requests/{pullRequestID}/proof:
    get:
      tags:
        - pull-requests
      summary: Get everything recorded as proof of a pull request
      description: >-
        The captures of every task that published this pull request, and every
        review run against it with the verdict it posted, the head it reviewed
        and its own captures. Captures are the same task media rows
        /tasks/{taskID}/media serves, newest first, each carrying the head it
        was recorded against to compare with the pull request's current head.
        Nothing is fetched from GitHub. Requires membership in the owning
        organization of a task linked to this pull request — the task that
        published it or a task that reviewed it — and current GitHub access to
        the repository. 404 covers an unknown pull request, one linked to no
        organization the caller belongs to, and one whose GitHub access the
        caller has lost; the three are deliberately indistinguishable.
      operationId: getPullRequestProof
      parameters:
        - in: path
          name: pullRequestID
          required: true
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PullRequestProofResponse'
          description: OK
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PullRequestsErrorResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/PullRequestsErrorResponse'
                  - $ref: '#/components/schemas/OrgAuthorizationErrorResponse'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PullRequestsErrorResponse'
          description: Not Found
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PullRequestsErrorResponse'
          description: Unprocessable Entity
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PullRequestsErrorResponse'
          description: Internal Server Error
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PullRequestsErrorResponse'
          description: Bad Gateway
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PullRequestsErrorResponse'
          description: Service Unavailable
components:
  schemas:
    PullRequestProofResponse:
      additionalProperties: false
      properties:
        can_hide:
          type: boolean
        published:
          items:
            $ref: '#/components/schemas/PullRequestProofPublishedRun'
          type: array
        pull_request:
          $ref: '#/components/schemas/PullRequestProofHeader'
        reviewer_confirmations:
          items:
            $ref: '#/components/schemas/PullRequestProofReviewerConfirmation'
          type: array
        reviews:
          items:
            $ref: '#/components/schemas/PullRequestProofReviewRun'
          type: array
        shown_claims:
          items:
            $ref: '#/components/schemas/PullRequestProofShownClaim'
          type: array
        visibility:
          $ref: '#/components/schemas/PullRequestProofVisibility'
      required:
        - pull_request
        - published
        - reviews
        - reviewer_confirmations
        - shown_claims
        - visibility
        - can_hide
      type: object
    PullRequestsErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - account_deleting
            - aether_inference_unserved
            - agent_pr_blocked
            - agent_pr_pending
            - app_identity_missing
            - attribution_unavailable
            - bad_gateway
            - bad_request
            - caller_inactive
            - conflict
            - connection_harness_mismatch
            - connection_not_held
            - contents_write_required
            - continuation_failed
            - continuation_unavailable
            - control_forbidden
            - embeddings_unavailable
            - fix_not_requested
            - fix_requests_unrecorded
            - forbidden
            - fork_branch_delete_unsupported
            - fork_forbidden
            - gateway_timeout
            - github_claim_unverified
            - github_failed
            - github_identity_mismatch
            - github_identity_required
            - github_push_access_required
            - github_reconnect_required
            - github_ref_not_found
            - gone
            - idempotency_key_reused
            - inference_proxy_unavailable
            - insufficient_credits
            - insufficient_inference_balance
            - internal_error
            - invalid_request
            - mcp_server_not_connected
            - method_not_allowed
            - mode_forbidden
            - no_dispatch_target
            - not_acceptable
            - not_found
            - not_implemented
            - onboarding_already_completed
            - onboarding_requirements_missing
            - org_role_insufficient
            - org_suspended
            - payment_required
            - pr_review_actor_required
            - pr_review_publish_forbidden
            - precondition_failed
            - pull_request_closed
            - pull_request_mirror_failed
            - pull_request_not_mirrored
            - queued_stop_requires_discard
            - rate_limited
            - request_canceled
            - request_timeout
            - request_too_large
            - service_unavailable
            - stack_cycle
            - stack_too_large
            - stack_two_parents
            - stale_execution
            - stale_or_indeterminate
            - stale_pending_input
            - stream_delivery_gap
            - stream_event_conflict
            - task_awaiting_message
            - task_awaiting_tool_response
            - task_connection_disconnected
            - task_connection_unresolved
            - task_creator_deleted
            - task_ineligible
            - task_not_accepting_messages
            - task_settings_changed
            - unauthenticated
            - unsigned_aether_head
            - unsigned_commit
            - unsupported_changes
            - unsupported_media_type
            - untyped_error
            - validation_failed
            - workspace_git_unavailable
            - workspace_rejected
          minLength: 1
          type: string
        error:
          minLength: 1
          type: string
        errors:
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type: array
      required:
        - error
        - code
      type: object
    OrgAuthorizationErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - org_membership_required
            - org_role_insufficient
            - org_suspended
            - account_deleting
            - agent_host_route_not_allowed
            - credential_kind_not_admitted
          type: string
        error:
          minLength: 1
          type: string
      required:
        - error
        - code
      type: object
    PullRequestProofPublishedRun:
      additionalProperties: false
      properties:
        linked_at:
          format: date-time
          type: string
        media:
          items:
            $ref: '#/components/schemas/TaskMediaItem'
          type: array
        steerers:
          items:
            $ref: '#/components/schemas/PullRequestProofSteerer'
          type: array
        task_creator:
          anyOf:
            - $ref: '#/components/schemas/PullRequestProofTaskCreator'
            - type: 'null'
        task_id:
          format: uuid
          type: string
        task_name:
          type: string
      required:
        - task_id
        - task_name
        - linked_at
        - media
        - task_creator
        - steerers
      type: object
    PullRequestProofHeader:
      additionalProperties: false
      properties:
        head_sha:
          maxLength: 40
          minLength: 40
          pattern: ^[0-9a-f]{40}$
          type:
            - string
            - 'null'
        html_url:
          format: uri
          type: string
        id:
          format: uuid
          type: string
        merged_at:
          format: date-time
          type:
            - string
            - 'null'
        pr_number:
          format: int64
          minimum: 1
          type: integer
        repository:
          minLength: 1
          pattern: \S
          type: string
        title:
          type: string
      required:
        - id
        - pr_number
        - title
        - html_url
        - repository
        - head_sha
        - merged_at
      type: object
    PullRequestProofReviewerConfirmation:
      additionalProperties: false
      properties:
        line:
          format: int64
          minimum: 1
          type: integer
        path:
          minLength: 1
          type: string
        reviewed_at:
          format: date-time
          type: string
        reviewed_head_sha:
          maxLength: 40
          minLength: 40
          pattern: ^[0-9a-f]{40}$
          type: string
        run_id:
          format: uuid
          type: string
        side:
          $ref: '#/components/schemas/PRReviewCommentSide'
        text:
          type: string
      required:
        - text
        - path
        - line
        - side
        - run_id
        - reviewed_at
        - reviewed_head_sha
      type: object
    PullRequestProofReviewRun:
      additionalProperties: false
      properties:
        linked_at:
          format: date-time
          type: string
        media:
          items:
            $ref: '#/components/schemas/TaskMediaItem'
          type: array
        reviewed_head_sha:
          maxLength: 40
          minLength: 40
          pattern: ^[0-9a-f]{40}$
          type:
            - string
            - 'null'
        task_id:
          format: uuid
          type: string
        task_name:
          type: string
        verdict:
          enum:
            - COMMENT
            - APPROVE
            - REQUEST_CHANGES
          type:
            - string
            - 'null'
      required:
        - task_id
        - task_name
        - linked_at
        - verdict
        - reviewed_head_sha
        - media
      type: object
    PullRequestProofShownClaim:
      additionalProperties: false
      properties:
        created_at:
          format: date-time
          type: string
        evidence:
          $ref: '#/components/schemas/PullRequestProofClaimEvidence'
        id:
          format: uuid
          type: string
        text:
          minLength: 1
          pattern: \S
          type: string
      required:
        - id
        - text
        - evidence
        - created_at
      type: object
    PullRequestProofVisibility:
      additionalProperties: false
      properties:
        changed:
          anyOf:
            - $ref: '#/components/schemas/PullRequestProofVisibilityChange'
            - type: 'null'
        visibility:
          enum:
            - public
            - org
          type: string
      required:
        - visibility
        - changed
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    TaskMediaItem:
      additionalProperties: false
      properties:
        capture:
          $ref: '#/components/schemas/TaskMediaCapture'
        content_type:
          enum:
            - image/png
            - image/jpeg
            - video/webm
            - video/mp4
            - application/json
          type: string
        created_at:
          format: date-time
          type: string
        head_sha:
          maxLength: 40
          minLength: 40
          pattern: ^[0-9a-f]{40}$
          type:
            - string
            - 'null'
        hidden:
          anyOf:
            - $ref: '#/components/schemas/TaskMediaHiddenMark'
            - type: 'null'
        id:
          format: uuid
          type: string
        public_url:
          format: uri
          minLength: 1
          type: string
        tracks:
          items:
            $ref: '#/components/schemas/TaskMediaTrack'
          type: array
      required:
        - id
        - public_url
        - content_type
        - capture
        - head_sha
        - hidden
        - created_at
      type: object
    PullRequestProofSteerer:
      additionalProperties: false
      properties:
        first_turn:
          $ref: '#/components/schemas/PullRequestProofTurn'
        person:
          $ref: '#/components/schemas/TaskPerson'
      required:
        - person
        - first_turn
      type: object
    PullRequestProofTaskCreator:
      additionalProperties: false
      properties:
        first_turn:
          anyOf:
            - $ref: '#/components/schemas/PullRequestProofTurn'
            - type: 'null'
        person:
          $ref: '#/components/schemas/TaskUserPerson'
      required:
        - person
        - first_turn
      type: object
    PRReviewCommentSide:
      enum:
        - LEFT
        - RIGHT
      type: string
    PullRequestProofClaimEvidence:
      discriminator:
        mapping:
          capture: '#/components/schemas/PullRequestProofClaimCaptureEvidence'
          recording: '#/components/schemas/PullRequestProofClaimRecordingEvidence'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/PullRequestProofClaimCaptureEvidence'
        - $ref: '#/components/schemas/PullRequestProofClaimRecordingEvidence'
    PullRequestProofVisibilityChange:
      additionalProperties: false
      properties:
        at:
          format: date-time
          type: string
        by:
          format: uuid
          type: string
        by_name:
          minLength: 1
          pattern: \S
          type: string
      required:
        - at
        - by
        - by_name
      type: object
    TaskMediaCapture:
      discriminator:
        mapping:
          recording: '#/components/schemas/TaskMediaRecordingCapture'
          screenshot: '#/components/schemas/TaskMediaScreenshotCapture'
          terminal_recording: '#/components/schemas/TaskMediaTerminalRecordingCapture'
          untracked: '#/components/schemas/TaskMediaUntrackedCapture'
          upload: '#/components/schemas/TaskMediaUploadCapture'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/TaskMediaRecordingCapture'
        - $ref: '#/components/schemas/TaskMediaTerminalRecordingCapture'
        - $ref: '#/components/schemas/TaskMediaScreenshotCapture'
        - $ref: '#/components/schemas/TaskMediaUploadCapture'
        - $ref: '#/components/schemas/TaskMediaUntrackedCapture'
    TaskMediaHiddenMark:
      additionalProperties: false
      properties:
        at:
          format: date-time
          type: string
        by:
          format: uuid
          type: string
      required:
        - at
        - by
      type: object
    TaskMediaTrack:
      additionalProperties: false
      properties:
        byte_size:
          format: int64
          maximum: 52428800
          minimum: 1
          type: integer
        format:
          enum:
            - aether.cpu.v2
            - aether.network.v2
          type: string
        kind:
          enum:
            - cpu
            - network
          type: string
        url:
          format: uri
          type: string
      required:
        - kind
        - format
        - url
        - byte_size
      type: object
    PullRequestProofTurn:
      additionalProperties: false
      properties:
        message_id:
          minLength: 1
          type: string
        turn_id:
          format: uuid
          type: string
      required:
        - turn_id
        - message_id
      type: object
    TaskPerson:
      discriminator:
        mapping:
          github_account: '#/components/schemas/TaskGitHubPerson'
          user: '#/components/schemas/TaskUserPerson'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/TaskUserPerson'
        - $ref: '#/components/schemas/TaskGitHubPerson'
    TaskUserPerson:
      additionalProperties: false
      properties:
        display_name:
          minLength: 1
          pattern: \S
          type: string
        github_login:
          minLength: 1
          pattern: \S
          type:
            - string
            - 'null'
        kind:
          enum:
            - user
          type: string
        user_id:
          format: uuid
          type: string
      required:
        - kind
        - user_id
        - display_name
        - github_login
      type: object
    PullRequestProofClaimCaptureEvidence:
      additionalProperties: false
      properties:
        capture_id:
          format: uuid
          type: string
        kind:
          enum:
            - capture
          type: string
      required:
        - kind
        - capture_id
      type: object
    PullRequestProofClaimRecordingEvidence:
      additionalProperties: false
      properties:
        at_ms:
          format: int64
          minimum: 0
          type: integer
        kind:
          enum:
            - recording
          type: string
        recording_id:
          format: uuid
          type: string
      required:
        - kind
        - recording_id
        - at_ms
      type: object
    TaskMediaRecordingCapture:
      additionalProperties: false
      properties:
        actions:
          items:
            $ref: '#/components/schemas/TaskMediaCaptureAction'
          maxItems: 2000
          type: array
        chapters:
          items:
            $ref: '#/components/schemas/TaskMediaCaptureChapter'
          maxItems: 100
          type: array
        description:
          maxLength: 2000
          minLength: 1
          pattern: \S
          type: string
        duration_ms:
          format: int64
          minimum: 0
          type: integer
        ending:
          enum:
            - stopped
            - interrupted
          type: string
        height:
          format: int64
          minimum: 1
          type: integer
        kind:
          enum:
            - recording
          type: string
        notes:
          items:
            maxLength: 280
            minLength: 1
            pattern: \S
            type: string
          maxItems: 10
          type: array
        pages:
          items:
            maxLength: 500
            minLength: 1
            pattern: \S
            type: string
          maxItems: 200
          type: array
        source:
          enum:
            - browser
            - desktop
            - device
          type: string
        title:
          maxLength: 120
          minLength: 1
          pattern: \S
          type: string
        width:
          format: int64
          minimum: 1
          type: integer
      required:
        - kind
        - source
        - title
        - description
        - duration_ms
        - width
        - height
        - chapters
        - actions
        - pages
      type: object
    TaskMediaScreenshotCapture:
      additionalProperties: false
      properties:
        caption:
          maxLength: 200
          minLength: 1
          pattern: \S
          type: string
        kind:
          enum:
            - screenshot
          type: string
        source:
          enum:
            - browser
            - desktop
            - device
          type: string
      required:
        - kind
        - source
      type: object
    TaskMediaTerminalRecordingCapture:
      additionalProperties: false
      description: A JSON terminal recording bundle of at most 33554432 bytes.
      properties:
        actions:
          items:
            $ref: '#/components/schemas/TaskMediaCaptureAction'
          maxItems: 2000
          type: array
        chapters:
          items:
            $ref: '#/components/schemas/TaskMediaCaptureChapter'
          maxItems: 100
          type: array
        description:
          maxLength: 2000
          minLength: 1
          pattern: \S
          type: string
        duration_ms:
          format: int64
          minimum: 1
          type: integer
        ending:
          enum:
            - stopped
            - interrupted
          type: string
        kind:
          enum:
            - terminal_recording
          type: string
        notes:
          items:
            maxLength: 280
            minLength: 1
            pattern: \S
            type: string
          maxItems: 10
          type: array
        terminals:
          items:
            $ref: '#/components/schemas/TaskMediaCaptureTerminal'
          maxItems: 4
          minItems: 1
          type: array
        title:
          maxLength: 120
          minLength: 1
          pattern: \S
          type: string
      required:
        - kind
        - title
        - description
        - duration_ms
        - terminals
        - chapters
        - actions
      type: object
    TaskMediaUntrackedCapture:
      additionalProperties: false
      properties:
        kind:
          enum:
            - untracked
          type: string
      required:
        - kind
      type: object
    TaskMediaUploadCapture:
      additionalProperties: false
      properties:
        kind:
          enum:
            - upload
          type: string
        name:
          maxLength: 200
          minLength: 1
          pattern: \S
          type: string
      required:
        - kind
        - name
      type: object
    TaskGitHubPerson:
      additionalProperties: false
      properties:
        github_id:
          format: int64
          minimum: 1
          type: integer
        kind:
          enum:
            - github_account
          type: string
        login:
          minLength: 1
          pattern: \S
          type: string
      required:
        - kind
        - login
        - github_id
      type: object
    TaskMediaCaptureAction:
      additionalProperties: false
      properties:
        at_ms:
          format: int64
          minimum: 0
          type: integer
        kind:
          enum:
            - click
            - hover
            - type
            - key
            - select
            - drag
            - navigate
            - other
          type: string
        label:
          maxLength: 200
          minLength: 1
          pattern: \S
          type: string
      required:
        - at_ms
        - kind
        - label
      type: object
    TaskMediaCaptureChapter:
      additionalProperties: false
      properties:
        at_ms:
          format: int64
          minimum: 0
          type: integer
        description:
          maxLength: 2000
          minLength: 1
          pattern: \S
          type: string
        title:
          maxLength: 120
          minLength: 1
          pattern: \S
          type: string
      required:
        - at_ms
        - title
      type: object
    TaskMediaCaptureTerminal:
      additionalProperties: false
      properties:
        cols:
          format: int64
          minimum: 1
          type: integer
        name:
          maxLength: 200
          minLength: 1
          pattern: \S
          type: string
        rows:
          format: int64
          minimum: 1
          type: integer
      required:
        - name
        - cols
        - rows
      type: object
  securitySchemes:
    bearerAuth:
      bearerFormat: JWT
      scheme: bearer
      type: http

````

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