Back to Docs
API Reference

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 URLhttps://www.pulseguard.floelife.com/api/v1
Content Typeapplication/json
Rate Limits100 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.

GET/v1/monitors

Returns 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
  }
}
POST/v1/monitors

Create a new monitor. Required fields: name, type, url.

FieldTypeDescription
namestringDisplay name for the monitor
typeenumhttp | ssl | dns | tcp | ping
urlstringURL or hostname to monitor
intervalnumberCheck interval in seconds (default: 300)
regionsstring[]Monitoring regions (default: ["us-east-1"])
alertChannelsstring[]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"
}
GET/v1/monitors/:id

Get 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
}
PATCH/v1/monitors/:id

Update 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"
}
DELETE/v1/monitors/:id

Permanently 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.

GET/v1/incidents

List 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"
    }
  ]
}
POST/v1/incidents

Create an incident manually. Useful for planned maintenance or incidents detected outside of PulseGuard.

FieldTypeDescription
titlestringIncident title
severityenumcritical | major | minor | maintenance
messagestringInitial incident update message
affectedMonitorsstring[]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"
}
PATCH/v1/incidents/:id

Update 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.

GET/v1/status-pages

List 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"]
        }
      ]
    }
  ]
}
POST/v1/status-pages

Create 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"
}
PATCH/v1/status-pages/:id

Update 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.

CodeStatusDescription
200OKRequest succeeded.
201CreatedResource was successfully created.
400Bad RequestInvalid request body or missing required fields.
401UnauthorizedMissing or invalid API key.
403ForbiddenAPI key does not have permission to access this resource.
404Not FoundThe requested resource does not exist.
429Too Many RequestsRate limit exceeded. Check the Retry-After header for when to retry.
500Internal Server ErrorSomething 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"
      }
    ]
  }
}