openapi: 3.0.2
components:
  schemas:
    addSuitesToExperiencesInput:
      allOf:
      - $ref: '#/components/schemas/selectExperiencesInput'
      - required:
        - testSuiteIDs
      - type: object
        properties:
          testSuiteIDs:
            type: array
            items:
              $ref: '#/components/schemas/testSuiteID'
    addSystemsToExperiencesInput:
      allOf:
      - $ref: '#/components/schemas/selectExperiencesInput'
      - required:
        - systemIDs
      - type: object
        properties:
          systemIDs:
            type: array
            items:
              $ref: '#/components/schemas/systemID'
    addTagsToExperiencesInput:
      allOf:
      - $ref: '#/components/schemas/selectExperiencesInput'
      - required:
        - experienceTagIDs
      - type: object
        properties:
          experienceTagIDs:
            type: array
            items:
              $ref: '#/components/schemas/experienceTagID'
    associatedAccount:
      type: string
    batch:
      type: object
      required:
      - associatedAccount
      properties:
        adhocTestSuite:
          type: boolean
        associatedAccount:
          $ref: '#/components/schemas/associatedAccount'
        batchID:
          $ref: '#/components/schemas/batchID'
        batchMetricsStatus:
          $ref: '#/components/schemas/metricStatus'
        branchID:
          $ref: '#/components/schemas/branchID'
        buildID:
          $ref: '#/components/schemas/buildID'
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        description:
          type: string
        friendlyName:
          $ref: '#/components/schemas/friendlyName'
        jobMetricsStatusCounts:
          $ref: '#/components/schemas/jobMetricsStatusCounts'
        jobStatusCounts:
          $ref: '#/components/schemas/batchJobStatusCounts'
        jobsMetricsStatus:
          $ref: '#/components/schemas/metricStatus'
        lastUpdatedTimestamp:
          $ref: '#/components/schemas/timestamp'
        metricsBuildID:
          $ref: '#/components/schemas/metricsBuildID'
        orgID:
          $ref: '#/components/schemas/orgID'
        overallMetricsStatus:
          $ref: '#/components/schemas/metricStatus'
        parameters:
          $ref: '#/components/schemas/batchParameters'
        poolLabels:
          $ref: '#/components/schemas/poolLabels'
        projectID:
          $ref: '#/components/schemas/projectID'
        status:
          $ref: '#/components/schemas/batchStatus'
        statusHistory:
          $ref: '#/components/schemas/batchStatusHistory'
        systemID:
          $ref: '#/components/schemas/systemID'
        testSuiteID:
          $ref: '#/components/schemas/testSuiteID'
        testSuiteRevision:
          $ref: '#/components/schemas/testSuiteRevision'
        totalJobs:
          $ref: '#/components/schemas/batchTotalJobs'
        userID:
          $ref: '#/components/schemas/userID'
    batchID:
      type: string
      format: uuid
    batchInput:
      type: object
      properties:
        associatedAccount:
          $ref: '#/components/schemas/associatedAccount'
        buildID:
          $ref: '#/components/schemas/buildID'
        excludedExperienceIDs:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/excludedExperienceID'
        experienceIDs:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/experienceID'
        experienceNames:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/experienceName'
        experienceTagIDs:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/experienceTagID'
        experienceTagNames:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/experienceTagName'
        filters:
          $ref: '#/components/schemas/experienceFilterInput'
        metricsBuildID:
          $ref: '#/components/schemas/metricsBuildID'
        parameters:
          $ref: '#/components/schemas/batchParameters'
        poolLabels:
          $ref: '#/components/schemas/poolLabels'
        triggeredVia:
          $ref: '#/components/schemas/triggeredVia'
    batchJobStatusCounts:
      type: object
      required:
      - submitted
      - running
      - succeeded
      - error
      - cancelled
      - metricsQueued
      - metricsRunning
      properties:
        cancelled:
          type: integer
        error:
          type: integer
        metricsQueued:
          type: integer
        metricsRunning:
          type: integer
        running:
          type: integer
        submitted:
          type: integer
        succeeded:
          type: integer
    batchLog:
      allOf:
      - $ref: '#/components/schemas/log'
      - type: object
        properties:
          batchID:
            $ref: '#/components/schemas/batchID'
    batchMetric:
      allOf:
      - $ref: '#/components/schemas/metric'
      - type: object
        properties:
          batchID:
            $ref: '#/components/schemas/batchID'
    batchMetricsData:
      allOf:
      - $ref: '#/components/schemas/metricsData'
      - type: object
        properties:
          batchID:
            $ref: '#/components/schemas/batchID'
    batchMetricsDataAndIDs:
      type: object
      properties:
        batchMetricID:
          $ref: '#/components/schemas/metricID'
        batchMetricsData:
          $ref: '#/components/schemas/batchMetricsData'
    batchMetricsDataToBatchMetric:
      type: object
      properties:
        batchMetricID:
          $ref: '#/components/schemas/metricID'
        batchMetricsDataIDs:
          type: array
          items:
            $ref: '#/components/schemas/metricsDataID'
    batchParameters:
      type: object
      additionalProperties:
        has: null
        schema:
          type: string
    batchStatus:
      type: string
      enum:
      - SUBMITTED
      - EXPERIENCES_RUNNING
      - BATCH_METRICS_QUEUED
      - BATCH_METRICS_RUNNING
      - ERROR
      - SUCCEEDED
      - CANCELLED
    batchStatusHistory:
      type: array
      items:
        $ref: '#/components/schemas/batchStatusHistoryType'
    batchStatusHistoryType:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/batchStatus'
        updatedAt:
          $ref: '#/components/schemas/timestamp'
    batchTotalJobs:
      type: integer
    branch:
      type: object
      required:
      - branchID
      - name
      - projectID
      - branchType
      - creationTimestamp
      - userID
      - orgID
      properties:
        branchID:
          $ref: '#/components/schemas/branchID'
        branchType:
          $ref: '#/components/schemas/branchType'
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        name:
          type: string
        orgID:
          $ref: '#/components/schemas/orgID'
        projectID:
          $ref: '#/components/schemas/projectID'
        userID:
          $ref: '#/components/schemas/userID'
    branchID:
      type: string
      format: uuid
    branchType:
      type: string
      enum:
      - CHANGE_REQUEST
      - MAIN
      - RELEASE
    build:
      type: object
      properties:
        branchID:
          $ref: '#/components/schemas/branchID'
        buildID:
          $ref: '#/components/schemas/buildID'
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        description:
          $ref: '#/components/schemas/buildDescription'
        imageUri:
          $ref: '#/components/schemas/buildImageUri'
        orgID:
          $ref: '#/components/schemas/orgID'
        projectID:
          $ref: '#/components/schemas/projectID'
        systemID:
          $ref: '#/components/schemas/systemID'
        userID:
          $ref: '#/components/schemas/userID'
        version:
          $ref: '#/components/schemas/buildVersion'
    buildDescription:
      type: string
    buildID:
      type: string
      format: uuid
    buildImageUri:
      type: string
    buildVersion:
      type: string
      minLength: 1
    checksum:
      type: string
    conflatedJobStatus:
      type: string
      enum:
      - QUEUED
      - RUNNING
      - ERROR
      - CANCELLED
      - BLOCKER
      - WARNING
      - PASSED
    createBranchInput:
      type: object
      required:
      - name
      - branchType
      properties:
        branchType:
          $ref: '#/components/schemas/branchType'
        name:
          type: string
          minLength: 1
    createBuildForBranchInput:
      type: object
      required:
      - systemID
      - version
      - imageUri
      properties:
        description:
          $ref: '#/components/schemas/buildDescription'
        imageUri:
          $ref: '#/components/schemas/buildImageUri'
        systemID:
          $ref: '#/components/schemas/systemID'
        version:
          $ref: '#/components/schemas/buildVersion'
    createBuildForSystemInput:
      type: object
      required:
      - branchID
      - version
      - imageUri
      properties:
        branchID:
          $ref: '#/components/schemas/branchID'
        description:
          $ref: '#/components/schemas/buildDescription'
        imageUri:
          $ref: '#/components/schemas/buildImageUri'
        version:
          $ref: '#/components/schemas/buildVersion'
    createExperienceInput:
      type: object
      required:
      - name
      - description
      - location
      properties:
        description:
          type: string
        location:
          type: string
        name:
          $ref: '#/components/schemas/experienceName'
    createExperienceTagInput:
      type: object
      required:
      - name
      - description
      properties:
        description:
          type: string
        name:
          $ref: '#/components/schemas/experienceTagName'
    createMetricsBuildInput:
      type: object
      required:
      - name
      - version
      - imageUri
      properties:
        imageUri:
          $ref: '#/components/schemas/metricsBuildImageUri'
        name:
          $ref: '#/components/schemas/metricsBuildName'
        version:
          $ref: '#/components/schemas/metricsBuildVersion'
    createProjectInput:
      type: object
      required:
      - name
      - description
      properties:
        description:
          type: string
        name:
          type: string
          minLength: 1
    createSystemInput:
      type: object
      required:
      - name
      - description
      - build_vcpus
      - build_memory_mib
      - build_gpus
      - build_shared_memory_mb
      - metrics_build_vcpus
      - metrics_build_memory_mib
      - metrics_build_gpus
      - metrics_build_shared_memory_mb
      properties:
        build_gpus:
          type: integer
        build_memory_mib:
          type: integer
        build_shared_memory_mb:
          type: integer
        build_vcpus:
          type: integer
        description:
          type: string
        metrics_build_gpus:
          type: integer
        metrics_build_memory_mib:
          type: integer
        metrics_build_shared_memory_mb:
          type: integer
        metrics_build_vcpus:
          type: integer
        name:
          type: string
          minLength: 1
    createTestSuiteInput:
      type: object
      required:
      - name
      - description
      - systemID
      - experiences
      properties:
        allExperiences:
          type: boolean
        description:
          $ref: '#/components/schemas/testSuiteDescription'
        excludedExperienceIDs:
          type: array
          items:
            $ref: '#/components/schemas/excludedExperienceID'
        experiences:
          type: array
          items:
            $ref: '#/components/schemas/experienceID'
        filters:
          $ref: '#/components/schemas/experienceFilterInput'
        metricsBuildID:
          $ref: '#/components/schemas/metricsBuildID'
        name:
          $ref: '#/components/schemas/testSuiteName'
        systemID:
          $ref: '#/components/schemas/systemID'
    customMetric:
      type: object
      required:
      - name
      - value
      properties:
        name:
          type: string
          example: Planning time
        unit:
          type: string
          example: Seconds
        value:
          type: number
          format: double
          example: 0.01253
    event:
      type: object
      required:
      - eventID
      - name
      - description
      - creationTimestamp
      - timestampType
      - timestamp
      - tags
      - status
      - metricsIDs
      properties:
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        description:
          type: string
        eventID:
          $ref: '#/components/schemas/eventID'
        metricsIDs:
          type: array
          items:
            $ref: '#/components/schemas/metricID'
        name:
          type: string
        status:
          $ref: '#/components/schemas/metricStatus'
        tags:
          type: array
          items:
            type: string
        timestamp:
          $ref: '#/components/schemas/timestamp'
        timestampType:
          $ref: '#/components/schemas/eventTimestampType'
    eventID:
      type: string
      format: uuid
    eventInput:
      type: object
      required:
      - name
      - description
      - tags
      - status
      - timestampType
      - timestamp
      - metricsIDs
      properties:
        description:
          type: string
        metricsIDs:
          type: array
          items:
            $ref: '#/components/schemas/metricID'
        name:
          type: string
        status:
          $ref: '#/components/schemas/metricStatus'
        tags:
          type: array
          items:
            type: string
        timestamp:
          $ref: '#/components/schemas/timestamp'
        timestampType:
          $ref: '#/components/schemas/eventTimestampType'
    eventTimestampType:
      type: string
      enum:
      - ABSOLUTE
      - RELATIVE
    excludedExperienceID:
      type: string
      format: uuid
    executionStep:
      type: string
      enum:
      - EXPERIENCE
      - METRICS
      - BATCH_METRICS
      - REPORT
    experience:
      type: object
      required:
      - experienceID
      - projectID
      - name
      - description
      - location
      - creationTimestamp
      - userID
      - orgID
      properties:
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        description:
          type: string
        experienceID:
          $ref: '#/components/schemas/experienceID'
        location:
          type: string
        name:
          $ref: '#/components/schemas/experienceName'
        orgID:
          $ref: '#/components/schemas/orgID'
        projectID:
          $ref: '#/components/schemas/projectID'
        userID:
          $ref: '#/components/schemas/userID'
    experienceFilterInput:
      type: object
      properties:
        name:
          type: string
          description: Filter experiences by name
        search:
          type: string
          description: A search query. Supports searching by tag_id
          example: tag_id IN ("71b96a67-9990-426b-993e-0f3d9c6bbe48")
        text:
          type: string
          description: Filter experiences by a text string on name and description
    experienceID:
      type: string
      format: uuid
    experienceLocation:
      type: object
      properties:
        location:
          type: string
          format: uri
    experienceLocationContents:
      type: object
      properties:
        isCloud:
          type: boolean
        objectCount:
          type: integer
        objects:
          type: array
          items:
            type: string
    experienceName:
      type: string
    experienceTag:
      type: object
      required:
      - experienceTagID
      - projectID
      - name
      - description
      - creationTimestamp
      - userID
      - orgID
      properties:
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        description:
          type: string
        experienceTagID:
          $ref: '#/components/schemas/experienceTagID'
        name:
          $ref: '#/components/schemas/experienceTagName'
        orgID:
          $ref: '#/components/schemas/orgID'
        projectID:
          $ref: '#/components/schemas/projectID'
        userID:
          $ref: '#/components/schemas/userID'
    experienceTagID:
      type: string
      format: uuid
    experienceTagName:
      type: string
    fileName:
      type: string
    fileSize:
      type: integer
      format: int64
    friendlyName:
      type: string
    getQuotaOutput:
      type: object
      properties:
        availableTokens:
          type: integer
          format: int32
        maxTokens:
          type: integer
          format: int32
        orgID:
          $ref: '#/components/schemas/orgID'
        secondsUntilRefresh:
          type: integer
          format: int32
    job:
      type: object
      properties:
        batchID:
          $ref: '#/components/schemas/batchID'
        branchID:
          $ref: '#/components/schemas/branchID'
        buildID:
          $ref: '#/components/schemas/buildID'
        conflatedStatus:
          $ref: '#/components/schemas/conflatedJobStatus'
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        description:
          type: string
        experienceID:
          $ref: '#/components/schemas/experienceID'
        experienceName:
          $ref: '#/components/schemas/experienceName'
        jobID:
          $ref: '#/components/schemas/jobID'
        jobMetricsStatus:
          $ref: '#/components/schemas/metricStatus'
        jobStatus:
          $ref: '#/components/schemas/jobStatus'
        lastUpdatedTimestamp:
          $ref: '#/components/schemas/timestamp'
        orgID:
          $ref: '#/components/schemas/orgID'
        outputLocation:
          type: string
        parameters:
          $ref: '#/components/schemas/batchParameters'
        projectID:
          $ref: '#/components/schemas/projectID'
        statusHistory:
          $ref: '#/components/schemas/jobStatusHistory'
        systemID:
          $ref: '#/components/schemas/systemID'
        userID:
          $ref: '#/components/schemas/userID'
    jobID:
      type: string
      format: uuid
    jobLog:
      allOf:
      - $ref: '#/components/schemas/log'
      - type: object
        properties:
          jobID:
            $ref: '#/components/schemas/jobID'
    jobMetric:
      allOf:
      - $ref: '#/components/schemas/metric'
      - type: object
        properties:
          batchID:
            $ref: '#/components/schemas/batchID'
          jobID:
            $ref: '#/components/schemas/jobID'
    jobMetricsData:
      allOf:
      - $ref: '#/components/schemas/metricsData'
      - type: object
        properties:
          jobID:
            $ref: '#/components/schemas/jobID'
    jobMetricsStatusCounts:
      type: object
      required:
      - passed
      - raw
      - noStatusReported
      - notApplicable
      - failWarn
      - failBlock
      properties:
        failBlock:
          type: integer
        failWarn:
          type: integer
        noStatusReported:
          type: integer
        notApplicable:
          type: integer
        passed:
          type: integer
        raw:
          type: integer
    jobStatus:
      type: string
      enum:
      - SUBMITTED
      - EXPERIENCE_RUNNING
      - METRICS_QUEUED
      - METRICS_RUNNING
      - ERROR
      - SUCCEEDED
      - CANCELLED
    jobStatusHistory:
      type: array
      items:
        $ref: '#/components/schemas/jobStatusHistoryType'
    jobStatusHistoryType:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/jobStatus'
        updatedAt:
          $ref: '#/components/schemas/timestamp'
    lineNumber:
      type: integer
      format: int32
    listAllJobsOutput:
      type: object
      properties:
        jobs:
          type: array
          items:
            $ref: '#/components/schemas/job'
        nextPageToken:
          type: string
        total:
          type: integer
    listBatchLogsOutput:
      type: object
      properties:
        logs:
          type: array
          items:
            $ref: '#/components/schemas/batchLog'
        nextPageToken:
          type: string
    listBatchMetricsDataForBatchMetricIDsOutput:
      type: object
      properties:
        batchMetricsDataAndIDs:
          type: array
          items:
            $ref: '#/components/schemas/batchMetricsDataAndIDs'
        nextPageToken:
          type: string
    listBatchMetricsDataOutput:
      type: object
      properties:
        batchMetricsData:
          type: array
          items:
            $ref: '#/components/schemas/batchMetricsData'
        nextPageToken:
          type: string
    listBatchMetricsOutput:
      type: object
      properties:
        batchMetrics:
          type: array
          items:
            $ref: '#/components/schemas/batchMetric'
        nextPageToken:
          type: string
    listBatchesOutput:
      type: object
      properties:
        batches:
          type: array
          items:
            $ref: '#/components/schemas/batch'
        nextPageToken:
          type: string
        total:
          type: integer
    listBranchesOutput:
      type: object
      properties:
        branches:
          type: array
          items:
            $ref: '#/components/schemas/branch'
        nextPageToken:
          type: string
    listBuildsOutput:
      type: object
      properties:
        builds:
          type: array
          items:
            $ref: '#/components/schemas/build'
        nextPageToken:
          type: string
    listExperienceTagsOutput:
      type: object
      properties:
        experienceTags:
          type: array
          items:
            $ref: '#/components/schemas/experienceTag'
        nextPageToken:
          type: string
    listExperiencesOutput:
      type: object
      properties:
        experiences:
          type: array
          items:
            $ref: '#/components/schemas/experience'
        nextPageToken:
          type: string
        total:
          type: integer
    listJobEventsOutput:
      type: object
      properties:
        events:
          type: array
          items:
            $ref: '#/components/schemas/event'
        nextPageToken:
          type: string
    listJobLogsOutput:
      type: object
      properties:
        logs:
          type: array
          items:
            $ref: '#/components/schemas/jobLog'
        nextPageToken:
          type: string
    listJobMetricsDataOutput:
      type: object
      properties:
        metricsData:
          type: array
          items:
            $ref: '#/components/schemas/jobMetricsData'
        nextPageToken:
          type: string
    listJobMetricsOutput:
      type: object
      properties:
        metrics:
          type: array
          items:
            $ref: '#/components/schemas/jobMetric'
        nextPageToken:
          type: string
    listJobsOutput:
      type: object
      properties:
        jobs:
          type: array
          items:
            $ref: '#/components/schemas/job'
        nextPageToken:
          type: string
        total:
          type: integer
    listMetricsBuildOutput:
      type: object
      properties:
        metricsBuilds:
          type: array
          items:
            $ref: '#/components/schemas/metricsBuild'
        nextPageToken:
          type: string
    listMetricsDataAndMetricIDOutput:
      type: object
      properties:
        metricsDataAndIDs:
          type: array
          items:
            $ref: '#/components/schemas/metricsDataAndMetricID'
        nextPageToken:
          type: string
    listParameterSweepsOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        sweeps:
          type: array
          items:
            $ref: '#/components/schemas/parameterSweep'
    listProjectsOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        projects:
          type: array
          items:
            $ref: '#/components/schemas/project'
    listReportLogsOutput:
      type: object
      properties:
        logs:
          type: array
          items:
            $ref: '#/components/schemas/reportLog'
        nextPageToken:
          type: string
    listReportMetricsDataForReportMetricIDsOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        reportMetricsDataAndIDs:
          type: array
          items:
            $ref: '#/components/schemas/reportMetricsDataAndIDs'
    listReportMetricsDataOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        reportMetricsData:
          type: array
          items:
            $ref: '#/components/schemas/metricsData'
    listReportMetricsOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        reportMetrics:
          type: array
          items:
            $ref: '#/components/schemas/metric'
    listReportsOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        reports:
          type: array
          items:
            $ref: '#/components/schemas/report'
        total:
          type: integer
    listSystemsOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        systems:
          type: array
          items:
            $ref: '#/components/schemas/system'
    listTagsForBatchMetricsOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        tags:
          type: array
          items:
            $ref: '#/components/schemas/metricTag'
    listTagsForJobMetricsOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        tags:
          type: array
          items:
            $ref: '#/components/schemas/metricTag'
    listTagsForReportMetricsOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        tags:
          type: array
          items:
            $ref: '#/components/schemas/metricTag'
    listTestSuiteOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        testSuites:
          type: array
          items:
            $ref: '#/components/schemas/testSuite'
    listTestSuiteRevisionsOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        testSuites:
          type: array
          items:
            $ref: '#/components/schemas/testSuite'
    listUsersOutput:
      type: array
      example:
      - joe-smith
      - foobar123
      - bobs-github-username
      items:
        type: string
    listViewObjectsOutput:
      type: object
      properties:
        nextPageToken:
          type: string
        viewSessions:
          type: array
          items:
            $ref: '#/components/schemas/viewObject'
    log:
      type: object
      properties:
        checksum:
          $ref: '#/components/schemas/checksum'
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        executionStep:
          $ref: '#/components/schemas/executionStep'
        fileName:
          $ref: '#/components/schemas/fileName'
        fileSize:
          $ref: '#/components/schemas/fileSize'
        location:
          $ref: '#/components/schemas/logLocation'
        logID:
          $ref: '#/components/schemas/logID'
        logOutputLocation:
          type: string
          format: uri
        logType:
          $ref: '#/components/schemas/logType'
        orgID:
          $ref: '#/components/schemas/orgID'
        userID:
          $ref: '#/components/schemas/userID'
    logID:
      type: string
      format: uuid
    logLocation:
      type: string
      format: uri
    logType:
      type: string
      enum:
      - OTHER_LOG
      - METRICS_OUTPUT_LOG
      - CONTAINER_LOG
      - EXECUTION_LOG
      - MCAP_LOG
      - MP4_LOG
      - ARCHIVE_LOG
    mcapURL:
      type: string
      format: uri
    metric:
      type: object
      properties:
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        dataIDs:
          type: array
          items:
            $ref: '#/components/schemas/metricsDataID'
        eventMetric:
          type: boolean
          description: true if this metric is for an event
        fileLocation:
          $ref: '#/components/schemas/metricLocation'
        metricID:
          $ref: '#/components/schemas/metricID'
        metricURL:
          $ref: '#/components/schemas/metricURL'
        name:
          $ref: '#/components/schemas/metricName'
        orgID:
          $ref: '#/components/schemas/orgID'
        projectID:
          $ref: '#/components/schemas/projectID'
        status:
          $ref: '#/components/schemas/metricStatus'
        type:
          $ref: '#/components/schemas/metricType'
        unit:
          type: string
          nullable: true
        userID:
          $ref: '#/components/schemas/userID'
        value:
          $ref: '#/components/schemas/metricValue'
    metricDataToMetric:
      type: object
      properties:
        metricID:
          $ref: '#/components/schemas/metricID'
        metricsDataIDs:
          type: array
          items:
            $ref: '#/components/schemas/metricsDataID'
    metricID:
      type: string
      format: uuid
    metricLocation:
      type: string
      format: uri
    metricName:
      type: string
    metricStatus:
      type: string
      enum:
      - PASSED
      - FAIL_WARN
      - RAW
      - NOT_APPLICABLE
      - FAIL_BLOCK
      - NO_STATUS_REPORTED
    metricTag:
      type: object
      required:
      - tagID
      - name
      - value
      - creationTimestamp
      properties:
        creationTimestamp:
          type: string
          format: date-time
          readOnly: true
        metricID:
          type: string
          format: uuid
          readOnly: true
        name:
          type: string
        tagID:
          $ref: '#/components/schemas/tagID'
        value:
          type: string
    metricType:
      type: string
      enum:
      - SCALAR
      - COMPOSITE
    metricURL:
      type: string
      format: uri
    metricValue:
      type: number
      format: double
      nullable: true
    metricsBuild:
      type: object
      required:
      - metricsBuildID
      - projectID
      - name
      - version
      - imageUri
      - creationTimestamp
      - userID
      - orgID
      properties:
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        imageUri:
          $ref: '#/components/schemas/metricsBuildImageUri'
        metricsBuildID:
          $ref: '#/components/schemas/metricsBuildID'
        name:
          $ref: '#/components/schemas/metricsBuildName'
        orgID:
          $ref: '#/components/schemas/orgID'
        projectID:
          $ref: '#/components/schemas/projectID'
        userID:
          $ref: '#/components/schemas/userID'
        version:
          $ref: '#/components/schemas/metricsBuildVersion'
    metricsBuildID:
      type: string
      format: uuid
    metricsBuildImageUri:
      type: string
    metricsBuildName:
      type: string
    metricsBuildVersion:
      type: string
    metricsData:
      type: object
      properties:
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        dataID:
          $ref: '#/components/schemas/metricsDataID'
        fileLocation:
          $ref: '#/components/schemas/metricsDataLocation'
        filename:
          type: string
          nullable: true
        metricsDataType:
          $ref: '#/components/schemas/metricsDataType'
        metricsDataURL:
          $ref: '#/components/schemas/metricsDataURL'
        name:
          type: string
        orgID:
          $ref: '#/components/schemas/orgID'
        userID:
          $ref: '#/components/schemas/userID'
    metricsDataAndMetricID:
      type: object
      properties:
        metricID:
          $ref: '#/components/schemas/metricID'
        metricsData:
          $ref: '#/components/schemas/jobMetricsData'
    metricsDataID:
      type: string
      format: uuid
    metricsDataLocation:
      type: string
      format: uri
    metricsDataType:
      type: string
      enum:
      - STANDARD
      - EXTERNAL_FILE
    metricsDataURL:
      type: string
      format: uri
    name:
      type: string
    objectCount:
      type: integer
      format: int32
    objectName:
      type: string
    objectType:
      type: string
      enum:
      - TYPE_FRAME
      - TYPE_SE3
      - TYPE_SO3
      - TYPE_DCURVE_SE3
      - TYPE_TCURVE_SE3
      - TYPE_TRAJECTORY
      - TYPE_FRAMED_VECTOR
    orgID:
      type: string
    parameterSweep:
      type: object
      required:
      - associatedAccount
      properties:
        associatedAccount:
          $ref: '#/components/schemas/associatedAccount'
        batches:
          type: array
          items:
            $ref: '#/components/schemas/batchID'
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        lastUpdatedTimestamp:
          $ref: '#/components/schemas/timestamp'
        name:
          type: string
        orgID:
          $ref: '#/components/schemas/orgID'
        parameterSweepID:
          $ref: '#/components/schemas/parameterSweepID'
        parameters:
          type: array
          items:
            $ref: '#/components/schemas/sweepParameter'
        projectID:
          $ref: '#/components/schemas/projectID'
        status:
          $ref: '#/components/schemas/parameterSweepStatus'
        statusHistory:
          $ref: '#/components/schemas/parameterSweepStatusHistory'
        userID:
          $ref: '#/components/schemas/userID'
    parameterSweepID:
      type: string
      format: uuid
    parameterSweepInput:
      type: object
      properties:
        associatedAccount:
          $ref: '#/components/schemas/associatedAccount'
        buildID:
          $ref: '#/components/schemas/buildID'
        experienceIDs:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/experienceID'
        experienceNames:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/experienceName'
        experienceTagIDs:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/experienceTagID'
        experienceTagNames:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/experienceTagName'
        metricsBuildID:
          $ref: '#/components/schemas/metricsBuildID'
        parameters:
          type: array
          items:
            $ref: '#/components/schemas/sweepParameter'
        poolLabels:
          $ref: '#/components/schemas/poolLabels'
        triggeredVia:
          $ref: '#/components/schemas/triggeredVia'
    parameterSweepStatus:
      type: string
      enum:
      - SUBMITTED
      - RUNNING
      - SUCCEEDED
      - ERROR
    parameterSweepStatusHistory:
      type: array
      items:
        $ref: '#/components/schemas/parameterSweepStatusHistoryType'
    parameterSweepStatusHistoryType:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/parameterSweepStatus'
        updatedAt:
          $ref: '#/components/schemas/timestamp'
    poolLabel:
      type: string
    poolLabels:
      type: array
      items:
        $ref: '#/components/schemas/poolLabel'
    project:
      type: object
      required:
      - projectID
      - name
      - description
      - creationTimestamp
      - userID
      - orgID
      properties:
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        description:
          type: string
        name:
          type: string
        orgID:
          $ref: '#/components/schemas/orgID'
        projectID:
          $ref: '#/components/schemas/projectID'
        userID:
          $ref: '#/components/schemas/userID'
    projectID:
      type: string
      format: uuid
    report:
      type: object
      required:
      - reportID
      - projectID
      - testSuiteID
      - testSuiteRevision
      - respectRevisionBoundary
      - branchID
      - startTimestamp
      - endTimestamp
      - name
      - status
      - statusHistory
      - lastUpdatedTimestamp
      - creationTimestamp
      - metricsBuildID
      - userID
      - orgID
      - associatedAccount
      - outputLocation
      - metricsStatus
      properties:
        associatedAccount:
          $ref: '#/components/schemas/associatedAccount'
        branchID:
          $ref: '#/components/schemas/branchID'
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        endTimestamp:
          $ref: '#/components/schemas/timestamp'
        lastUpdatedTimestamp:
          $ref: '#/components/schemas/timestamp'
        metricsBuildID:
          $ref: '#/components/schemas/metricsBuildID'
        metricsStatus:
          $ref: '#/components/schemas/metricStatus'
        name:
          $ref: '#/components/schemas/name'
        orgID:
          $ref: '#/components/schemas/orgID'
        outputLocation:
          type: string
        projectID:
          $ref: '#/components/schemas/projectID'
        reportID:
          $ref: '#/components/schemas/reportID'
        respectRevisionBoundary:
          $ref: '#/components/schemas/respectRevisionBoundary'
        startTimestamp:
          $ref: '#/components/schemas/timestamp'
        status:
          $ref: '#/components/schemas/reportStatus'
        statusHistory:
          $ref: '#/components/schemas/reportStatusHistory'
        testSuiteID:
          $ref: '#/components/schemas/testSuiteID'
        testSuiteRevision:
          $ref: '#/components/schemas/testSuiteRevision'
        triggeredVia:
          $ref: '#/components/schemas/triggeredVia'
        userID:
          $ref: '#/components/schemas/userID'
    reportID:
      type: string
      format: uuid
    reportInput:
      type: object
      required:
      - testSuiteID
      - branchID
      - startTimestamp
      - metricsBuildID
      properties:
        associatedAccount:
          $ref: '#/components/schemas/associatedAccount'
        branchID:
          $ref: '#/components/schemas/branchID'
        endTimestamp:
          $ref: '#/components/schemas/timestamp'
        metricsBuildID:
          $ref: '#/components/schemas/metricsBuildID'
        name:
          $ref: '#/components/schemas/name'
        respectRevisionBoundary:
          $ref: '#/components/schemas/respectRevisionBoundary'
        startTimestamp:
          $ref: '#/components/schemas/timestamp'
        testSuiteID:
          $ref: '#/components/schemas/testSuiteID'
        testSuiteRevision:
          $ref: '#/components/schemas/testSuiteRevision'
        triggeredVia:
          $ref: '#/components/schemas/triggeredVia'
    reportLog:
      type: object
      required:
      - logID
      - fileName
      - fileSize
      - checksum
      - creationTimestamp
      - location
      - logOutputLocation
      - logType
      - userID
      - orgID
      properties:
        checksum:
          $ref: '#/components/schemas/checksum'
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        fileName:
          $ref: '#/components/schemas/fileName'
        fileSize:
          $ref: '#/components/schemas/fileSize'
        location:
          $ref: '#/components/schemas/logLocation'
        logID:
          $ref: '#/components/schemas/logID'
        logOutputLocation:
          type: string
          format: uri
        logType:
          $ref: '#/components/schemas/logType'
        orgID:
          $ref: '#/components/schemas/orgID'
        userID:
          $ref: '#/components/schemas/userID'
    reportLogInput:
      type: object
      required:
      - fileName
      - fileSize
      - checksum
      - logType
      properties:
        checksum:
          $ref: '#/components/schemas/checksum'
        fileName:
          $ref: '#/components/schemas/fileName'
        fileSize:
          $ref: '#/components/schemas/fileSize'
        logType:
          $ref: '#/components/schemas/logType'
    reportMetricsDataAndIDs:
      type: object
      properties:
        reportMetricID:
          $ref: '#/components/schemas/metricID'
        reportMetricsData:
          $ref: '#/components/schemas/metricsData'
    reportMetricsDataToReportMetric:
      type: object
      properties:
        reportMetricID:
          $ref: '#/components/schemas/metricID'
        reportMetricsDataIDs:
          type: array
          items:
            $ref: '#/components/schemas/metricsDataID'
    reportStatus:
      type: string
      enum:
      - SUBMITTED
      - RUNNING
      - ERROR
      - SUCCEEDED
    reportStatusHistory:
      type: array
      items:
        $ref: '#/components/schemas/reportStatusHistoryType'
    reportStatusHistoryType:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/reportStatus'
        updatedAt:
          $ref: '#/components/schemas/timestamp'
    respectRevisionBoundary:
      type: boolean
    reviseTestSuiteInput:
      type: object
      required:
      - updateMetricsBuild
      properties:
        adhoc:
          type: boolean
        allExperiences:
          type: boolean
        description:
          $ref: '#/components/schemas/testSuiteDescription'
        excludedExperienceIDs:
          type: array
          items:
            $ref: '#/components/schemas/excludedExperienceID'
        experiences:
          type: array
          items:
            $ref: '#/components/schemas/experienceID'
        filters:
          $ref: '#/components/schemas/experienceFilterInput'
        metricsBuildID:
          $ref: '#/components/schemas/metricsBuildID'
        name:
          $ref: '#/components/schemas/testSuiteName'
        systemID:
          $ref: '#/components/schemas/systemID'
        updateMetricsBuild:
          type: boolean
    selectExperiencesInput:
      type: object
      properties:
        allExperiences:
          type: boolean
        experiences:
          type: array
          items:
            $ref: '#/components/schemas/experienceID'
        filters:
          $ref: '#/components/schemas/experienceFilterInput'
    sweepParameter:
      type: object
      properties:
        name:
          type: string
        values:
          type: array
          items:
            type: string
    system:
      type: object
      required:
      - systemID
      - projectID
      - name
      - description
      - build_vcpus
      - build_memory_mib
      - build_gpus
      - build_shared_memory_mb
      - metrics_build_vcpus
      - metrics_build_memory_mib
      - metrics_build_gpus
      - metrics_build_shared_memory_mb
      - creationTimestamp
      - userID
      - orgID
      properties:
        build_gpus:
          type: integer
        build_memory_mib:
          type: integer
        build_shared_memory_mb:
          type: integer
        build_vcpus:
          type: integer
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        description:
          type: string
        metrics_build_gpus:
          type: integer
        metrics_build_memory_mib:
          type: integer
        metrics_build_shared_memory_mb:
          type: integer
        metrics_build_vcpus:
          type: integer
        name:
          type: string
        orgID:
          $ref: '#/components/schemas/orgID'
        projectID:
          $ref: '#/components/schemas/projectID'
        systemID:
          $ref: '#/components/schemas/systemID'
        userID:
          $ref: '#/components/schemas/userID'
    systemID:
      type: string
      format: uuid
    tagID:
      type: string
      format: uuid
      readOnly: true
    testSuite:
      type: object
      required:
      - testSuiteID
      - testSuiteRevision
      - name
      - description
      - projectID
      - systemID
      - experiences
      - userID
      - orgID
      - creationTimestamp
      properties:
        creationTimestamp:
          $ref: '#/components/schemas/timestamp'
        description:
          $ref: '#/components/schemas/testSuiteDescription'
        experiences:
          type: array
          items:
            $ref: '#/components/schemas/experienceID'
        metricsBuildID:
          $ref: '#/components/schemas/metricsBuildID'
        name:
          $ref: '#/components/schemas/testSuiteName'
        orgID:
          $ref: '#/components/schemas/orgID'
        projectID:
          $ref: '#/components/schemas/projectID'
        systemID:
          $ref: '#/components/schemas/systemID'
        testSuiteID:
          $ref: '#/components/schemas/testSuiteID'
        testSuiteRevision:
          $ref: '#/components/schemas/testSuiteRevision'
        userID:
          $ref: '#/components/schemas/userID'
    testSuiteBatchInput:
      type: object
      required:
      - buildID
      properties:
        associatedAccount:
          $ref: '#/components/schemas/associatedAccount'
        buildID:
          $ref: '#/components/schemas/buildID'
        parameters:
          $ref: '#/components/schemas/batchParameters'
        poolLabels:
          $ref: '#/components/schemas/poolLabels'
        triggeredVia:
          $ref: '#/components/schemas/triggeredVia'
    testSuiteBatchSummaryJobResults:
      required:
      - batchID
      - batchCreationTimestamp
      - buildID
      - buildCreationTimestamp
      - metrics
      - total
      - queued
      - running
      - error
      - cancelled
      - blocker
      - warning
      - passed
      properties:
        batchCreationTimestamp:
          $ref: '#/components/schemas/timestamp'
        batchID:
          $ref: '#/components/schemas/batchID'
        blocker:
          type: integer
          format: int64
        buildCreationTimestamp:
          $ref: '#/components/schemas/timestamp'
        buildID:
          $ref: '#/components/schemas/buildID'
        cancelled:
          type: integer
          format: int64
        error:
          type: integer
          format: int64
        metrics:
          type: array
          items:
            $ref: '#/components/schemas/customMetric'
        passed:
          type: integer
          format: int64
        queued:
          type: integer
          format: int64
        running:
          type: integer
          format: int64
        total:
          type: integer
          format: int64
        warning:
          type: integer
          format: int64
    testSuiteDescription:
      type: string
    testSuiteID:
      type: string
      format: uuid
    testSuiteName:
      type: string
    testSuiteRevision:
      type: integer
      format: int32
    testSuiteSummary:
      type: object
      required:
      - name
      - testSuiteID
      - testSuiteRevision
      - projectID
      - systemID
      - branchID
      - reportID
      - summary
      - batches
      properties:
        batches:
          type: array
          items:
            $ref: '#/components/schemas/testSuiteBatchSummaryJobResults'
        branchID:
          $ref: '#/components/schemas/branchID'
        name:
          $ref: '#/components/schemas/testSuiteName'
        projectID:
          $ref: '#/components/schemas/projectID'
        reportID:
          $ref: '#/components/schemas/reportID'
        summary:
          type: object
          required:
          - fixedTests
          - newTests
          - newIssues
          properties:
            fixedTests:
              type: integer
              format: int64
            newIssues:
              type: integer
              format: int64
            newTests:
              type: integer
              format: int64
        systemID:
          $ref: '#/components/schemas/systemID'
        testSuiteID:
          $ref: '#/components/schemas/testSuiteID'
        testSuiteRevision:
          $ref: '#/components/schemas/testSuiteRevision'
    testSuiteSummaryOutput:
      type: object
      required:
      - testSuites
      - nextPageToken
      properties:
        nextPageToken:
          type: string
        testSuites:
          type: array
          items:
            $ref: '#/components/schemas/testSuiteSummary'
    timestamp:
      type: string
      format: date-time
    triggeredVia:
      type: string
      enum:
      - LOCAL
      - WEBAPP
      - GITLAB
      - GITHUB
    updateBatchInput:
      type: object
      required:
      - description
      properties:
        description:
          type: string
    updateEventInput:
      type: object
      required:
      - description
      properties:
        description:
          type: string
    updateExperienceFields:
      type: object
      properties:
        description:
          type: string
        location:
          type: string
        name:
          $ref: '#/components/schemas/experienceName'
    updateExperienceInput:
      type: object
      properties:
        experience:
          $ref: '#/components/schemas/updateExperienceFields'
        updateMask:
          $ref: '#/components/schemas/updateMask'
    updateExperienceTagFields:
      type: object
      properties:
        description:
          type: string
        name:
          $ref: '#/components/schemas/experienceTagName'
    updateExperienceTagInput:
      type: object
      properties:
        experienceTag:
          $ref: '#/components/schemas/updateExperienceTagFields'
        updateMask:
          $ref: '#/components/schemas/updateMask'
    updateJobInput:
      type: object
      required:
      - description
      properties:
        description:
          type: string
    updateMask:
      type: array
      items:
        type: string
    updateProjectFields:
      type: object
      properties:
        description:
          type: string
        name:
          type: string
    updateProjectInput:
      type: object
      properties:
        project:
          $ref: '#/components/schemas/updateProjectFields'
        updateMask:
          $ref: '#/components/schemas/updateMask'
    updateSystemFields:
      type: object
      properties:
        build_gpus:
          type: integer
        build_memory_mib:
          type: integer
        build_shared_memory_mb:
          type: integer
        build_vcpus:
          type: integer
        description:
          type: string
        metrics_build_gpus:
          type: integer
        metrics_build_memory_mib:
          type: integer
        metrics_build_shared_memory_mb:
          type: integer
        metrics_build_vcpus:
          type: integer
        name:
          type: string
    updateSystemInput:
      type: object
      properties:
        system:
          $ref: '#/components/schemas/updateSystemFields'
        updateMask:
          $ref: '#/components/schemas/updateMask'
    userID:
      type: string
    viewMetadata:
      type: object
      properties:
        fileName:
          $ref: '#/components/schemas/fileName'
        lineNumber:
          $ref: '#/components/schemas/lineNumber'
        objectName:
          $ref: '#/components/schemas/objectName'
        objectType:
          $ref: '#/components/schemas/objectType'
    viewObject:
      type: object
      properties:
        friendlyName:
          $ref: '#/components/schemas/friendlyName'
        mcapURL:
          $ref: '#/components/schemas/mcapURL'
        objectCount:
          $ref: '#/components/schemas/objectCount'
        orgID:
          $ref: '#/components/schemas/orgID'
        userID:
          $ref: '#/components/schemas/userID'
        viewSessionID:
          $ref: '#/components/schemas/viewSessionID'
        viewTimestamp:
          $ref: '#/components/schemas/timestamp'
        viewURL:
          type: string
          format: uri
    viewObjectAndMetadata:
      type: object
      properties:
        viewMetadata:
          type: array
          items:
            $ref: '#/components/schemas/viewMetadata'
        viewObject:
          $ref: '#/components/schemas/viewObject'
    viewSessionID:
      type: string
      format: uuid
    viewSessionUpdate:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/viewSessionID'
        mcap:
          $ref: '#/components/schemas/mcapURL'
        view:
          type: string
          format: uri
          description: A link to view the session.
    viewUpdateID:
      type: integer
      readOnly: true
  parameters:
    orderBy:
      name: orderBy
      in: query
      schema:
        type: string
    pageSize:
      name: pageSize
      in: query
      schema:
        type: integer
        minimum: 1
        maximum: 100
    pageToken:
      name: pageToken
      in: query
      schema:
        type: string
  responses:
    alreadyExists:
      description: The resource already exists.
    badRequest:
      description: The request contained one or more errors.
    forbidden:
      description: The user does not have adequate privileges.
    insufficientQuota:
      description: Current quota is insufficient for this operation
    notFound:
      description: The resource could not be found.
    unauthenticated:
      description: Access token is missing or invalid.
  securitySchemes:
    OAuth:
      type: oauth2
      description: This API uses OAuth 2
      flows:
        implicit:
          authorizationUrl: https://resim.us.auth0.com/authorize
          scopes:
            batches:read: Read batch data.
            batches:write: Write batch data.
            builds:read: Read build data.
            builds:write: Write build data.
            experienceTags:read: Read experience tag data.
            experienceTags:write: Write experience tag data.
            experiences:read: Read experience data.
            experiences:write: Write experience data.
            projects:read: Read project data.
            projects:write: Write project data.
            reports:read: Read report data.
            reports:write: Write report data.
            sweeps:read: Read sweep data.
            sweeps:write: Write sweep data.
            systems:read: Read system data.
            systems:write: Write system data.
            view:read: Read view data.
            view:write: Write view data.
        clientCredentials:
          tokenUrl: https://resim.us.auth0.com/oauth/token
          scopes:
            batches:read: Read batch data.
            batches:write: Write batch data.
            builds:read: Read build data.
            builds:write: Write build data.
            experienceTags:read: Read experience tag data.
            experienceTags:write: Write experience tag data.
            experiences:read: Read experience data.
            experiences:write: Write experience data.
            projects:read: Read project data.
            projects:write: Write project data.
            reports:read: Read report data.
            reports:write: Write report data.
            sweeps:read: Read sweep data.
            sweeps:write: Write sweep data.
            systems:read: Read system data.
            systems:write: Write system data.
            view:read: Read view data.
            view:write: Write view data.
        authorizationCode:
          authorizationUrl: https://resim.us.auth0.com/authorize
          tokenUrl: https://resim.us.auth0.com/oauth/token
          refreshUrl: https://resim.us.auth0.com/oauth/token
          scopes:
            batches:read: Read batch data.
            batches:write: Write batch data.
            builds:read: Read build data.
            builds:write: Write build data.
            experienceTags:read: Read experience tag data.
            experienceTags:write: Write experience tag data.
            experiences:read: Read experience data.
            experiences:write: Write experience data.
            projects:read: Read project data.
            projects:write: Write project data.
            reports:read: Read report data.
            reports:write: Write report data.
            sweeps:read: Read sweep data.
            sweeps:write: Write sweep data.
            systems:read: Read system data.
            systems:write: Write system data.
            view:read: Read view data.
            view:write: Write view data.
info:
  title: ReRun API
  version: "0.1"
paths:
  /health:
    get:
      tags:
      - health
      description: Returns whether the service is healthy or not.
      operationId: health
      responses:
        "200":
          description: OK
  /projects:
    get:
      tags:
      - projects
      description: Returns the list of projects.
      operationId: listProjects
      parameters:
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listProjectsOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - projects:read
    post:
      tags:
      - projects
      description: Adds a project.
      operationId: createProject
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createProjectInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/project'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "409":
          $ref: '#/components/responses/alreadyExists'
      security:
      - OAuth:
        - projects:write
  /projects/{projectID}:
    delete:
      tags:
      - projects
      description: Deletes a project.
      operationId: deleteProject
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      responses:
        "204":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - projects:write
    get:
      tags:
      - projects
      description: Returns a specific project.
      operationId: getProject
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/project'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - projects:read
    patch:
      tags:
      - projects
      description: Updates the project.
      operationId: updateProject
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updateProjectInput'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/project'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - projects:write
  /projects/{projectID}/batches:
    get:
      tags:
      - batches
      description: List the batches.
      operationId: listBatches
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: search
        in: query
        description: Filter based on branch_id, build_id, system_id, created_at, status,
          metrics_status, batch_id
        schema:
          type: string
        example: branch_id = "71b96a67-9990-426b-993e-0f3d9c6bbe48" AND created_at
          > "2024-01-01T00:00:00Z"
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBatchesOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - batches
      description: Adds a batch.  ID should be omitted and will be returned in the
        response.
      operationId: CreateBatch
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/batchInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batch'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "402":
          $ref: '#/components/responses/insufficientQuota'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/-/jobs:
    get:
      tags:
      - batches
      description: List jobs across all batches in a project
      operationId: listAllJobs
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: search
        in: query
        description: Filter based on attributes metrics_build_name and metrics_build_version
        schema:
          type: string
        example: metrics_build_name IN ("hello world") AND metrics_build_version IN
          ("1.0", "1.1")
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listAllJobsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/batches/{batchID}:
    get:
      tags:
      - batches
      description: Returns a batch.
      operationId: getBatch
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batch'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    patch:
      tags:
      - batches
      description: Updates the batch.
      operationId: updateBatch
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updateBatchInput'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batch'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/:cancel:
    post:
      tags:
      - batches
      description: Cancels a batch.
      operationId: cancelBatch
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      responses:
        "200":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/jobs:
    get:
      tags:
      - batches
      description: List the jobs in the given batch.
      operationId: listJobs
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: status
        in: query
        description: Filter jobs by status
        schema:
          $ref: '#/components/schemas/jobStatus'
      - name: conflatedStatus
        in: query
        description: Filter jobs by their conflated status
        explode: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/conflatedJobStatus'
      - name: name
        in: query
        description: Filter experiences (in job) by name
        schema:
          type: string
      - name: text
        in: query
        description: Filter experiences (in job) by a text string on name and description
        schema:
          type: string
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listJobsOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/batches/{batchID}/jobs/{jobID}:
    get:
      tags:
      - batches
      description: Retrieve the given job.
      operationId: getJob
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/job'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    patch:
      tags:
      - batches
      description: Updates the job.
      operationId: updateJob
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updateJobInput'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/job'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/jobs/{jobID}/events:
    get:
      tags:
      - batches
      - metrics
      description: Lists the events for a given job. Does not return associated data.
      operationId: listEventsForJob
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listJobEventsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - batches
      - metrics
      description: Register an event
      operationId: createEvent
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/eventInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/event'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/jobs/{jobID}/events/{eventID}:
    get:
      tags:
      - batches
      - metrics
      description: Retrieve a single event. Does not return associated data.
      operationId: getEventForJob
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - name: eventID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/eventID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/event'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    patch:
      tags:
      - batches
      - metrics
      description: Updates the event.
      operationId: updateEvent
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - name: eventID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/eventID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updateEventInput'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/event'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/jobs/{jobID}/logs:
    get:
      tags:
      - batches
      description: List the logs associated with a given job
      operationId: listJobLogsForJob
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - name: type
        in: query
        schema:
          type: array
          items:
            $ref: '#/components/schemas/logType'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listJobLogsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - batches
      description: Adds a log.  ID should be omitted and will be returned in the response.
      operationId: createJobLog
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/jobLog'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/jobLog'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/jobs/{jobID}/logs/{logID}:
    delete:
      tags:
      - batches
      description: Deletes a log.
      operationId: deleteJobLog
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - name: logID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/logID'
      responses:
        "204":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
    get:
      tags:
      - batches
      description: Get an individual log file
      operationId: getJobLog
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - name: logID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/logID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/jobLog'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/batches/{batchID}/jobs/{jobID}/metrics:
    get:
      tags:
      - batches
      - metrics
      description: Lists the metrics for a given job. Does not return associated data.
      operationId: listMetricsForJob
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listJobMetricsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - batches
      - metrics
      description: Adds a metric. ID and location should be omitted and will be returned
        in the response.
      operationId: createMetric
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/jobMetric'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/jobMetric'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/jobs/{jobID}/metrics/{metricID}:
    get:
      tags:
      - batches
      - metrics
      description: Lists the metrics associated with given metric IDs
      operationId: listMetricsForMetricIDs
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - name: metricID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/metricID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listJobMetricsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/batches/{batchID}/jobs/{jobID}/metrics/{metricID}/metricsData:
    get:
      tags:
      - batches
      - metrics
      description: Returns the metrics data associated with given metric ID(s)
      operationId: listMetricsDataForMetricIDs
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - name: metricID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/metricID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listMetricsDataAndMetricIDOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - batches
      - metrics
      description: Adds metrics data (IDs) to a given metric
      operationId: addMetricsDataToMetric
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - name: metricID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/metricID'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/metricsDataID'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/metricDataToMetric'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/jobs/{jobID}/metrics/{metricID}/tags:
    get:
      tags:
      - metrics
      - tags
      description: List the tags associated to the given job metric id(s)
      operationId: listTagsForJobMetrics
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - name: metricID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/metricID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listTagsForJobMetricsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - tags
      description: Adds tags to the given job metric
      operationId: createJobMetricTags
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - name: metricID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/metricID'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/metricTag'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/metricTag'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/jobs/{jobID}/metricsData:
    get:
      tags:
      - batches
      - metrics
      description: Returns the metrics data associated with a given job ID
      operationId: listMetricsDataForJob
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listJobMetricsDataOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - batches
      - metrics
      description: Creates a new metrics data associated with a job. If this metrics
        data is an external file, then the filename field must be populated.
      operationId: createMetricsData
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/jobMetricsData'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/jobMetricsData'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/batches/{batchID}/jobs/{jobID}/metricsData/{metricsDataID}:
    get:
      tags:
      - batches
      - metrics
      description: Lists the metrics data associated with given metrics data IDs
      operationId: listMetricsDataForMetricsDataIDs
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      - name: metricsDataID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/metricsDataID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listJobMetricsDataOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/batches/{batchID}/jobs/{jobID}/metricsStatus:
    post:
      tags:
      - batches
      - metrics
      description: Updates a job's metrics status.
      operationId: updateJobMetricsStatus
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: jobID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/jobID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/metricStatus'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/job'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/logs:
    get:
      tags:
      - batches
      description: List the logs associated with a given batch
      operationId: listBatchLogsForBatch
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBatchLogsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - batches
      description: Adds a log.  ID should be omitted and will be returned in the response.
      operationId: createBatchLog
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/batchLog'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batchLog'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/logs/{logID}:
    delete:
      tags:
      - batches
      description: Deletes a log.
      operationId: deleteBatchLog
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: logID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/logID'
      responses:
        "204":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
    get:
      tags:
      - batches
      description: Get an individual log file
      operationId: getBatchLog
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: logID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/logID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batchLog'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/batches/{batchID}/metrics:
    get:
      tags:
      - batches
      - metrics
      description: Lists the (batch) metrics for a given batch. Does not return associated
        data.
      operationId: listBatchMetrics
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBatchMetricsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - batches
      - metrics
      description: Adds a batch metric. ID and location should be omitted and will
        be returned in the response.
      operationId: createBatchMetric
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/batchMetric'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batchMetric'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/metrics/{metricID}:
    get:
      tags:
      - batches
      - metrics
      description: Lists the batch metrics associated with given batch metric IDs
      operationId: listBatchMetricsForBatchMetricIDs
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: metricID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/metricID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBatchMetricsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/batches/{batchID}/metrics/{metricID}/metricsData:
    get:
      tags:
      - batches
      - metrics
      description: Returns the batch metrics data associated with given batch metric
        ID(s)
      operationId: listBatchMetricsDataForBatchMetricIDs
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: metricID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/metricID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBatchMetricsDataForBatchMetricIDsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - batches
      - metrics
      description: Adds batch metrics data (IDs) to a given batch metric
      operationId: addBatchMetricsDataToBatchMetric
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: metricID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/metricID'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/metricsDataID'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batchMetricsDataToBatchMetric'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/metrics/{metricID}/tags:
    get:
      tags:
      - metrics
      - tags
      description: List the tags associated to the given metric id(s)
      operationId: listTagsForBatchMetrics
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: metricID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/metricID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listTagsForBatchMetricsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - tags
      description: Adds tags to the given batch metric
      operationId: createBatchMetricTags
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: metricID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/metricID'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/metricTag'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/metricTag'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/{batchID}/metricsData:
    get:
      tags:
      - batches
      - metrics
      description: Returns the metrics data associated with a given batch ID
      operationId: listBatchMetricsData
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBatchMetricsDataOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - batches
      - metrics
      description: Creates a new metrics data associated with a batch. If this metrics
        data is an external file, then the filename field must be populated.
      operationId: createBatchMetricsData
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/batchMetricsData'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batchMetricsData'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/batches/{batchID}/metricsData/{metricsDataID}:
    get:
      tags:
      - batches
      - metrics
      description: Lists the batch metrics data associated with given batch metrics
        data IDs
      operationId: listBatchMetricsDataForBatchMetricsDataIDs
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      - name: metricsDataID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/metricsDataID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBatchMetricsDataOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/batches/{batchID}/metricsStatus:
    post:
      tags:
      - batches
      - metrics
      description: Updates a batch's metrics status.
      operationId: updateBatchMetricsStatus
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: batchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/batchID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/metricStatus'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batch'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/batches/accounts:
    get:
      tags:
      - batches
      description: Get all the account names that have triggered batches in the given
        project. These usernames are collected automatically from CI systems.
      operationId: listBatchAccounts
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listUsersOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/branches:
    get:
      tags:
      - projects
      description: Returns the list of branches for a project.
      operationId: listBranchesForProject
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: name
        in: query
        description: Filter branches by name
        schema:
          type: string
      - name: branchType
        in: query
        description: Filter branches by branchType
        schema:
          $ref: '#/components/schemas/branchType'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBranchesOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - projects:read
    post:
      tags:
      - projects
      description: Adds a branch for a project.
      operationId: createBranchForProject
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createBranchInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/branch'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "409":
          $ref: '#/components/responses/alreadyExists'
      security:
      - OAuth:
        - projects:write
  /projects/{projectID}/branches/{branchID}:
    delete:
      tags:
      - projects
      description: Deletes a branch for a project.
      operationId: deleteBranchForProject
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: branchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/branchID'
      responses:
        "204":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - projects:write
    get:
      tags:
      - projects
      description: Returns a specific branch for a project.
      operationId: getBranchForProject
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: branchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/branchID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/branch'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - projects:read
  /projects/{projectID}/branches/{branchID}/builds:
    get:
      tags:
      - builds
      description: Returns the list of builds for a branch.
      operationId: listBuildsForBranches
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: branchID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/branchID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBuildsOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - builds:read
    post:
      tags:
      - builds
      description: Adds a build.
      operationId: createBuildForBranch
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: branchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/branchID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createBuildForBranchInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/build'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - builds:write
  /projects/{projectID}/branches/{branchID}/builds/{buildID}:
    delete:
      tags:
      - builds
      description: Delete a build.
      operationId: deleteBuildForBranch
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: branchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/branchID'
      - name: buildID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/buildID'
      responses:
        "204":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - builds:write
    get:
      tags:
      - builds
      description: Returns a specific build for a branch.
      operationId: getBuildForBranch
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: branchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/branchID'
      - name: buildID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/buildID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/build'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - builds:read
  /projects/{projectID}/branches/{branchID}/builds/{buildID}/batches:
    get:
      tags:
      - batches
      description: Returns the batches for a build.
      operationId: listBatchesForBuilds
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: branchID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/branchID'
      - name: buildID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/buildID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBatchesOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/builds:
    get:
      tags:
      - builds
      description: Returns the list of builds.
      operationId: listBuilds
      parameters:
      - name: search
        in: query
        description: A search query. Supports searching by branch_id
        schema:
          type: string
        example: branch_id = "71b96a67-9990-426b-993e-0f3d9c6bbe48"
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBuildsOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - builds:read
  /projects/{projectID}/builds/{buildID}:
    get:
      tags:
      - builds
      description: Returns a specific build.
      operationId: getBuild
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: buildID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/buildID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/build'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - builds:read
  /projects/{projectID}/experienceTags:
    get:
      tags:
      - experience tags
      description: Returns a list of all experience tags.
      operationId: listExperienceTags
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: name
        in: query
        description: Filter experience tags by name. It is recommended to use orderBy=rank,
          so you get the most relevant results first.
        schema:
          type: string
      - name: orderBy
        in: query
        schema:
          type: string
          enum:
          - id
          - timestamp
          - rank
          default: id
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listExperienceTagsOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - experienceTags:read
    post:
      tags:
      - experience tags
      description: Adds an experience tag.
      operationId: createExperienceTag
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createExperienceTagInput'
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/experienceTag'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "409":
          $ref: '#/components/responses/alreadyExists'
      security:
      - OAuth:
        - experienceTags:write
  /projects/{projectID}/experienceTags/{experienceTagID}:
    delete:
      tags:
      - experience tags
      description: Deletes an experience tag.
      operationId: deleteExperienceTag
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: experienceTagID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceTagID'
      responses:
        "204":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - experienceTags:write
    get:
      tags:
      - experience tags
      description: Returns a specific experience tag.
      operationId: getExperienceTag
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: experienceTagID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceTagID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/experienceTag'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - experienceTags:read
    patch:
      tags:
      - experience tags
      description: Updates the experience tag.  Experience membership cannot be changed
        with this method.
      operationId: updateExperienceTag
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: experienceTagID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceTagID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updateExperienceTagInput'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/experienceTag'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - experienceTags:write
  /projects/{projectID}/experienceTags/{experienceTagID}/experiences:
    get:
      tags:
      - experience tags
      description: Returns a list of all experiences with the given experience tag.
      operationId: listExperiencesWithExperienceTag
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: experienceTagID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceTagID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listExperiencesOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - experienceTags:read
  /projects/{projectID}/experienceTags/{experienceTagID}/experiences/{experienceID}:
    delete:
      tags:
      - experience tags
      description: Removes the given experience tag from the given experience.
      operationId: removeExperienceTagFromExperience
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: experienceTagID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceTagID'
      - name: experienceID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceID'
      responses:
        "204":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - experienceTags:write
    post:
      tags:
      - experience tags
      description: Adds the given experience tag to the given experience.
      operationId: addExperienceTagToExperience
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: experienceTagID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceTagID'
      - name: experienceID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceID'
      responses:
        "201":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
        "409":
          $ref: '#/components/responses/alreadyExists'
      security:
      - OAuth:
        - experienceTags:write
  /projects/{projectID}/experienceTags/addExperiences:
    post:
      tags:
      - experience tags
      description: Registers the given experiences as applicable for the experience
        tags
      operationId: addTagsToExperiences
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/addTagsToExperiencesInput'
      responses:
        "201":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
        "409":
          $ref: '#/components/responses/alreadyExists'
      security:
      - OAuth:
        - experienceTags:write
  /projects/{projectID}/experiences:
    get:
      tags:
      - experiences
      description: Returns the list of experiences.
      operationId: listExperiences
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: name
        in: query
        description: Filter experiences by name
        schema:
          type: string
      - name: text
        in: query
        description: Filter experiences by a text string on experience name, experience
          description, or experience tag name
        schema:
          type: string
      - name: search
        in: query
        description: A search query. Supports searching by tag_id, test_suite_id and
          system_id
        schema:
          type: string
        example: tag_id IN ("71b96a67-9990-426b-993e-0f3d9c6bbe48")
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listExperiencesOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - experiences:read
    post:
      tags:
      - experiences
      description: Adds an experience.
      operationId: createExperience
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createExperienceInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/experience'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "409":
          $ref: '#/components/responses/alreadyExists'
      security:
      - OAuth:
        - experiences:write
  /projects/{projectID}/experiences/{experienceID}:
    delete:
      tags:
      - experiences
      description: Deletes an experience.
      operationId: deleteExperience
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: experienceID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceID'
      responses:
        "204":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - experiences:write
    get:
      tags:
      - experiences
      description: Returns a specific experience.
      operationId: getExperience
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: experienceID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/experience'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - experiences:read
    patch:
      tags:
      - experiences
      description: Updates the experience.
      operationId: updateExperience
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: experienceID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updateExperienceInput'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/experience'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - experiences:write
  /projects/{projectID}/experiences/{experienceID}/experienceTags:
    get:
      tags:
      - experiences
      description: Returns a list of experience tags associated with a given experience.
      operationId: listExperienceTagsForExperience
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: experienceID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listExperienceTagsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - experiences:read
  /projects/{projectID}/experiences/{experienceID}/systems:
    get:
      tags:
      - experiences
      description: Returns the systems for a given experience
      operationId: getSystemsForExperience
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: experienceID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listSystemsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - experiences:read
  /projects/{projectID}/metricsBuilds:
    get:
      tags:
      - metricsBuilds
      description: Returns the list of metrics builds.
      operationId: listMetricsBuilds
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: query
        description: A search query. Supports searching by system_id
        schema:
          type: string
          format: uuid
        example: system_id = "71b96a67-9990-426b-993e-0f3d9c6bbe48"
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listMetricsBuildOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - builds:read
    post:
      tags:
      - metricsBuilds
      description: Adds a metrics build.
      operationId: createMetricsBuild
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createMetricsBuildInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/metricsBuild'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "409":
          $ref: '#/components/responses/alreadyExists'
      security:
      - OAuth:
        - builds:write
  /projects/{projectID}/metricsBuilds/{metricsBuildID}:
    get:
      tags:
      - metricsBuilds
      description: Returns a specific metrics build.
      operationId: getMetricsBuild
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: metricsBuildID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/metricsBuildID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/metricsBuild'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - builds:read
  /projects/{projectID}/metricsBuilds/{metricsBuildID}/systems:
    get:
      tags:
      - metricsBuilds
      description: Returns the systems for a given metrics build
      operationId: getSystemsForMetricsBuild
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: metricsBuildID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/metricsBuildID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listSystemsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - builds:read
  /projects/{projectID}/reports:
    get:
      tags:
      - reports
      description: List the reports.
      operationId: listReports
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: search
        in: query
        description: Filter based on branch_id, test_suite_id, created_at, status,
          associated_account
        schema:
          type: string
        example: branch_id = "71b96a67-9990-426b-993e-0f3d9c6bbe48" AND created_at
          > "2024-01-01T00:00:00Z"
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listReportsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - reports:read
    post:
      tags:
      - reports
      description: Adds a report. If the user supplies a name parameter, that name
        will be used, otherwise a name will be generated. The end timestamp is optional
        and will default to now(). The respectRevisionBoundary field enables strict
        report generation from only the defined testSuiteRevision.
      operationId: CreateReport
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/reportInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/report'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "402":
          $ref: '#/components/responses/insufficientQuota'
      security:
      - OAuth:
        - reports:write
  /projects/{projectID}/reports/{reportID}:
    get:
      tags:
      - reports
      description: Returns a report.
      operationId: getReport
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/report'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - reports:read
  /projects/{projectID}/reports/{reportID}/logs:
    get:
      tags:
      - reports
      description: List the logs associated with a given report
      operationId: listLogsForReport
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listReportLogsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - reports:read
    post:
      tags:
      - reports
      description: Adds a log
      operationId: createReportLog
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/reportLogInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/reportLog'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - reports:write
  /projects/{projectID}/reports/{reportID}/logs/{logID}:
    get:
      tags:
      - reports
      description: Get an individual log file
      operationId: getReportLog
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      - name: logID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/logID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/reportLog'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - reports:read
  /projects/{projectID}/reports/{reportID}/metrics:
    get:
      tags:
      - reports
      - metrics
      description: Lists the metrics for a given report. Does not return associated
        data.
      operationId: listReportMetrics
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listReportMetricsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - reports:read
    post:
      tags:
      - reports
      - metrics
      description: Adds a report metric. ID and location should be omitted and will
        be returned in the response.
      operationId: createReportMetric
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/metric'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/metric'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - reports:write
  /projects/{projectID}/reports/{reportID}/metrics/{metricID}:
    get:
      tags:
      - reports
      - metrics
      description: Lists the report metrics associated with given report metric IDs
      operationId: listReportMetricsForReportMetricIDs
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      - name: metricID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/metricID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listReportMetricsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - reports:read
  /projects/{projectID}/reports/{reportID}/metrics/{metricID}/metricsData:
    get:
      tags:
      - reports
      - metrics
      description: Returns the report metrics data associated with given report metric
        ID(s)
      operationId: listReportMetricsDataForReportMetricIDs
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      - name: metricID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/metricID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listReportMetricsDataForReportMetricIDsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - reports:read
    post:
      tags:
      - reports
      - metrics
      description: Adds report metrics data (IDs) to a given report metric
      operationId: addReportMetricsDataToReportMetric
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      - name: metricID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/metricID'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/metricsDataID'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/reportMetricsDataToReportMetric'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - reports:write
  /projects/{projectID}/reports/{reportID}/metrics/{metricID}/tags:
    get:
      tags:
      - reports
      - metrics
      description: Lists the tags associated with given report metric IDs
      operationId: listTagsForReportMetrics
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      - name: metricID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/metricID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listTagsForReportMetricsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - reports:read
    post:
      tags:
      - reports
      - metrics
      description: Adds tags to the given report metric
      operationId: createReportMetricTags
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      - name: metricID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: string
          format: uuid
          minItems: 1
          items:
            $ref: '#/components/schemas/metricID'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/metricTag'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/metricTag'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - reports:write
  /projects/{projectID}/reports/{reportID}/metricsData:
    get:
      tags:
      - reports
      - metrics
      description: Returns the metrics data associated with a given report ID
      operationId: listReportMetricsData
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listReportMetricsDataOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - reports:read
    post:
      tags:
      - reports
      - metrics
      description: Creates a new metrics data associated with a report. If this metrics
        data is an external file, then the filename field must be populated.
      operationId: createReportMetricsData
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/metricsData'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/metricsData'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - reports:read
  /projects/{projectID}/reports/{reportID}/metricsData/{metricsDataID}:
    get:
      tags:
      - reports
      - metrics
      description: Lists the report metrics data associated with given report metrics
        data IDs
      operationId: listReportMetricsDataForReportMetricsDataIDs
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      - name: metricsDataID
        in: path
        style: simple
        explode: false
        required: true
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/metricsDataID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listReportMetricsDataOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - reports:read
  /projects/{projectID}/reports/{reportID}/metricsStatus:
    post:
      tags:
      - reports
      - metrics
      description: Updates a report's metrics status.
      operationId: updateReportMetricsStatus
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: reportID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/reportID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/metricStatus'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/report'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - reports:write
  /projects/{projectID}/reports/accounts:
    get:
      tags:
      - reports
      description: Get all the account names that have triggered reports in the given
        project. These usernames are collected automatically from CI systems.
      operationId: listReportAccounts
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listUsersOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - reports:read
  /projects/{projectID}/suites:
    get:
      tags:
      - test_suites
      description: Returns the list of test suites at their latest revision
      operationId: listTestSuites
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: experienceIDs
        in: query
        description: Only return test suites that contain the given experience id(s)
        style: form
        explode: false
        schema:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/experienceID'
      - name: systemID
        in: query
        description: Only return test suites that contain the given system id
        schema:
          type: string
          format: uuid
      - name: name
        in: query
        description: Filter test suites by name
        schema:
          type: string
      - name: text
        in: query
        description: Filter test suites by a text string on name and description
        schema:
          type: string
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listTestSuiteOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - test_suites
      description: Adds a test suite for a project.
      operationId: createTestSuite
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createTestSuiteInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/testSuite'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "409":
          $ref: '#/components/responses/alreadyExists'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/suites/{testSuiteID}:
    get:
      tags:
      - test_suites
      description: Returns a specific test suite's latest revision.
      operationId: getTestSuite
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: testSuiteID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/testSuite'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
    patch:
      tags:
      - test_suites
      description: Revise a test suite, generating a new revision. Supply a false
        value for ad-hoc to convert an existing ad hoc test suite to a full test suite.
      operationId: reviseTestSuite
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: testSuiteID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/reviseTestSuiteInput'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/testSuite'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/suites/{testSuiteID}/addExperiences:
    patch:
      tags:
      - test_suites
      description: Add experiences to a test suite. This will generate a new test
        suite revision.
      operationId: addExperiencesToTestSuite
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: testSuiteID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/selectExperiencesInput'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/testSuite'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/suites/{testSuiteID}/batches:
    get:
      tags:
      - batches
      description: List the batches for a test suite (all revisions).
      operationId: listBatchesForTestSuite
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: testSuiteID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBatchesOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - batches
      description: Creates a batch for that test suite
      operationId: CreateBatchForTestSuite
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: testSuiteID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/testSuiteBatchInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batch'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "402":
          $ref: '#/components/responses/insufficientQuota'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/suites/{testSuiteID}/removeExperiences:
    patch:
      tags:
      - test_suites
      description: Remove experiences from a test suite. This will generate a new
        test suite revision.
      operationId: removeExperiencesFromTestSuite
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: testSuiteID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/selectExperiencesInput'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/testSuite'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/suites/{testSuiteID}/revisions:
    get:
      tags:
      - test_suites
      description: Returns all the revisions of a specific test suite.
      operationId: listTestSuiteRevisions
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: testSuiteID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listTestSuiteRevisionsOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/suites/{testSuiteID}/revisions/{revision}:
    get:
      tags:
      - test_suites
      description: Returns a specified revision of a test suite.
      operationId: getTestSuiteRevision
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: testSuiteID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteID'
      - name: revision
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteRevision'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/testSuite'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/suites/{testSuiteID}/revisions/{revision}/batches:
    get:
      tags:
      - batches
      description: List the batches for a test suite revision
      operationId: listBatchesForTestSuiteRevision
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: testSuiteID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteID'
      - name: revision
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteRevision'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBatchesOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - batches:read
    post:
      tags:
      - batches
      description: Creates a batch for that test suite revision
      operationId: CreateBatchForTestSuiteRevision
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: testSuiteID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteID'
      - name: revision
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/testSuiteRevision'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/testSuiteBatchInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/batch'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "402":
          $ref: '#/components/responses/insufficientQuota'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/suites/addExperiences:
    post:
      tags:
      - test_suites
      description: Add experiences to test suites. This will generate a new test suite
        revision.
      operationId: addTestSuitesToExperiences
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/addSuitesToExperiencesInput'
      responses:
        "201":
          description: Created
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - batches:write
  /projects/{projectID}/suites/summary:
    get:
      tags:
      - test_suites
      description: Returns an overview of test suites and high-level performance data.
        A test suite will only be returned if it has 1 or more reports on the main
        branch assocated to it.
      operationId: getTestSuiteSummary
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/testSuiteSummaryOutput'
      security:
      - OAuth:
        - batches:read
  /projects/{projectID}/sweeps:
    get:
      tags:
      - parameterSweeps
      description: Returns the list of parameter sweeps.
      operationId: listParameterSweeps
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listParameterSweepsOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - sweeps:read
    post:
      tags:
      - parameterSweeps
      description: Adds a parameter sweep.  ID should be omitted and will be returned
        in the response.
      operationId: createParameterSweep
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/parameterSweepInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/parameterSweep'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - sweeps:write
  /projects/{projectID}/sweeps/{sweepID}:
    get:
      tags:
      - parameterSweeps
      description: Returns a specific parameter sweep.
      operationId: getParameterSweep
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: sweepID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/parameterSweepID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/parameterSweep'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - sweeps:read
  /projects/{projectID}/sweeps/{sweepID}/:cancel:
    post:
      tags:
      - parameterSweeps
      description: Cancels a parameter sweep.
      operationId: cancelParameterSweep
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: sweepID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/parameterSweepID'
      responses:
        "200":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - sweeps:write
  /projects/{projectID}/sweeps/accounts:
    get:
      tags:
      - parameterSweeps
      description: Get all the account names that have triggered sweeps in the given
        project. These usernames are collected automatically from CI systems.
      operationId: listSweepAccounts
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listUsersOutput'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - sweeps:read
  /projects/{projectID}/systems:
    get:
      tags:
      - systems
      description: Returns the list of systems.
      operationId: listSystems
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: name
        in: query
        description: Filter systems by name
        schema:
          type: string
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listSystemsOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - systems:read
    post:
      tags:
      - systems
      description: Adds a system.
      operationId: createSystem
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createSystemInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/system'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "409":
          $ref: '#/components/responses/alreadyExists'
      security:
      - OAuth:
        - systems:write
  /projects/{projectID}/systems/{systemID}:
    delete:
      tags:
      - systems
      description: Deletes a system.
      operationId: deleteSystem
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/systemID'
      responses:
        "204":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - systems:write
    get:
      tags:
      - systems
      description: Returns a specific system.
      operationId: getSystem
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/systemID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/system'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - systems:read
    patch:
      tags:
      - systems
      description: Updates the system.
      operationId: updateSystem
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/systemID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updateSystemInput'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/system'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - systems:write
  /projects/{projectID}/systems/{systemID}/builds:
    get:
      tags:
      - builds
      description: Returns the list of builds for a system.
      operationId: listBuildsForSystem
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/systemID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listBuildsOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - builds:read
    post:
      tags:
      - builds
      description: Adds a build.
      operationId: createBuildForSystem
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/systemID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createBuildForSystemInput'
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/build'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - builds:write
  /projects/{projectID}/systems/{systemID}/builds/{buildID}:
    get:
      tags:
      - builds
      description: Returns a specific build for a system.
      operationId: getBuildForSystem
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/systemID'
      - name: buildID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/buildID'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/build'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - builds:read
  /projects/{projectID}/systems/{systemID}/experiences:
    get:
      tags:
      - systems
      description: Returns a list of all experiences applicable to the system.
      operationId: listExperiencesForSystem
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/systemID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listExperiencesOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - systems:read
  /projects/{projectID}/systems/{systemID}/experiences/{experienceID}:
    delete:
      tags:
      - systems
      description: Deregisters the given experience as applicable for the system
      operationId: removeSystemFromExperience
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/systemID'
      - name: experienceID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceID'
      responses:
        "204":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - systems:write
    post:
      tags:
      - systems
      description: Registers the given experience as applicable for the system
      operationId: addSystemToExperience
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/systemID'
      - name: experienceID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/experienceID'
      responses:
        "201":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
        "409":
          $ref: '#/components/responses/alreadyExists'
      security:
      - OAuth:
        - systems:write
  /projects/{projectID}/systems/{systemID}/metricsBuilds:
    get:
      tags:
      - systems
      description: Returns a list of all metrics builds applicable to the system.
      operationId: listMetricsBuildsForSystem
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/systemID'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listMetricsBuildOutput'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - systems:read
  /projects/{projectID}/systems/{systemID}/metricsBuilds/{metricsBuildID}:
    delete:
      tags:
      - systems
      description: Deregisters the given metrics build as applicable for the system
      operationId: removeSystemFromMetricsBuild
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/systemID'
      - name: metricsBuildID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/metricsBuildID'
      responses:
        "204":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - systems:write
    post:
      tags:
      - systems
      description: Registers the given metrics build as applicable for the system
      operationId: addSystemToMetricsBuild
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      - name: systemID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/systemID'
      - name: metricsBuildID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/metricsBuildID'
      responses:
        "201":
          description: OK
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
        "409":
          $ref: '#/components/responses/alreadyExists'
      security:
      - OAuth:
        - systems:write
  /projects/{projectID}/systems/addExperiences:
    post:
      tags:
      - systems
      description: Registers the given experiences as applicable for the systems
      operationId: addSystemsToExperiences
      parameters:
      - name: projectID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/projectID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/addSystemsToExperiencesInput'
      responses:
        "201":
          description: Created
        "401":
          $ref: '#/components/responses/unauthenticated'
        "404":
          $ref: '#/components/responses/notFound'
        "409":
          $ref: '#/components/responses/alreadyExists'
      security:
      - OAuth:
        - systems:write
  /quota:
    get:
      description: Get current quota usage and limits
      operationId: getQuota
      responses:
        "200":
          description: quota
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/getQuotaOutput'
      security:
      - OAuth:
        - batches:read
        - reports:read
  /validateExperienceLocation:
    post:
      tags:
      - experiences
      description: Validates an experience location can be reached by ReSim.
      operationId: validateExperienceLocation
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/experienceLocation'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/experienceLocationContents'
        "400":
          $ref: '#/components/responses/badRequest'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - experiences:write
  /view/sessions:
    get:
      tags:
      - view
      description: Lists all View sessions.
      operationId: listViewSessions
      parameters:
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/pageToken'
      - $ref: '#/components/parameters/orderBy'
      responses:
        "200":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/listViewObjectsOutput'
      security:
      - OAuth:
        - view:read
    post:
      tags:
      - view
      description: Creates a new View session.
      operationId: createViewSession
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/viewSessionID'
        "401":
          $ref: '#/components/responses/unauthenticated'
      security:
      - OAuth:
        - view:write
  /view/sessions/{viewSessionID}:
    get:
      tags:
      - view
      description: Lists the view object and metadata associated with a specific view.
      operationId: getViewSession
      parameters:
      - name: viewSessionID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/viewSessionID'
      responses:
        "200":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/viewObjectAndMetadata'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "403":
          $ref: '#/components/responses/forbidden'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - view:read
  /view/sessions/{viewSessionID}/updates/{viewUpdateID}:
    post:
      tags:
      - view
      description: Adds an update to the View session.  Updates will be serialized
        sequentially by ID.
      operationId: createViewUpdate
      parameters:
      - name: viewSessionID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/viewSessionID'
      - name: viewUpdateID
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/viewUpdateID'
      requestBody:
        content:
          application/octet-stream:
            schema:
              type: string
              format: binary
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/viewSessionUpdate'
        "401":
          $ref: '#/components/responses/unauthenticated'
        "403":
          $ref: '#/components/responses/forbidden'
        "404":
          $ref: '#/components/responses/notFound'
      security:
      - OAuth:
        - view:write
servers:
- url: /v1
