{
  "swagger": "2.0",
  "info": {
    "title": "Performance API",
    "version": "0.247.0",
    "description": "Performance API provides essential information about performance of tested web application."
  },
  "host": "saucelabs.com",
  "servers": [
    {
      "url": "https://api.{region}.saucelabs.{tld}",
      "variables": {
        "region": {
          "default": "us-west-1",
          "description": "region of datacenter",
          "enum": ["us-west-1", "eu-central-1", "staging"]
        },
        "tld": {
          "default": "com",
          "description": "internal or external API",
          "enum": ["net", "com"]
        }
      }
    }
  ],
  "basePath": "/v2/performance",
  "schemes": ["https"],
  "produces": ["application/json"],
  "paths": {
    "/metrics/": {
      "get": {
        "operationId": "get_performance_metrics",
        "description": "Provides a list of paginated raw performance metrics for the logged user",
        "parameters": [
          {
            "$ref": "#/parameters/PageUrl"
          }
        ],
        "responses": {
          "200": {
            "schema": {
              "$ref": "#/definitions/PerformanceUserMetricsView"
            }
          },
          "default": {
            "description": "Error response",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        }
      }
    },
    "/metrics/{job_id}/": {
      "get": {
        "operationId": "get_performance_metrics_by_jobID",
        "description": "Provides performance metrics and job basic data for a given job_id",
        "parameters": [
          {
            "$ref": "#/parameters/JobId"
          },
          {
            "$ref": "#/parameters/Full"
          }
        ],
        "responses": {
          "200": {
            "schema": {
              "$ref": "#/definitions/PerformanceMetricsListView"
            }
          },
          "default": {
            "description": "Error response",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        }
      }
    },
    "/metrics/{job_id}/assert/": {
      "get": {
        "operationId": "assert_performance",
        "description": "Provides information if there is an outlier for the given job_id and metric",
        "parameters": [
          {
            "$ref": "#/parameters/JobId"
          },
          {
            "$ref": "#/parameters/MetricNames"
          },
          {
            "$ref": "#/parameters/OrderIndex"
          }
        ],
        "responses": {
          "200": {
            "schema": {
              "$ref": "#/definitions/AssertView"
            }
          },
          "default": {
            "description": "Error response",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        }
      }
    },
    "/metrics/{job_id}/baseline/": {
      "get": {
        "operationId": "get_baseline",
        "description": "Provides baseline based on metrics history, where the reference point is a given job_id",
        "parameters": [
          {
            "$ref": "#/parameters/JobId"
          },
          {
            "$ref": "#/parameters/MetricNames"
          },
          {
            "$ref": "#/parameters/OrderIndex"
          },
          {
            "$ref": "#/parameters/RegimeStart"
          },
          {
            "$ref": "#/parameters/RegimeEnd"
          }
        ],
        "responses": {
          "200": {
            "schema": {
              "$ref": "#/definitions/BaselineView"
            }
          },
          "default": {
            "description": "Error response",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        }
      }
    },
    "/metrics/{job_id}/baseline/reset/": {
      "get": {
        "operationId": "has_baseline_reset",
        "description": "Returns true if a baseline was resetted for a give job_id",
        "parameters": [
          {
            "$ref": "#/parameters/JobId"
          }
        ],
        "responses": {
          "default": {
            "description": "Error response",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        }
      },
      "post": {
        "operationId": "acknowledge_baseline",
        "description": "Sets a reset point market at job_id, previous jobs will not be taken into account in calculating baseline",
        "parameters": [
          {
            "$ref": "#/parameters/JobId"
          }
        ],
        "responses": {
          "201": {
            "description": "Sets a reset point market at job_id, previous jobs will not be taken into account in calculating baseline"
          },
          "default": {
            "description": "Error response",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        }
      }
    },
    "/metrics/{job_id}/discarded/": {
      "get": {
        "operationId": "get_discarded_outliers",
        "description": "Provides lists outliers marked as discarded",
        "parameters": [
          {
            "$ref": "#/parameters/JobId"
          },
          {
            "$ref": "#/parameters/OrderIndex"
          }
        ],
        "responses": {
          "200": {
            "schema": {
              "$ref": "#/definitions/DiscardedView"
            }
          },
          "default": {
            "description": "Error response",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        }
      },
      "post": {
        "operationId": "discard_outliers",
        "description": "Marks outlier for a given {job_id} as not relevant/flaky",
        "parameters": [
          {
            "$ref": "#/parameters/JobId"
          },
          {
            "$ref": "#/parameters/OrderIndex"
          }
        ],
        "responses": {
          "201": {
            "description": "Marks outlier for a given {job_id} as not relevant/flaky"
          },
          "default": {
            "description": "Error response",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        }
      }
    },
    "/metrics/{job_id}/history/": {
      "get": {
        "operationId": "get_baseline_history",
        "description": "Provides a list of raw performance metrics up to point where the reference is a given job_id and order_index",
        "parameters": [
          {
            "$ref": "#/parameters/JobId"
          },
          {
            "$ref": "#/parameters/OrderIndex"
          },
          {
            "$ref": "#/parameters/Limit"
          }
        ],
        "responses": {
          "200": {
            "schema": {
              "$ref": "#/definitions/PerformanceMetricsHistoryView"
            }
          },
          "default": {
            "description": "Error response",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        }
      }
    },
    "/metrics/{job_id}/regimes/": {
      "get": {
        "operationId": "get_regimes",
        "description": "Provides regimes per metric calculated for a set of jobs, where the reference point is a given job_id",
        "parameters": [
          {
            "$ref": "#/parameters/JobId"
          },
          {
            "$ref": "#/parameters/MetricNames"
          },
          {
            "$ref": "#/parameters/OrderIndex"
          },
          {
            "$ref": "#/parameters/IncludeBaseline"
          }
        ],
        "responses": {
          "200": {
            "schema": {
              "$ref": "#/definitions/RegimesView"
            }
          },
          "default": {
            "description": "Error response",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        }
      }
    },
    "/metrics/{job_id}/regimes/acknowledge/": {
      "post": {
        "operationId": "acknowledge_regime",
        "description": "Acknowledge regime. Confirm values in new regime are acceptable.",
        "parameters": [
          {
            "$ref": "#/parameters/JobId"
          },
          {
            "$ref": "#/parameters/OrderIndex"
          }
        ],
        "responses": {
          "201": {
            "description": "Acknowledge regime. Confirm values in new regime are acceptable."
          },
          "default": {
            "description": "Error response",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        }
      }
    },
    "/metrics/swagger/": {
      "get": {
        "operationId": "get_api_definition",
        "description": "Provides json documentation for the performance API",
        "responses": {
          "200": {
            "description": "Provides json documentation for the performance API"
          },
          "default": {
            "description": "Error response",
            "schema": {
              "$ref": "#/definitions/ErrorResponse"
            }
          }
        }
      }
    }
  },
  "parameters": {
    "JobId": {
      "name": "job_id",
      "in": "path",
      "type": "string",
      "required": true
    },
    "Full": {
      "name": "full",
      "in": "query",
      "type": "boolean",
      "required": false,
      "default": true,
      "description": "When set to false, basic job data will be returned, excluding performance metrics"
    },
    "MetricNames": {
      "name": "metric_names",
      "in": "query",
      "type": "array",
      "items": {
        "type": "string"
      },
      "required": true
    },
    "OrderIndex": {
      "name": "order_index",
      "in": "query",
      "type": "integer",
      "required": true
    },
    "PageUrl": {
      "name": "page_url",
      "in": "query",
      "type": "string",
      "required": false
    },
    "Limit": {
      "name": "limit",
      "in": "query",
      "type": "integer",
      "required": false
    },
    "RegimeStart": {
      "name": "regime_start",
      "in": "query",
      "type": "integer",
      "required": false
    },
    "RegimeEnd": {
      "name": "regime_end",
      "in": "query",
      "type": "integer",
      "required": false
    },
    "IncludeBaseline": {
      "name": "include_baseline",
      "in": "query",
      "type": "boolean",
      "default": false,
      "required": false
    }
  },
  "definitions": {
    "PerformanceMetricsListView": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/PerformanceMetricsListViewItems"
          }
        }
      }
    },
    "PerformanceMetricsListViewItems": {
      "type": "object",
      "properties": {
        "job_id": {
          "type": "string"
        },
        "job_owner": {
          "type": "string"
        },
        "job_name_hash": {
          "type": "string"
        },
        "page_url": {
          "type": "string"
        },
        "order_index": {
          "type": "integer"
        },
        "job_creation_time": {
          "type": "string",
          "format": "date-time"
        },
        "load_id": {
          "type": "string"
        },
        "loader_id": {
          "type": "string"
        },
        "error": {
          "type": "string"
        },
        "metric_data": {
          "$ref": "#/definitions/PerformanceMetricsDetails"
        }
      }
    },
    "PerformanceMetricsHistoryView": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/PerformanceMetricsListViewItems"
          }
        }
      }
    },
    "PerformanceUserMetricsView": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/PerformanceMetricsListViewItems"
          }
        },
        "next": {
          "type": "string"
        },
        "previous": {
          "type": "string"
        }
      }
    },
    "PerformanceMetricsDetails": {
      "type": "object",
      "properties": {
        "rtt": {
          "type": "number",
          "format": "float"
        },
        "load": {
          "type": "number",
          "format": "float"
        },
        "score": {
          "type": "number",
          "format": "integer"
        },
        "maxRtt": {
          "type": "number",
          "format": "integer"
        },
        "numFonts": {
          "type": "number",
          "format": "integer"
        },
        "numTasks": {
          "type": "number",
          "format": "integer"
        },
        "font_size": {
          "type": "number",
          "format": "integer"
        },
        "firstPaint": {
          "type": "number",
          "format": "integer"
        },
        "font_count": {
          "type": "number",
          "format": "integer"
        },
        "image_size": {
          "type": "number",
          "format": "integer"
        },
        "numScripts": {
          "type": "number",
          "format": "integer"
        },
        "other_size": {
          "type": "number",
          "format": "integer"
        },
        "speedIndex": {
          "type": "number",
          "format": "integer"
        },
        "throughput": {
          "type": "number",
          "format": "float"
        },
        "image_count": {
          "type": "number",
          "format": "integer"
        },
        "numRequests": {
          "type": "number",
          "format": "integer"
        },
        "other_count": {
          "type": "number",
          "format": "integer"
        },
        "script_size": {
          "type": "number",
          "format": "integer"
        },
        "firstCPUIdle": {
          "type": "number",
          "format": "integer"
        },
        "requestsSize": {
          "type": "number",
          "format": "integer"
        },
        "script_count": {
          "type": "number",
          "format": "integer"
        },
        "document_size": {
          "type": "number",
          "format": "integer"
        },
        "requestsCount": {
          "type": "number",
          "format": "integer"
        },
        "totalTaskTime": {
          "type": "number",
          "format": "integer"
        },
        "document_count": {
          "type": "number",
          "format": "integer"
        },
        "numStylesheets": {
          "type": "number",
          "format": "integer"
        },
        "stylesheet_size": {
          "type": "number",
          "format": "integer"
        },
        "timeToFirstByte": {
          "type": "number",
          "format": "integer"
        },
        "totalByteWeight": {
          "type": "number",
          "format": "integer"
        },
        "domContentLoaded": {
          "type": "number",
          "format": "integer"
        },
        "firstInteractive": {
          "type": "number",
          "format": "integer"
        },
        "lastVisualChange": {
          "type": "number",
          "format": "integer"
        },
        "maxServerLatency": {
          "type": "number",
          "format": "integer"
        },
        "numTasksOver10ms": {
          "type": "number",
          "format": "integer"
        },
        "numTasksOver25ms": {
          "type": "number",
          "format": "integer"
        },
        "numTasksOver50ms": {
          "type": "number",
          "format": "integer"
        },
        "stylesheet_count": {
          "type": "number",
          "format": "integer"
        },
        "firstVisualChange": {
          "type": "number",
          "format": "integer"
        },
        "numTasksOver100ms": {
          "type": "number",
          "format": "integer"
        },
        "numTasksOver500ms": {
          "type": "number",
          "format": "integer"
        },
        "firstContentfulPaint": {
          "type": "number",
          "format": "integer"
        },
        "firstMeaningfulPaint": {
          "type": "number",
          "format": "integer"
        },
        "estimatedInputLatency": {
          "type": "number",
          "format": "integer"
        },
        "mainDocumentTransferSize": {
          "type": "number",
          "format": "integer"
        }
      }
    },
    "BaselineView": {
      "type": "object",
      "properties": {
        "metric_name": {
          "description": "metric name is one of the metrics provided in /metrics/{job_id}/",
          "$ref": "#/definitions/BaselineDetails"
        }
      }
    },
    "BaselineDetails": {
      "type": "object",
      "properties": {
        "baseline": {
          "type": "number",
          "format": "float",
          "description": "Baseline"
        },
        "upper_boundary": {
          "type": "number",
          "format": "float",
          "description": "Upper boundry"
        },
        "lower_boundary": {
          "type": "number",
          "format": "float",
          "description": "Lower boundry"
        },
        "values": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/BaselineValues"
          }
        }
      }
    },
    "BaselineValues": {
      "type": "object",
      "properties": {
        "real_value": {
          "type": "number",
          "format": "float",
          "description": "Real value"
        },
        "job_id": {
          "type": "string"
        },
        "datetime": {
          "type": "string",
          "format": "date-time"
        }
      }
    },
    "OutlierDetails": {
      "type": "object",
      "properties": {
        "status": {
          "type": "boolean"
        },
        "reason": {
          "type": "string",
          "enum": ["baseline", "new_regime"]
        }
      }
    },
    "AssertView": {
      "type": "object",
      "properties": {
        "metric_name": {
          "$ref": "#/definitions/AssertDetails"
        }
      }
    },
    "AssertDetails": {
      "type": "object",
      "properties": {
        "baseline": {
          "type": "number",
          "format": "float",
          "description": "Baseline"
        },
        "upper_boundary": {
          "type": "number",
          "format": "float",
          "description": "Upper boundry"
        },
        "lower_boundary": {
          "type": "number",
          "format": "float",
          "description": "Lower boundry"
        },
        "real_value": {
          "type": "number",
          "format": "float",
          "description": "Real value"
        },
        "job_id": {
          "type": "string"
        },
        "datetime": {
          "type": "string",
          "format": "date-time"
        },
        "order_index": {
          "type": "integer"
        },
        "outlier": {
          "$ref": "#/definitions/OutlierDetails"
        }
      }
    },
    "RegimesView": {
      "type": "object",
      "properties": {
        "metric_name": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "regime_start",
              "regime_end",
              "baseline_url",
              "active"
            ],
            "properties": {
              "regime_start": {
                "type": "integer",
                "description": "Left regime boundry"
              },
              "regime_end": {
                "type": "integer",
                "description": "Right regime boundry"
              },
              "baseline_url": {
                "type": "string",
                "description": "Path to baseline endpoint for given regime"
              },
              "active": {
                "type": "boolean",
                "description": "Informs if given regime is active - in force"
              },
              "baseline": {
                "type": "object",
                "properties": {
                  "upper_boundary": {
                    "type": "number",
                    "format": "float",
                    "description": "Upper boundry"
                  },
                  "lower_boundary": {
                    "type": "number",
                    "format": "float",
                    "description": "Lower boundry"
                  }
                }
              }
            }
          }
        }
      }
    },
    "DiscardedView": {
      "type": "object",
      "properties": {
        "job_ids": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "ErrorResponse": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string"
        },
        "message": {
          "type": "string"
        }
      }
    },
    "RegimeAcknowledge": {
      "type": "object",
      "properties": {
        "page_url": {
          "type": "string"
        },
        "order_index": {
          "type": "integer"
        },
        "metric_names": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": ["page_url", "order_index", "metric_names"]
    }
  }
}
