Documentation
Pingdot Public API
Integrate uptime data into any tool. Access monitors, incidents, and status pages programmatically.
Overview
The pingdot API lets you programmatically access your monitors, incidents, and status page data.
4 Endpoints
Read-only JSON
7 Event Types
Real-time push
API Key Auth
Bearer token
Get your API key
Go to SettingsProject SettingsAPI Keys tab. Copy the key — it's only shown once.
Make your first request
curl https://pingdot.io/api/v1/status/your-slug \
-H "Authorization: Bearer pk_your_api_key"Parse the response
{
"status": "operational",
"monitors": [
{
"id": "mon_xxxx",
"name": "API",
"status": "up",
"uptimePercentage": 99.9
}
],
"incidents": []
}All API requests must include your API key as a Bearer token in the Authorization header.
Request header
Authorization: Bearer pk_live_xxxxxxxxxxxxGetting your API key
- 1.Go to your Dashboard
- 2.Open Project Settings
- 3.Click the API Keys tab
- 4.Click Generate Key and copy it immediately
/api/v1/status/:slugFull status page data/api/v1/monitors/:slugAll monitors for project/api/v1/incidents/:slugIncidents (last 30 days)/api/v1/components/:slugStatus page componentsExample — GET /api/v1/status/:slug
curl https://pingdot.io/api/v1/status/your-slug \
-H "Authorization: Bearer pk_your_api_key"{
"id": "proj_xxxx",
"name": "My Project",
"status": "operational",
"monitors": [
{
"id": "mon_xxxx",
"name": "API",
"url": "https://api.example.com",
"status": "up",
"lastCheckedAt": "2026-02-22T10:30:00Z",
"uptimePercentage": 99.9
}
],
"incidents": []
}Receive real-time HTTP POST notifications when monitor status changes or incidents are created.
Configuration
- 1.Go to Project Settings → Notifications
- 2.Add your webhook URL (must be HTTPS)
- 3.Optionally set a secret for HMAC verification
- 4.Save and test with the "Send test" button
Payload format
{
"event": "monitor_down",
"timestamp": "2026-02-22T10:30:00Z",
"data": {
"monitor": {
"id": "mon_xxxx",
"name": "API",
"url": "https://api.example.com",
"errorType": "timeout",
"errorMessage": "Connection timed out after 10s"
}
}
}HTTP headers
All events include the same base payload format. The event field identifies the type.
monitor_downMonitor failed 3 consecutive checksmonitor_upMonitor recovered from down stateincident_createdNew incident reportedincident_updatedIncident status changedincident_resolvedIncident marked as resolvedmaintenance_scheduledMaintenance window createdmaintenance_startedMaintenance window beganWhen you set a webhook secret, we sign every payload with HMAC-SHA256. Verify the signature in your endpoint handler:
import crypto from 'crypto'
function verifyWebhook(
payload: string,
signature: string,
secret: string
): boolean {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(payload, 'utf-8')
.digest('hex')
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
)
}The signature value comes from the X-Pingdot-Signature header. Always use timingSafeEqual to prevent timing attacks.
Questions? support@pingdot.io
Go to Dashboard