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

# Submit a human pull request review

> Posts the verdict through the authenticated caller's own GitHub identity and pins it to expected_head_sha. No app-identity fallback is used. The idempotency key is actor-scoped and claimed before GitHub is called: completed attempts replay the same review, while failed claims conflict without posting again. 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.account.json POST /pull-requests/{pullRequestID}/github/review
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:
  /pull-requests/{pullRequestID}/github/review:
    post:
      tags:
        - pull-requests
      summary: Submit a human pull request review
      description: >-
        Posts the verdict through the authenticated caller's own GitHub identity
        and pins it to expected_head_sha. No app-identity fallback is used. The
        idempotency key is actor-scoped and claimed before GitHub is called:
        completed attempts replay the same review, while failed claims conflict
        without posting again. 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: submitPullRequestGithubReview
      parameters:
        - in: path
          name: pullRequestID
          required: true
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitPullRequestReviewRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitPullRequestReviewResponse'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/ErrorResponse'
                  - $ref: '#/components/schemas/OrgAuthorizationErrorResponse'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Not Found
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Conflict
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unprocessable Entity
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Internal Server Error
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Bad Gateway
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Service Unavailable
components:
  schemas:
    SubmitPullRequestReviewRequest:
      additionalProperties: false
      properties:
        body:
          type: string
        comments:
          items:
            $ref: '#/components/schemas/SubmitPullRequestReviewComment'
          type: array
        event:
          enum:
            - COMMENT
            - APPROVE
            - REQUEST_CHANGES
          type: string
        expected_head_sha:
          maxLength: 40
          minLength: 40
          pattern: ^[0-9a-fA-F]{40}$
          type: string
        idempotency_key:
          minLength: 8
          type: string
      required:
        - event
        - expected_head_sha
        - idempotency_key
      type: object
    SubmitPullRequestReviewResponse:
      additionalProperties: false
      properties:
        html_url:
          minLength: 1
          type: string
        review_id:
          format: int64
          minimum: 1
          type: integer
        submitted_at:
          format: date-time
          type: string
      required:
        - review_id
        - html_url
        - submitted_at
      type: object
    ErrorResponse:
      additionalProperties: false
      properties:
        code:
          type: string
        error:
          minLength: 1
          type: string
      required:
        - error
      type: object
    OrgAuthorizationErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - org_membership_required
            - org_role_insufficient
            - org_suspended
          type: string
        error:
          minLength: 1
          type: string
      required:
        - error
        - code
      type: object
    SubmitPullRequestReviewComment:
      additionalProperties: false
      properties:
        body:
          minLength: 1
          pattern: \S
          type: string
        line:
          format: int64
          minimum: 1
          type: integer
        path:
          minLength: 1
          pattern: \S
          type: string
        side:
          enum:
            - LEFT
            - RIGHT
          type: string
      required:
        - path
        - line
        - body
      type: object
  securitySchemes:
    bearerAuth:
      bearerFormat: JWT
      scheme: bearer
      type: http

````