API Reference
Complete REST API documentation for PulseGuard. Manage monitors, incidents, and status pages programmatically.
Overview
The PulseGuard API is a RESTful JSON API. All requests and responses use application/json content type.
| Base URL | https://www.pulseguard.floelife.com/api/v1 |
| Content Type | application/json |
| Rate Limits | 100 requests/min (Free), 1,000 requests/min (Pro/Business) |
Authentication
All API requests require authentication using an API key. You can create and manage API keys from Settings > API Keys in the PulseGuard dashboard.
Include your API key in the Authorization header as a Bearer token:
curl https://www.pulseguard.floelife.com/api/v1/monitors \
-H "Authorization: Bearer pg_live_abc123def456"
-H "Content-Type: application/json"Important: Keep your API keys secure. Do not commit them to version control or expose them in client-side code. Use environment variables instead.
Monitors API
Create, read, update, and delete monitors. Monitors are the core resource in PulseGuard that perform periodic checks against your endpoints.
/v1/monitorsReturns a list of all monitors in your organization. Supports pagination with page and limit query parameters.
curl https://www.pulseguard.floelife.com/api/v1/monitors \
-H "Authorization: Bearer pg_live_abc123"
# Response
{
"data": [
{
"id": "mon_abc123",
"name": "Production API",
"type": "http",
"url": "https://api.example.com/health",
"interval": 60,
"status": "up",
"regions": ["us-east-1", "eu-west-1"],
"lastCheckedAt": "2025-01-15T10:30:00Z",
"uptime": {
"24h": 99.99,
"7d": 99.98,
"30d": 99.95
}
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 5
}
}/v1/monitorsCreate a new monitor. Required fields: name, type, url.
| Field | Type | Description |
|---|---|---|
| name | string | Display name for the monitor |
| type | enum | http | ssl | dns | tcp | ping |
| url | string | URL or hostname to monitor |
| interval | number | Check interval in seconds (default: 300) |
| regions | string[] | Monitoring regions (default: ["us-east-1"]) |
| alertChannels | string[] | Notification channel IDs |
curl -X POST https://www.pulseguard.floelife.com/api/v1/monitors \
-H "Authorization: Bearer pg_live_abc123" \
-H "Content-Type: application/json" \
-d '{
"name": "Production API",
"type": "http",
"url": "https://api.example.com/health",
"interval": 60,
"regions": ["us-east-1", "eu-west-1"],
"alertChannels": ["ch_email_default", "ch_slack_ops"]
}'
# Response (201 Created)
{
"id": "mon_xyz789",
"name": "Production API",
"type": "http",
"url": "https://api.example.com/health",
"interval": 60,
"status": "pending",
"regions": ["us-east-1", "eu-west-1"],
"alertChannels": ["ch_email_default", "ch_slack_ops"],
"createdAt": "2025-01-15T10:30:00Z"
}/v1/monitors/:idGet a single monitor by ID, including detailed uptime statistics and recent check results.
curl https://www.pulseguard.floelife.com/api/v1/monitors/mon_abc123 \
-H "Authorization: Bearer pg_live_abc123"
# Response
{
"id": "mon_abc123",
"name": "Production API",
"type": "http",
"url": "https://api.example.com/health",
"interval": 60,
"status": "up",
"regions": ["us-east-1", "eu-west-1"],
"uptime": {
"24h": 99.99,
"7d": 99.98,
"30d": 99.95,
"90d": 99.93
},
"averageResponseTime": {
"24h": 142,
"7d": 156
},
"lastCheckedAt": "2025-01-15T10:30:00Z",
"lastResponseTime": 134
}/v1/monitors/:idUpdate an existing monitor. Only include the fields you want to change.
curl -X PATCH https://www.pulseguard.floelife.com/api/v1/monitors/mon_abc123 \
-H "Authorization: Bearer pg_live_abc123" \
-H "Content-Type: application/json" \
-d '{
"interval": 30,
"regions": ["us-east-1", "eu-west-1", "ap-southeast-1"]
}'
# Response (200 OK)
{
"id": "mon_abc123",
"name": "Production API",
"interval": 30,
"regions": ["us-east-1", "eu-west-1", "ap-southeast-1"],
"updatedAt": "2025-01-15T11:00:00Z"
}/v1/monitors/:idPermanently delete a monitor. This action cannot be undone. Historical data will be retained for 30 days.
curl -X DELETE https://www.pulseguard.floelife.com/api/v1/monitors/mon_abc123 \
-H "Authorization: Bearer pg_live_abc123"
# Response (200 OK)
{
"id": "mon_abc123",
"deleted": true
}Incidents API
Manage incidents that appear on your status pages. Incidents can be created automatically by monitors or manually via the API.
/v1/incidentsList all incidents. Filter by status (active | resolved) and severity (critical | major | minor | maintenance).
curl "https://www.pulseguard.floelife.com/api/v1/incidents?status=active" \
-H "Authorization: Bearer pg_live_abc123"
# Response
{
"data": [
{
"id": "inc_def456",
"title": "API Response Time Degradation",
"status": "active",
"severity": "minor",
"message": "We are investigating elevated API response times.",
"affectedMonitors": ["mon_abc123"],
"updates": [
{
"id": "upd_001",
"status": "investigating",
"message": "We are investigating elevated API response times.",
"createdAt": "2025-01-15T09:00:00Z"
}
],
"createdAt": "2025-01-15T09:00:00Z"
}
]
}/v1/incidentsCreate an incident manually. Useful for planned maintenance or incidents detected outside of PulseGuard.
| Field | Type | Description |
|---|---|---|
| title | string | Incident title |
| severity | enum | critical | major | minor | maintenance |
| message | string | Initial incident update message |
| affectedMonitors | string[] | Monitor IDs affected by this incident |
curl -X POST https://www.pulseguard.floelife.com/api/v1/incidents \
-H "Authorization: Bearer pg_live_abc123" \
-H "Content-Type: application/json" \
-d '{
"title": "Scheduled Database Maintenance",
"severity": "maintenance",
"message": "We will be performing database maintenance from 02:00-04:00 UTC.",
"affectedMonitors": ["mon_abc123", "mon_def456"]
}'
# Response (201 Created)
{
"id": "inc_ghi789",
"title": "Scheduled Database Maintenance",
"status": "active",
"severity": "maintenance",
"createdAt": "2025-01-14T22:00:00Z"
}/v1/incidents/:idUpdate an incident: add an update message, change severity, or resolve the incident.
curl -X PATCH https://www.pulseguard.floelife.com/api/v1/incidents/inc_ghi789 \
-H "Authorization: Bearer pg_live_abc123" \
-H "Content-Type: application/json" \
-d '{
"status": "resolved",
"message": "Database maintenance completed successfully. All services are operational."
}'
# Response (200 OK)
{
"id": "inc_ghi789",
"title": "Scheduled Database Maintenance",
"status": "resolved",
"severity": "maintenance",
"resolvedAt": "2025-01-15T04:00:00Z"
}Status Pages API
Manage your public status pages and their components programmatically.
/v1/status-pagesList all status pages in your organization.
curl https://www.pulseguard.floelife.com/api/v1/status-pages \
-H "Authorization: Bearer pg_live_abc123"
# Response
{
"data": [
{
"id": "sp_abc123",
"name": "Acme Corp Status",
"slug": "acme",
"url": "https://acme.pulseguard.floelife.com",
"customDomain": "status.acme.com",
"components": [
{
"id": "comp_001",
"name": "Website",
"status": "operational",
"monitors": ["mon_abc123"]
},
{
"id": "comp_002",
"name": "API",
"status": "operational",
"monitors": ["mon_def456"]
}
]
}
]
}/v1/status-pagesCreate a new status page with components.
curl -X POST https://www.pulseguard.floelife.com/api/v1/status-pages \
-H "Authorization: Bearer pg_live_abc123" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corp Status",
"slug": "acme",
"components": [
{
"name": "Website",
"monitors": ["mon_abc123"]
},
{
"name": "API",
"monitors": ["mon_def456"]
},
{
"name": "CDN",
"monitors": ["mon_ghi789"]
}
]
}'
# Response (201 Created)
{
"id": "sp_xyz789",
"name": "Acme Corp Status",
"slug": "acme",
"url": "https://acme.pulseguard.floelife.com",
"createdAt": "2025-01-15T10:30:00Z"
}/v1/status-pages/:idUpdate a status page. Modify name, slug, branding, custom domain, or components.
curl -X PATCH https://www.pulseguard.floelife.com/api/v1/status-pages/sp_xyz789 \
-H "Authorization: Bearer pg_live_abc123" \
-H "Content-Type: application/json" \
-d '{
"customDomain": "status.acme.com",
"branding": {
"primaryColor": "#10b981",
"logoUrl": "https://acme.com/logo.svg"
}
}'
# Response (200 OK)
{
"id": "sp_xyz789",
"name": "Acme Corp Status",
"customDomain": "status.acme.com",
"updatedAt": "2025-01-15T12:00:00Z"
}Error Codes
The PulseGuard API uses standard HTTP status codes to indicate the success or failure of a request.
| Code | Status | Description |
|---|---|---|
200 | OK | Request succeeded. |
201 | Created | Resource was successfully created. |
400 | Bad Request | Invalid request body or missing required fields. |
401 | Unauthorized | Missing or invalid API key. |
403 | Forbidden | API key does not have permission to access this resource. |
404 | Not Found | The requested resource does not exist. |
429 | Too Many Requests | Rate limit exceeded. Check the Retry-After header for when to retry. |
500 | Internal Server Error | Something went wrong on our end. If this persists, contact support. |
# Example error response
{
"error": {
"code": "validation_error",
"message": "The 'url' field is required for HTTP monitors.",
"details": [
{
"field": "url",
"message": "Required field is missing"
}
]
}
}