> ## 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.

# Change who may watch a pull request's proof

> A merge patch of the pull request's proof, answered with the proof getPullRequestProof reads. A proof nobody set a visibility on takes its organization's new_pull_request_proof_public: public, which anyone holding the proof link opens, or private to the organization that owns it. visibility sets this pull request's proof to org (private to the organization) or public, whichever way that default points. Restricted to the same readers who may hide one of its captures — the creator of a task linked to this pull request, or an admin or owner of the organization — because both decide what someone outside it sees. Any other member with a product role is refused with 403 control_forbidden; a viewer or billing member of the owning organization is refused before that with 403 org_role_insufficient. 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 PATCH /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:
    patch:
      tags:
        - pull-requests
      summary: Change who may watch a pull request's proof
      description: >-
        A merge patch of the pull request's proof, answered with the proof
        getPullRequestProof reads. A proof nobody set a visibility on takes its
        organization's new_pull_request_proof_public: public, which anyone
        holding the proof link opens, or private to the organization that owns
        it. visibility sets this pull request's proof to org (private to the
        organization) or public, whichever way that default points. Restricted
        to the same readers who may hide one of its captures — the creator of a
        task linked to this pull request, or an admin or owner of the
        organization — because both decide what someone outside it sees. Any
        other member with a product role is refused with 403 control_forbidden;
        a viewer or billing member of the owning organization is refused before
        that with 403 org_role_insufficient. 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: patchPullRequestProof
      parameters:
        - in: path
          name: pullRequestID
          required: true
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchPullRequestProofRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PullRequestProofResponse'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PullRequestsErrorResponse'
          description: Bad Request
        '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'
                  - $ref: '#/components/schemas/ControlForbiddenErrorResponse'
          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:
    PatchPullRequestProofRequest:
      additionalProperties: false
      minProperties: 1
      properties:
        visibility:
          enum:
            - public
            - org
          type: string
      type: object
    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_creator_deleted
            - task_ineligible
            - task_not_accepting_messages
            - task_not_pinnable
            - 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
    ControlForbiddenErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - control_forbidden
          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.