Rainforest QA runs API

Operations about runs

Operations 15

POST /1/runs Create a new run #
GET /1/runs List runs #
GET /1/runs/{run_id}/tests/{test_id} Get a test from a run #
GET /1/runs/historical_usage Get historical credit usage for runs #
GET /1/runs/{run_id} Get a run #
PUT /1/runs/{run_id} Update a run #
DELETE /1/runs/{run_id} Cancel a run #
GET /1/runs/{run_id}/junit Get a run's JUnit XML #
GET /1/runs/{run_id}/usages List usages for a run #
POST /1/runs/{run_id}/rerun_all Create a rerun #
POST /1/runs/{run_id}/rerun_failed Create a rerun #
GET /1/runs/{run_id}/tests List tests for a run #
POST /1/runs/{run_id}/tests/mark_as_viewed Mark tests as viewed #
GET /1/runs/{run_id}/tests/{test_id}/comments List comments for a run test #
GET /1/runs/{run_id}/steps/{step_id} Get a step from a run #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/rainforest-qa-runs-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

rainforest-qa-runs-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Rainforest callback Runs API
  description: Nearly all interactions done in Rainforest can be done via the API. Find your API Token (for the CLIENT_TOKEN header field) on the integration settings page (https://app.rainforestqa.com/settings/integrations).
  version: '1'
servers:
- url: https://app.rainforestqa.com/api
security:
- api_key: []
tags:
- name: runs
  description: Operations about runs
paths:
  /1/runs:
    post:
      summary: Create a new run
      description: Create a new run
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/post-runs'
        required: true
      responses:
        '201':
          description: Run created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Run'
        '400':
          description: Run could not be created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: post-runs
      x-rdme-order: 2
    get:
      summary: List runs
      description: List runs
      parameters:
      - in: query
        name: created_at[gte]
        description: Only runs created at or after this time; must be used with `created_at[lt]`
        required: false
        schema:
          type: string
          format: date-time
      - in: query
        name: created_at[lt]
        description: Only runs created before this time; must be used with `created_at[gte]`
        required: false
        schema:
          type: string
          format: date-time
      - in: query
        name: execution_method
        description: Only runs executed using this method
        required: false
        schema:
          type: string
          enum:
          - crowd
          - automation
          - automation_and_crowd
          - on_premise
      - in: query
        name: crowd
        description: Only runs against this crowd
        required: false
        schema:
          type: string
          enum:
          - default
          - on_premise_crowd
          - automation
          - automation_and_crowd
      - in: query
        name: environment_id
        description: Only runs against this/these environment(s)
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: mode
        description: Only runs with this mode
        required: false
        schema:
          type: string
          enum:
          - standard
          - draft
          - rerun
      - in: query
        name: query
        description: Only runs that have an id that matches this query or runs that have a description which contains the query
        required: false
        schema:
          type: string
      - in: query
        name: release
        description: Only runs matching this release
        required: false
        schema:
          type: string
      - in: query
        name: result
        description: Only runs with this result
        required: false
        schema:
          type: string
          enum:
          - passed
          - failed
          - no_result
      - in: query
        name: run_group_id
        description: Only runs for this/these run group(s)
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: source
        description: Only runs from this source
        required: false
        schema:
          type: string
          enum:
          - api
          - application
          - rainforest-cli
          - rainforest-orb
          - rainforest-gh-action
          - schedule
          - unknown
      - in: query
        name: state
        description: Only runs in this state
        required: false
        schema:
          type: string
          enum:
          - queued
          - validating
          - downloading_app
          - waiting_for_test_initialization
          - analyzing_app
          - error
          - sending_webhook
          - in_progress
          - aborting
          - aborted
          - timed_out
          - waiting_for_callback
          - complete
          - pending_investigation
      - in: query
        name: user_id
        description: Only runs created by this/these user(s)
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: branch_id
        description: Only runs created on this/these branch(es)
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: sort[][id]
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - asc
            - desc
      - in: query
        name: sort[][description]
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - asc
            - desc
      - in: query
        name: sort[][created_at]
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - asc
            - desc
      - in: query
        name: page
        description: Page of results to display
        required: false
        schema:
          type: integer
          format: int32
          default: 1
      - in: query
        name: page_size
        description: 'Number of results to return per page; maximum: 100'
        required: false
        schema:
          type: integer
          format: int32
          default: 10
      responses:
        '200':
          description: Runs retrieved
          headers:
            X-Total-Pages:
              description: Total pages
              schema:
                type: integer
            X-Current-Page:
              description: Current page
              schema:
                type: integer
            X-Per-Page:
              description: The maximum number of results per page
              schema:
                type: integer
            X-Total-Results:
              description: The total number of results
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Runs_Index'
        '400':
          description: Could not list runs using provided parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: get-runs
      x-rdme-order: 1
  /1/runs/{run_id}/tests/{test_id}:
    get:
      summary: Get a test from a run
      description: Get a test from a run
      parameters:
      - in: path
        name: run_id
        description: A run ID
        required: true
        schema:
          type: integer
          format: int32
      - in: path
        name: test_id
        description: A test ID
        required: true
        schema:
          type: integer
          format: int32
      - in: query
        name: show_rejected_jobs
        description: Show rejected jobs or not
        required: false
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: Run test retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tests_RunTestsIndex'
        '404':
          description: Run or test not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: get-run-test
      x-rdme-order: 30
  /1/runs/historical_usage:
    get:
      summary: Get historical credit usage for runs
      description: List historical credit usage for runs
      parameters:
      - in: query
        name: page
        description: Page of results to display
        required: false
        schema:
          type: integer
          format: int32
          default: 1
      - in: query
        name: page_size
        description: 'Number of results to return per page; maximum: 100'
        required: false
        schema:
          type: integer
          format: int32
          default: 10
      responses:
        '200':
          description: Runs usage retrieved
          headers:
            X-Total-Pages:
              description: Total pages
              schema:
                type: integer
            X-Current-Page:
              description: Current page
              schema:
                type: integer
            X-Per-Page:
              description: The maximum number of results per page
              schema:
                type: integer
            X-Total-Results:
              description: The total number of results
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RunCost'
      tags:
      - runs
      operationId: get-runs-historical_usage
      x-rdme-order: 4
  /1/runs/{run_id}:
    get:
      summary: Get a run
      description: Get a run
      parameters:
      - in: path
        name: run_id
        description: A run ID
        required: true
        schema:
          type: integer
          format: int32
      - in: query
        name: slim
        description: If true, returns less data in order to reduce latency and response size
        required: false
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: Run retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Run'
        '404':
          description: Run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: get-run
      x-rdme-order: 10
    put:
      summary: Update a run
      description: Update a run
      parameters:
      - in: path
        name: run_id
        description: A run ID
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/put-run'
        required: true
      responses:
        '200':
          description: Run updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Run'
        '404':
          description: Run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Run could not be updated due to a timing issue, please try again
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: put-run
      x-rdme-order: 11
    delete:
      summary: Cancel a run
      description: Cancel a run
      parameters:
      - in: path
        name: run_id
        description: A run ID
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Run canceled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Run'
        '404':
          description: Run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Run could not be canceled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: delete-run
      x-rdme-order: 12
  /1/runs/{run_id}/junit:
    get:
      summary: Get a run's JUnit XML
      description: 'Get JUnit.xml for a run containting details of all tests. The format will be JUnit XML, but the content here may change over time.

        '
      parameters:
      - in: path
        name: run_id
        description: A run ID
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Run JUnit retrieved
        '400':
          description: Run not complete
          content:
            text/xml:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Run not found
          content:
            text/xml:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: get-run-junit
      x-rdme-order: 13
  /1/runs/{run_id}/usages:
    get:
      summary: List usages for a run
      description: List usages for a run
      parameters:
      - in: path
        name: run_id
        description: A run ID
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Run usage retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunUsage'
        '404':
          description: Run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: get-run-usages
      x-rdme-order: 14
  /1/runs/{run_id}/rerun_all:
    post:
      summary: Create a rerun
      description: Rerun all tests from a previous run
      parameters:
      - in: path
        name: run_id
        description: A run ID
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/post-run-rerun_all'
        required: true
      responses:
        '201':
          description: Rerun created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Run'
        '400':
          description: Rerun could not be created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: post-run-rerun_all
      x-rdme-order: 15
  /1/runs/{run_id}/rerun_failed:
    post:
      summary: Create a rerun
      description: Rerun failed tests from a previous run
      parameters:
      - in: path
        name: run_id
        description: A run ID
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/post-run-rerun_failed'
        required: true
      responses:
        '201':
          description: Rerun created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Run'
        '400':
          description: Rerun could not be created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: post-run-rerun_failed
      x-rdme-order: 16
  /1/runs/{run_id}/tests:
    get:
      summary: List tests for a run
      description: List tests for a run
      parameters:
      - in: path
        name: run_id
        description: A run ID
        required: true
        schema:
          type: integer
          format: int32
      - in: query
        name: category
        description: Only return tests with this category
        required: false
        schema:
          type: string
          enum:
          - app
          - site
      - in: query
        name: exploratory_run_id
        description: Only return created in this exploratory run
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: priority
        description: Only return tests with this priority
        required: false
        schema:
          type: string
          enum:
          - P1
          - P2
          - P3
          - ''
          - not_prioritized
      - in: query
        name: query
        description: Only return tests whose title contains, or ID matches, this string
        required: false
        schema:
          type: string
      - in: query
        name: result
        description: Only return tests with a specific result
        required: false
        schema:
          type: string
          enum:
          - passed
          - failed
          - no_result
      - in: query
        name: run_group_id
        description: Only return tests in this run group; use `-1` to filter for tests not in any run groups
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: smart_folder_id
        description: Only return tests in this saved filter
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: step_query
        description: Only return tests whose steps match this string
        required: false
        schema:
          type: string
      - in: query
        name: tests
        description: Only return tests matching this criteria. Can be comma-separated list of test ids or 'all' to return all tests
        required: false
        schema:
          type: string
      - in: query
        name: type
        description: Only return tests of this type
        required: false
        schema:
          type: string
          enum:
          - snippet
          - test
      - in: query
        name: variable
        description: Only return tests that contain given variable
        required: false
        schema:
          type: string
      - in: query
        name: environment_id
        description: Only return that were run in the specified environment
        required: false
        schema:
          type: integer
          format: int32
      - in: query
        name: has_comments
        description: Only return tests with or without comments
        required: false
        schema:
          type: boolean
      - in: query
        name: latest_only
        description: Only the latest results for a test
        required: false
        schema:
          type: boolean
          default: false
      - in: query
        name: release
        description: Only return tests that were run in the specified release
        required: false
        schema:
          type: string
      - in: query
        name: sort[][title]
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - asc
            - desc
      - in: query
        name: sort[][priority]
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - asc
            - desc
      - in: query
        name: sort[][duration]
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - asc
            - desc
      - in: query
        name: sort[][result]
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - asc
            - desc
      - in: query
        name: sort[][failure_status]
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - asc
            - desc
      - in: query
        name: sort[][failed_snippet]
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - asc
            - desc
      - in: query
        name: page
        description: Page of results to display
        required: false
        schema:
          type: integer
          format: int32
          default: 1
      - in: query
        name: page_size
        description: 'Number of results to return per page; maximum: 100'
        required: false
        schema:
          type: integer
          format: int32
          default: 10
      - in: query
        name: slim
        description: If true, returns less data in order to reduce latency and response size
        required: false
        schema:
          type: boolean
          default: false
      - in: query
        name: feature_id[]
        description: Only return tests with this/these feature(s); use `-1` to filter for tests without a feature
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int32
      - in: query
        name: site_id[]
        description: Only return tests for this/these site(s)
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: integer
            format: int32
      - in: query
        name: state[]
        description: Only return tests that with this state
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - enabled
            - disabled
            - draft
            - archived
            - all
            - unarchived
      - in: query
        name: tags[]
        description: Only return tests having all specified tags; use `-1` to filter for untagged tests
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          description: Run tests retrieved
          headers:
            X-Total-Pages:
              description: Total pages
              schema:
                type: integer
            X-Current-Page:
              description: Current page
              schema:
                type: integer
            X-Per-Page:
              description: The maximum number of results per page
              schema:
                type: integer
            X-Total-Results:
              description: The total number of results
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Tests_RunTestsIndex'
        '404':
          description: Run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: get-run-tests
      x-rdme-order: 20
  /1/runs/{run_id}/tests/mark_as_viewed:
    post:
      summary: Mark tests as viewed
      description: Mark test results as viewed
      parameters:
      - in: path
        name: run_id
        description: A run ID
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/post-run-tests-mark_as_viewed'
        required: true
      responses:
        '201':
          description: Tests marked as viewed
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Tests_RunTestsIndex'
        '404':
          description: Run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: post-run-tests-mark_as_viewed
      x-rdme-order: 21
  /1/runs/{run_id}/tests/{test_id}/comments:
    get:
      summary: List comments for a run test
      description: List comments for a run test
      parameters:
      - in: path
        name: run_id
        description: A run ID
        required: true
        schema:
          type: integer
          format: int32
      - in: path
        name: test_id
        description: A test ID
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Run test comments retrieved
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TestCommentHistory'
        '404':
          description: Run or test not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: get-run-test-comments
      x-rdme-order: 32
  /1/runs/{run_id}/steps/{step_id}:
    get:
      summary: Get a step from a run
      description: Get a step from a run
      parameters:
      - in: path
        name: run_id
        description: A run ID
        required: true
        schema:
          type: integer
          format: int32
      - in: path
        name: step_id
        description: A step ID
        required: true
        schema:
          type: integer
          format: int32
      - in: query
        name: include_feedback
        description: Include tester feedback?
        required: false
        schema:
          type: boolean
          default: false
      - in: query
        name: show_rejected_jobs
        description: Show rejected jobs?
        required: false
        schema:
          type: boolean
          default: false
      - in: query
        name: browsers[]
        description: Only include certain browsers in the result
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          description: Retrieved run step
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunStep'
        '404':
          description: Run or step not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - runs
      operationId: get-run-test-step
      x-rdme-order: 40
components:
  schemas:
    RunBrowser:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        category:
          type: string
          enum:
          - browser
          - software
          - tablet
          - phone
        state:
          type: string
          enum:
          - enabled
          - disabled
    Error:
      type: object
      properties:
        error:
          type: string
          description: An error message describing what went wrong
      required:
      - error
      description: Error model
    post-runs:
      type: object
      properties:
        category:
          type: string
          description: Only run tests with this category
          enum:
          - app
          - site
        exploratory_run_id:
          type: integer
          format: int32
          description: Only run created in this exploratory run
        feature_id:
          type: array
          description: Only run tests with this/these feature(s); use `-1` to filter for tests without a feature
          items:
            type: integer
            format: int32
        priority:
          type: string
          description: Only run tests with this priority
          enum:
          - P1
          - P2
          - P3
          - ''
          - not_prioritized
        query:
          type: string
          description: Only run tests whose title contains, or ID matches, this string
        result:
          type: string
          description: Only run tests with a specific result
          enum:
          - passed
          - failed
          - no_result
        run_group_id:
          type: integer
          format: int32
          description: Only run tests in this run group; use `-1` to filter for tests not in any run groups
        site_id:
          type: array
          description: Only run tests for this/these site(s)
          items:
            type: integer
            format: int32
        smart_folder_id:
          type: integer
          format: int32
          description: Only run tests in this saved filter
        state:
          type: array
          description: Only run tests that with this state
          items:
            type: string
            enum:
            - enabled
            - disabled
            - draft
            - archived
            - all
            - unarchived
        step_query:
          type: string
          description: Only run tests whose steps match this string
        tags:
          type: array
          description: Only run tests having all specified tags; use `-1` to filter for untagged tests
          items:
            type: string
        tests:
          type: string
          description: Only run tests matching this criteria. Can be comma-separated list of test ids or 'all' to run all tests
        type:
          type: string
          description: Only run tests of this type
          enum:
          - snippet
          - test
        run_id:
          type: array
          description: Only run tests that were in this/these previous run(s)
          items:
            type: integer
            format: int32
        variable:
          type: string
          description: Only run tests that contain given variable
        embedded:
          type: boolean
          description: If true, only run tests that are embedded in other tests. If false, only run tests that are not embedded in other tests.
        owner_id:
          type: integer
          format: int32
          description: Only run tests owned by this user; use `-1` to filter for tests without an owner
        test_language:
          type: string
          description: Only run tests with a specified language
          enum:
          - plain_english
          - rainforest_test_language
        browsers:
          type: array
          description: An array of browsers to run this against, overrides the defaults; you can find a list of possible options via the client API
          items:
            type: string
        execution_method:
          type: string
          description: The execution method to use for this run
          enum:
          - crowd
          - automation
          - automation_and_crowd
          - on_premise
        crowd:
          type: string
          description: The crowd to use for this run
          enum:
          - default
          - on_premise_crowd
          - automation
          - automation_and_crowd
        description:
          type: string
          description: An arbitrary string to associate with the run
        environment_id:
          type: integer
          format: int32
          description: Use a specific environment for this run
        mode:
          type: string
          description: Set the run mode to standard or draft
          enum:
          - standard
          - draft
          default: standard
        release:
          type: string
          description: Manually entered release information about the release the run is ass

# --- truncated at 32 KB (54 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/rainforest-qa/refs/heads/main/openapi/rainforest-qa-runs-api-openapi.yml