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

# Trigger a dynamic pull request run

> Trigger the dynamic PR agent from CI using PR metadata. Callers do not send changed files; TesterArmy enriches with changed files and GitHub reporting only when the project has a supported GitHub connection.



## OpenAPI

````yaml /openapi.json post /v1/projects/{projectId}/pull-request-runs
openapi: 3.0.0
info:
  title: TestArmy API
  version: 1.0.0
  description: >-
    AI-powered browser automation API for QA testing. Automate web testing
    workflows using natural language prompts.
servers:
  - url: https://tester.army/api
    description: Production API server
security: []
paths:
  /v1/projects/{projectId}/pull-request-runs:
    post:
      tags:
        - Projects
      summary: Trigger a dynamic pull request run
      description: >-
        Trigger the dynamic PR agent from CI using PR metadata. Callers do not
        send changed files; TesterArmy enriches with changed files and GitHub
        reporting only when the project has a supported GitHub connection.
      parameters:
        - schema:
            type: string
            description: Project ID or shortId
          required: true
          description: Project ID or shortId
          name: projectId
          in: path
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DynamicPrRunRequest'
      responses:
        '202':
          description: Dynamic PR run queued successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - queued
                      - skipped
                    description: >-
                      "skipped" means the PR skip judge decided the changes
                      cannot affect this platform; a cancelled audit run records
                      the decision and no test executes.
                  runId:
                    type: string
                    format: uuid
                  projectId:
                    type: string
                    format: uuid
                  platform:
                    type: string
                    enum:
                      - web
                      - ios
                      - android
                  skipReason:
                    type: string
                    description: Present only when status is "skipped".
                  metadata:
                    type: object
                    properties:
                      github:
                        type: object
                        properties:
                          configured:
                            type: boolean
                          checkRunCreated:
                            type: boolean
                          commentTargetResolved:
                            type: boolean
                          status:
                            type: string
                            enum:
                              - not_configured
                              - check_create_failed
                              - pr_not_found
                        required:
                          - configured
                          - checkRunCreated
                          - commentTargetResolved
                      mobile:
                        type: object
                        properties:
                          source:
                            type: string
                          buildId:
                            type: string
                        required:
                          - source
                required:
                  - status
                  - runId
                  - projectId
                  - platform
        '400':
          description: Bad Request - Invalid input parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Error code or type
                  message:
                    type: string
                    description: Human-readable error message
                required:
                  - error
                  - message
        '401':
          description: Unauthorized - Invalid or missing API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Error code or type
                  message:
                    type: string
                    description: Human-readable error message
                required:
                  - error
                  - message
        '404':
          description: Project not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Error code or type
                  message:
                    type: string
                    description: Human-readable error message
                required:
                  - error
                  - message
        '413':
          description: Request body too large
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Error code or type
                  message:
                    type: string
                    description: Human-readable error message
                required:
                  - error
                  - message
        '429':
          description: Too Many Requests - Usage limit exceeded
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Error code or type
                  message:
                    type: string
                    description: Human-readable error message
                required:
                  - error
                  - message
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Error code or type
                  message:
                    type: string
                    description: Human-readable error message
                required:
                  - error
                  - message
        '504':
          description: Gateway Timeout - Test execution exceeded time limit
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Error code or type
                  message:
                    type: string
                    description: Human-readable error message
                required:
                  - error
                  - message
      security:
        - bearerAuth: []
components:
  schemas:
    DynamicPrRunRequest:
      anyOf:
        - type: object
          properties:
            targetUrl:
              type: string
              format: uri
            platform:
              type: string
              enum:
                - web
            pullRequest:
              type: object
              properties:
                provider:
                  type: string
                  enum:
                    - github
                  default: github
                number:
                  type: integer
                  minimum: 0
                  exclusiveMinimum: true
                title:
                  type: string
                  minLength: 1
                  maxLength: 500
                description:
                  type: string
                  maxLength: 65536
                baseBranch:
                  type: string
                  minLength: 1
                  maxLength: 255
                headBranch:
                  type: string
                  minLength: 1
                  maxLength: 255
                commitSha:
                  type: string
                  minLength: 1
                  maxLength: 100
              required:
                - number
                - title
                - commitSha
              additionalProperties: false
          required:
            - targetUrl
            - pullRequest
          additionalProperties: false
        - type: object
          properties:
            platform:
              type: string
              enum:
                - ios
                - android
            pullRequest:
              type: object
              properties:
                provider:
                  type: string
                  enum:
                    - github
                  default: github
                number:
                  type: integer
                  minimum: 0
                  exclusiveMinimum: true
                title:
                  type: string
                  minLength: 1
                  maxLength: 500
                description:
                  type: string
                  maxLength: 65536
                baseBranch:
                  type: string
                  minLength: 1
                  maxLength: 255
                headBranch:
                  type: string
                  minLength: 1
                  maxLength: 255
                commitSha:
                  type: string
                  minLength: 1
                  maxLength: 100
              required:
                - number
                - title
                - commitSha
              additionalProperties: false
            mobile:
              type: object
              properties:
                appId:
                  type: string
                  format: uuid
                bundleId:
                  type: string
                  minLength: 1
                artifactUrl:
                  type: string
                  format: uri
                artifactFilename:
                  type: string
                  minLength: 1
                buildId:
                  type: string
                  minLength: 1
              additionalProperties: false
            simulatorRegion:
              type: string
              enum:
                - eu-north1
                - us-west1
            deeplink:
              type: string
              maxLength: 2048
              format: uri
              description: >-
                Deep link the test harness opens on the device after launching
                the app and before any test step runs (e.g. an Expo
                update-channel or backend-selection link). Applied
                deterministically; the QA agent is told the setup is already
                done.
          required:
            - platform
            - pullRequest
          additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: API key authentication using Bearer token format

````