priv/docs/observatory.md

# Observatory

## Get quota and availability

**GET** `/zones/{zone_id}/speed_api/availabilities`

Retrieves quota for all plans, as well as the current zone quota.

### Responses

#### 200 Page test availability.

> Data is at `body["result"]`

```json
{
  "quota": {
    "plan": "*string*",
    "quotasPerPlan": {
      "value": {
        "business": "*integer*",
        "enterprise": "*integer*",
        "free": "*integer*",
        "pro": "*integer*"
      }
    },
    "remainingSchedules": "*number*",
    "remainingTests": "*number*",
    "scheduleQuotasPerPlan": {
      "value": {
        "business": "*integer*",
        "enterprise": "*integer*",
        "free": "*integer*",
        "pro": "*integer*"
      }
    }
  },
  "regions": [
    {
      "label": "*string*",
      "value": "*string*"
    }
  ],
  "regionsPerPlan": {
    "business": [
      {
        "label": "*string*",
        "value": null
      }
    ],
    "enterprise": [
      {
        "label": "*string*",
        "value": null
      }
    ],
    "free": [
      {
        "label": "*string*",
        "value": null
      }
    ],
    "pro": [
      {
        "label": "*string*",
        "value": null
      }
    ]
  }
}
```

#### 4XX Failure response.

```json
{
  "errors": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "messages": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "result": {},
  "success": "*boolean*"
}
```



## List tested webpages

**GET** `/zones/{zone_id}/speed_api/pages`

Lists all webpages which have been tested.

### Responses

#### 200 List of pages.

> Data is at `body["result"]`

```json
[
  {
    "region": {
      "label": "*string*",
      "value": "*string*"
    },
    "scheduleFrequency": "*string*",
    "tests": [
      {
        "date": null,
        "desktopReport": null,
        "id": null,
        "mobileReport": null,
        "region": null,
        "scheduleFrequency": null,
        "url": null
      }
    ],
    "url": "*string*"
  }
]
```

#### 4XX Failure response.

```json
{
  "errors": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "messages": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "result": {},
  "success": "*boolean*"
}
```



## Start page test

**POST** `/zones/{zone_id}/speed_api/pages/{url}/tests`

Starts a test for a specific webpage, in a specific region.

### Responses

#### 200 Page test details.

> Data is at `body["result"]`

```json
{
  "date": "*string*",
  "desktopReport": {
    "cls": "*number*",
    "deviceType": "*string*",
    "error": {
      "code": "*string*",
      "detail": "*string*",
      "finalDisplayedUrl": "*string*"
    },
    "fcp": "*number*",
    "jsonReportUrl": "*string*",
    "lcp": "*number*",
    "performanceScore": "*number*",
    "si": "*number*",
    "state": "*string*",
    "tbt": "*number*",
    "ttfb": "*number*",
    "tti": "*number*"
  },
  "id": "*string*",
  "mobileReport": {
    "cls": "*number*",
    "deviceType": "*string*",
    "error": {
      "code": "*string*",
      "detail": "*string*",
      "finalDisplayedUrl": "*string*"
    },
    "fcp": "*number*",
    "jsonReportUrl": "*string*",
    "lcp": "*number*",
    "performanceScore": "*number*",
    "si": "*number*",
    "state": "*string*",
    "tbt": "*number*",
    "ttfb": "*number*",
    "tti": "*number*"
  },
  "region": {
    "label": "*string*",
    "value": "*string*"
  },
  "scheduleFrequency": "*string*",
  "url": "*string*"
}
```

#### 4XX Failure response.

```json
{
  "errors": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "messages": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "result": {},
  "success": "*boolean*"
}
```



## List page test history

**GET** `/zones/{zone_id}/speed_api/pages/{url}/tests`

Test history (list of tests) for a specific webpage.

### Responses

#### 200 List of test history for a page.

> Data is at `body["result"]`

```json
[
  {
    "date": "*string*",
    "desktopReport": {
      "cls": "*number*",
      "deviceType": null,
      "error": {
        "code": null,
        "detail": null,
        "finalDisplayedUrl": null
      },
      "fcp": "*number*",
      "jsonReportUrl": "*string*",
      "lcp": "*number*",
      "performanceScore": "*number*",
      "si": "*number*",
      "state": null,
      "tbt": "*number*",
      "ttfb": "*number*",
      "tti": "*number*"
    },
    "id": "*string*",
    "mobileReport": {
      "cls": "*number*",
      "deviceType": null,
      "error": {
        "code": null,
        "detail": null,
        "finalDisplayedUrl": null
      },
      "fcp": "*number*",
      "jsonReportUrl": "*string*",
      "lcp": "*number*",
      "performanceScore": "*number*",
      "si": "*number*",
      "state": null,
      "tbt": "*number*",
      "ttfb": "*number*",
      "tti": "*number*"
    },
    "region": {
      "label": "*string*",
      "value": null
    },
    "scheduleFrequency": "*string*",
    "url": "*string*"
  }
]
```

#### 4XX Failure response.

```json
{
  "errors": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "messages": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "result": {},
  "success": "*boolean*"
}
```



## Delete all page tests

**DELETE** `/zones/{zone_id}/speed_api/pages/{url}/tests`

Deletes all tests for a specific webpage from a specific region. Deleted tests are still counted as part of the quota.

### Responses

#### 200 Number of deleted tests.

> Data is at `body["result"]`

```json
{
  "count": "*number*"
}
```

#### 4XX Failure response.

```json
{
  "errors": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "messages": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "result": {},
  "success": "*boolean*"
}
```



## Get a page test result

**GET** `/zones/{zone_id}/speed_api/pages/{url}/tests/{test_id}`

Retrieves the result of a specific test.

### Responses

#### 200 Page test result.

> Data is at `body["result"]`

```json
{
  "date": "*string*",
  "desktopReport": {
    "cls": "*number*",
    "deviceType": "*string*",
    "error": {
      "code": "*string*",
      "detail": "*string*",
      "finalDisplayedUrl": "*string*"
    },
    "fcp": "*number*",
    "jsonReportUrl": "*string*",
    "lcp": "*number*",
    "performanceScore": "*number*",
    "si": "*number*",
    "state": "*string*",
    "tbt": "*number*",
    "ttfb": "*number*",
    "tti": "*number*"
  },
  "id": "*string*",
  "mobileReport": {
    "cls": "*number*",
    "deviceType": "*string*",
    "error": {
      "code": "*string*",
      "detail": "*string*",
      "finalDisplayedUrl": "*string*"
    },
    "fcp": "*number*",
    "jsonReportUrl": "*string*",
    "lcp": "*number*",
    "performanceScore": "*number*",
    "si": "*number*",
    "state": "*string*",
    "tbt": "*number*",
    "ttfb": "*number*",
    "tti": "*number*"
  },
  "region": {
    "label": "*string*",
    "value": "*string*"
  },
  "scheduleFrequency": "*string*",
  "url": "*string*"
}
```

#### 4XX Failure response.

```json
{
  "errors": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "messages": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "result": {},
  "success": "*boolean*"
}
```



## List core web vital metrics trend

**GET** `/zones/{zone_id}/speed_api/pages/{url}/trend`

Lists the core web vital metrics trend over time for a specific page.

### Responses

#### 200 Page trend.

> Data is at `body["result"]`

```json
{
  "cls": [
    "*number*"
  ],
  "fcp": [
    "*number*"
  ],
  "lcp": [
    "*number*"
  ],
  "performanceScore": [
    "*number*"
  ],
  "si": [
    "*number*"
  ],
  "tbt": [
    "*number*"
  ],
  "ttfb": [
    "*number*"
  ],
  "tti": [
    "*number*"
  ]
}
```

#### 4XX Failure response.

```json
{
  "errors": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "messages": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "result": {},
  "success": "*boolean*"
}
```



## Create scheduled page test

**POST** `/zones/{zone_id}/speed_api/schedule/{url}`

Creates a scheduled test for a page.

### Responses

#### 200 Page test schedule.

> Data is at `body["result"]`

```json
{
  "schedule": {
    "frequency": "*string*",
    "region": "*string*",
    "url": "*string*"
  },
  "test": {
    "date": "*string*",
    "desktopReport": {
      "cls": "*number*",
      "deviceType": null,
      "error": {
        "code": null,
        "detail": null,
        "finalDisplayedUrl": null
      },
      "fcp": "*number*",
      "jsonReportUrl": "*string*",
      "lcp": "*number*",
      "performanceScore": "*number*",
      "si": "*number*",
      "state": null,
      "tbt": "*number*",
      "ttfb": "*number*",
      "tti": "*number*"
    },
    "id": "*string*",
    "mobileReport": {
      "cls": "*number*",
      "deviceType": null,
      "error": {
        "code": null,
        "detail": null,
        "finalDisplayedUrl": null
      },
      "fcp": "*number*",
      "jsonReportUrl": "*string*",
      "lcp": "*number*",
      "performanceScore": "*number*",
      "si": "*number*",
      "state": null,
      "tbt": "*number*",
      "ttfb": "*number*",
      "tti": "*number*"
    },
    "region": {
      "label": "*string*",
      "value": null
    },
    "scheduleFrequency": "*string*",
    "url": "*string*"
  }
}
```

#### 4XX Failure response.

```json
{
  "errors": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "messages": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "result": {},
  "success": "*boolean*"
}
```



## Get a page test schedule

**GET** `/zones/{zone_id}/speed_api/schedule/{url}`

Retrieves the test schedule for a page in a specific region.

### Responses

#### 200 Page test schedule.

> Data is at `body["result"]`

```json
{
  "frequency": "*string*",
  "region": "*string*",
  "url": "*string*"
}
```

#### 4XX Failure response.

```json
{
  "errors": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "messages": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "result": {},
  "success": "*boolean*"
}
```



## Delete scheduled page test

**DELETE** `/zones/{zone_id}/speed_api/schedule/{url}`

Deletes a scheduled test for a page.

### Responses

#### 200 Number of deleted tests.

> Data is at `body["result"]`

```json
{
  "count": "*number*"
}
```

#### 4XX Failure response.

```json
{
  "errors": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "messages": [
    {
      "code": "*integer*",
      "documentation_url": "*string*",
      "message": "*string*",
      "source": {
        "pointer": "*string*"
      }
    }
  ],
  "result": {},
  "success": "*boolean*"
}
```