> ## 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 a public pull request's proof

> The outsider view of one pull request's recorded proof, served to anyone holding the theater link — no Aether account required. It carries the pull request's title and number, the link to it on GitHub, and its captures newest first with their chapters, played through the same URLs every other surface mints. Nothing else: no organization, project, task or member name, no conversation, diff or checks. A proof its organization has made private and a pull request id that names nothing answer with the SAME 404, so this route cannot confirm that a private pull request exists.



## OpenAPI

````yaml api-reference/openapi.account.json GET /public/pull-requests/{pullRequestID}/proof
openapi: 3.1.0
info:
  title: Aether Account & Integrations API
  version: 0.1.0
  description: >-
    Account, billing, and integration-management endpoints used by the Aether
    web app and CLI. Root-mounted; NOT part of the versioned /v1 contract.
servers:
  - url: https://api.runaether.dev
security:
  - bearerAuth: []
paths:
  /public/pull-requests/{pullRequestID}/proof:
    get:
      tags:
        - pull-requests
      summary: Get a public pull request's proof
      description: >-
        The outsider view of one pull request's recorded proof, served to anyone
        holding the theater link — no Aether account required. It carries the
        pull request's title and number, the link to it on GitHub, and its
        captures newest first with their chapters, played through the same URLs
        every other surface mints. Nothing else: no organization, project, task
        or member name, no conversation, diff or checks. A proof its
        organization has made private and a pull request id that names nothing
        answer with the SAME 404, so this route cannot confirm that a private
        pull request exists.
      operationId: getPublicPullRequestProof
      parameters:
        - in: path
          name: pullRequestID
          required: true
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicPullRequestProofResponse'
          description: OK
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Not Found
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unprocessable Entity
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Too Many Requests
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Internal Server Error
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Service Unavailable
      security: []
components:
  schemas:
    PublicPullRequestProofResponse:
      additionalProperties: false
      properties:
        captures:
          items:
            $ref: '#/components/schemas/TaskMediaItem'
          type: array
        pull_request:
          $ref: '#/components/schemas/PublicPullRequestProofHeader'
      required:
        - pull_request
        - captures
      type: object
    ErrorResponse:
      additionalProperties: false
      properties:
        code:
          type: string
        error:
          minLength: 1
          type: string
        errors:
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type: array
      required:
        - error
      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
      required:
        - id
        - public_url
        - content_type
        - capture
        - head_sha
        - hidden
        - created_at
      type: object
    PublicPullRequestProofHeader:
      additionalProperties: false
      properties:
        html_url:
          format: uri
          type: string
        id:
          format: uuid
          type: string
        pr_number:
          format: int64
          minimum: 1
          type: integer
        title:
          type: string
      required:
        - id
        - pr_number
        - title
        - html_url
      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
    TaskMediaCapture:
      discriminator:
        mapping:
          recording:
            $ref: '#/components/schemas/TaskMediaRecordingCapture'
          screenshot:
            $ref: '#/components/schemas/TaskMediaScreenshotCapture'
          terminal_recording:
            $ref: '#/components/schemas/TaskMediaTerminalRecordingCapture'
          untracked:
            $ref: '#/components/schemas/TaskMediaUntrackedCapture'
          upload:
            $ref: '#/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
    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
    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

````