Websites (Monitors)
A “website” (referred to as a “monitor” in some responses) is the core resource in PingPing. Each monitor carries a URL plus the two checks PingPing runs against it: an uptime check and a certificate health check.
All requests below require a Bearer token. See Authentication for details.
Retrieve all websites (monitors)
Returns an array of every monitor on the authenticated account, with their current check status inlined.
Response 200
[
{
"id": 3,
"identifier": "iolqRzxr",
"alias": "google.com",
"scheme": "https",
"host": "google.com",
"port": "",
"url": "https://google.com/",
"status_page": "https://pingping.io/iolqRzxr",
"checks": {
"uptime": {
"id": 5,
"status": "ok",
"error": null,
"interval": 30,
"is_enabled": true,
"notification_threshold": 0,
"last_check_at": "2026-05-31 14:56:03",
"meta": {
"http_status_code": 200,
"average_uptime_percentage": 100,
"average_response_time": 0.17569,
"offline_since": null
}
},
"certificate_health": {
"id": 6,
"status": "ok",
"error": null,
"interval": 86400,
"is_enabled": true,
"notification_threshold": 604800,
"last_check_at": "2026-05-31 14:56:10",
"meta": {
"issuer": "TeleSec ServerPass Class 2 CA",
"signature_algorithm": "RSA-SHA256",
"is_self_signed": false,
"valid_from": "2026-02-14 05:30:26",
"valid_to": "2027-02-19 23:59:59"
}
}
}
}
] Retrieve a specific website (monitor)
Path parameters
| Name | Type | Description |
|---|---|---|
| id | number | The monitor id. Use the id field from the list response, not the identifier. |
Returns the same shape as a single element of the list endpoint above.
Response 404
{
"message": "No monitor found with that id."
} Retrieve statistics from a specific website (monitor)
Returns the daily uptime history and the daily response-time history of one monitor, newest first, dated in the account’s timezone, for every day PingPing has stored. There is no date filter and no pagination, so a monitor that has been checked for years returns its whole history in one response. A day’s entries are written a few minutes after midnight in the account’s timezone, so from then on yesterday is the newest day. Days can be missing, and the two lists do not always cover the same days, so match entries by date, not by position.
Path parameters
| Name | Type | Description |
|---|---|---|
| id | number | The monitor id. |
Response 200
{
"uptimes": [
{
"date": "2026-10-26",
"uptime_percentage": 100,
"downtime_in_seconds": 0
},
{
"date": "2026-10-25",
"uptime_percentage": 99.89,
"downtime_in_seconds": 93
}
],
"response_times": [
{
"date": "2026-10-26",
"time_namelookup": 0.029886,
"time_tcp_connection": 0.044678,
"time_redirect": 0,
"time_content_generation": 0.021374,
"time_content_transfer": 0.013167,
"time_total": 0.109105
},
{
"date": "2026-10-25",
"time_namelookup": 0.030485,
"time_tcp_connection": 0.040476,
"time_redirect": 0,
"time_content_generation": 0.019742,
"time_content_transfer": 0.012513,
"time_total": 0.103216
}
]
} uptimes entries
| Name | Type | Description |
|---|---|---|
| date | string | The day, as YYYY-MM-DD in the account’s timezone. |
| uptime_percentage | number | The share of that day the website was up, with two decimals. 100 means no confirmed downtime. |
| downtime_in_seconds | number | The seconds of confirmed downtime on that day. |
response_times entries
Each timing is the average over that day’s checks that received a response, in seconds. On a day without checks, or when no check got a response, the timings are null.
| Name | Type | Description |
|---|---|---|
| date | string | The day, as YYYY-MM-DD in the account’s timezone. |
| time_namelookup | number | DNS lookup. |
| time_tcp_connection | number | Connecting to the server, the TLS handshake included. |
| time_redirect | number | 0 for current data. Redirects are followed as separate requests, and every timing describes the last request of the chain. |
| time_content_generation | number | Waiting for the first byte of the response once the request was sent. |
| time_content_transfer | number | Downloading the response body. |
| time_total | number | The whole request to the final URL, from DNS lookup to the last byte. |
The four phase timings (time_namelookup, time_tcp_connection, time_content_generation, time_content_transfer) add up to time_total.
To get a monthly figure, average the uptime_percentage of the days present in that month, or sum downtime_in_seconds over them.
Create a website (monitor)
Request body
| Name | Type | Description |
|---|---|---|
| url | string | Full URL including scheme. Required. |
| alias | string | Display name. Defaults to the host portion of the URL. |
| interval | number | Uptime check interval in seconds. Defaults to 30. See Checks for valid values. |
| notification_threshold | number | Wait this many seconds of confirmed downtime before firing an alert. Default 0 (alert on first confirmed failure). |
curl -X POST https://pingping.io/webapi/monitors \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://example.com",
"alias": "Marketing site",
"interval": 30
}' Response 201
{
"id": 482,
"identifier": "RvX29qLp",
"alias": "Marketing site",
"scheme": "https",
"host": "example.com",
"url": "https://example.com/",
"status_page": "https://pingping.io/RvX29qLp",
"checks": {
"uptime": { "id": 901, "status": "pending", "interval": 30, "is_enabled": true },
"certificate_health": { "id": 902, "status": "pending", "interval": 86400, "is_enabled": true }
}
} Response 422
Returned when the request body fails validation (missing url, invalid scheme, etc.).
{
"message": "The given data was invalid.",
"errors": {
"url": ["The url field is required."]
}
} Update a website (monitor)
Update the display alias or the underlying URL. To change check intervals, use the Checks API instead.
Request body
| Name | Type | Description |
|---|---|---|
| alias | string | New display name. Optional. |
| url | string | New URL. Optional. Changing the host resets historical stats. |
Response 200
Returns the updated monitor in the same shape as the create response.
Delete a website (monitor)
Permanently removes the monitor and all associated checks, history, and the status page. This action cannot be undone.
Response 204
Empty body on success.