API Reference
Complete reference for PulseAPI REST endpoints. All requests require authentication unless marked public.
Authentication
Two authentication methods are supported. Use JWT tokens for web sessions, API keys for scripts and integrations.
curl -H "Authorization: pk_live_abc123..." \
https://api.pulseapi.tech/endpointsGenerate API keys in Dashboard → Settings → API Keys. Pass the raw key in the Authorization header (no "Bearer" prefix). Keys are scoped with granular permissions and optional expiry.
# Login to get a token
curl -X POST https://api.pulseapi.tech/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"securepassword"}'
# Use the token
curl -H "Authorization: Bearer eyJhbG..." \
https://api.pulseapi.tech/endpointsJWT tokens expire after 7 days. If 2FA is enabled, the login response will include requiresTwoFactor: true and you must provide a TOTP code.
Base URL
All endpoints below are relative to this base URL. Responses are JSON with Content-Type: application/json.
Interactive API Explorer
Endpoints
/endpointsList all monitored endpoints for your organization.
curl -H "Authorization: YOUR_API_KEY" \
"https://api.pulseapi.tech/endpoints?limit=50&offset=0"Query params:
limit-- max results (default 50, max 200)offset-- pagination offset
/endpointsCreate a new endpoint to monitor.
{
"name": "Production API",
"url": "https://api.example.com/health",
"method": "GET",
"checkInterval": 300,
"timeout": 10,
"tags": ["production", "critical"]
}Validation:
- URL: valid http/https, SSRF-protected
- Method: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS
- checkInterval: 60--3600 seconds (plan minimum may apply)
- timeout: 5--60 seconds
/endpoints/:idGet a single endpoint by ID.
curl -H "Authorization: YOUR_API_KEY" \
https://api.pulseapi.tech/endpoints/abc123/endpoints/:idUpdate an existing endpoint (partial update).
{
"checkInterval": 600,
"enabled": true,
"tags": ["staging"]
}/endpoints/:idDelete an endpoint. Cascade-deletes all checks and alerts.
curl -X DELETE -H "Authorization: YOUR_API_KEY" \
https://api.pulseapi.tech/endpoints/abc123/endpoints/:id/checkTrigger an immediate check. Runs the full pipeline (status evaluation, alerts).
curl -X POST -H "Authorization: YOUR_API_KEY" \
https://api.pulseapi.tech/endpoints/abc123/check{
"result": {
"success": true,
"statusCode": 200,
"responseTime": 142
}
}/endpoints/:id/maintenanceToggle maintenance mode. Auto-resolves open alerts when enabled.
{
"enabled": true,
"until": "2026-04-02T06:00:00Z"
}Stats & Checks
/endpoints/:id/checksGet check history for an endpoint (paginated, time-filtered).
curl -H "Authorization: YOUR_API_KEY" \
"https://api.pulseapi.tech/endpoints/abc123/checks?limit=20&from=2026-01-01T00:00:00Z"Query params:
limit-- number (default 50)from-- ISO timestamp (start filter)to-- ISO timestamp (end filter)
/endpoints/:id/statsGet aggregated uptime and performance stats.
curl -H "Authorization: YOUR_API_KEY" \
"https://api.pulseapi.tech/endpoints/abc123/stats?period=24h"{
"uptime": 99.5,
"avgResponseTime": 250,
"totalChecks": 288,
"failedChecks": 1
}Supported periods: 24h, 7d. Stats for 30d and 90d are available via the summary endpoint.
Incidents
Incidents are scoped to organizations and linked to status pages. All incident routes require the orgId path parameter.
/orgs/:orgId/incidentsList incidents for an organization. Filter by status or component.
curl -H "Authorization: YOUR_API_KEY" \
"https://api.pulseapi.tech/orgs/ORG_ID/incidents?status=investigating&limit=20"Query params:
status-- investigating, identified, monitoring, resolvedcomponent-- filter by component keylimit,offset-- pagination
/orgs/:orgId/incidentsCreate a new incident. Notifies status page subscribers and triggers escalation.
{
"statusPageId": "STATUS_PAGE_ID",
"title": "Database connectivity issues",
"status": "investigating",
"severity": "major",
"message": "We are investigating reports of increased error rates.",
"componentKeys": ["database"]
}Severity options:
/orgs/:orgId/incidents/:idUpdate incident status, severity, or affected components.
{
"status": "resolved",
"severity": "minor"
}Setting status to resolved automatically sets resolvedAt and cancels pending escalations.
/orgs/:orgId/incidents/:id/updatesAdd a timeline update to an incident.
{
"status": "identified",
"message": "Root cause identified: misconfigured connection pool."
}/orgs/:orgId/incidents/:idDelete an incident and all its updates.
curl -X DELETE -H "Authorization: YOUR_API_KEY" \
https://api.pulseapi.tech/orgs/ORG_ID/incidents/INCIDENT_IDAlerts
/alertsList alerts for your organization's endpoints. Supports filtering and pagination.
curl -H "Authorization: YOUR_API_KEY" \
"https://api.pulseapi.tech/alerts?resolved=false&limit=20"{
"alerts": [
{
"id": "uuid",
"type": "downtime",
"message": "Endpoint is down: connection refused",
"resolved": false,
"createdAt": "2026-01-15T10:30:00Z",
"endpointId": "uuid",
"endpointName": "Production API",
"endpointUrl": "https://api.example.com/health"
}
],
"total": 1,
"limit": 20,
"offset": 0
}Alert types:
downtime-- 2+ consecutive check failuresrecovery-- endpoint back online after downtimeslow_response-- response time exceeds threshold (rate-limited: 1/hour)
/alerts/:id/resolveManually resolve an alert with an optional note.
curl -X PATCH -H "Authorization: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"note":"Fixed by scaling up replicas"}' \
https://api.pulseapi.tech/alerts/ALERT_ID/resolveStatus Pages
/status/:slugpublicPublic endpoint (no auth). Returns the current status of all endpoints on a status page.
curl https://api.pulseapi.tech/status/mycompany{
"overallStatus": "operational",
"updatedAt": "2026-01-15T10:30:00Z",
"endpoints": [
{
"id": "uuid",
"name": "Production API",
"status": "up",
"uptime24h": 99.9,
"responseTime": 120,
"lastChecked": "2026-01-15T10:29:00Z"
}
],
"incidents": [],
"statusPage": {
"name": "My Company Status",
"slug": "mycompany"
}
}Also supports custom domain lookup. Set your slug and domain in Dashboard → Status Page.
API Keys
Manage scoped API keys for programmatic access. Keys use a pk_live_ prefix and support granular permission scopes.
/orgs/:orgId/api-keysCreate a new API key. The raw key is returned only once.
{
"name": "CI/CD Pipeline",
"scopes": ["endpoints:read", "endpoints:write", "alerts:read"],
"expiresAt": "2027-01-01T00:00:00Z"
}Available scopes:
endpoints:readendpoints:writeincidents:readincidents:writestatus:readcomponents:readalerts:readalerts:writeorg:readorg:manage/orgs/:orgId/api-keysList all API keys (shows prefix only, not the full key).
curl -H "Authorization: YOUR_API_KEY" \
https://api.pulseapi.tech/orgs/ORG_ID/api-keys/orgs/:orgId/api-keys/:keyIdRevoke an API key. Takes effect immediately.
curl -X DELETE -H "Authorization: YOUR_API_KEY" \
https://api.pulseapi.tech/orgs/ORG_ID/api-keys/KEY_IDError Codes
All errors return a JSON body with an error field.
{
"error": "Endpoint not found"
}Rate Limits
Rate limit headers are returned on applicable endpoints: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
OpenAPI & SDK Generation
PulseAPI exposes an OpenAPI 3.1 specification. Use it to auto-generate a type-safe client in any language.
curl -o openapi.json https://api.pulseapi.tech/docs/jsonbun add -D openapi-typescript openapi-fetch
bunx openapi-typescript openapi.json -o ./pulseapi.d.ts
# Usage:
import createClient from 'openapi-fetch';
import type { paths } from './pulseapi';
const client = createClient({
baseUrl: 'https://api.pulseapi.tech',
headers: { Authorization: 'pk_live_abc123...' },
});
const { data } = await client.GET('/endpoints'); # Python
pip install openapi-python-client
openapi-python-client generate --url https://api.pulseapi.tech/docs/json
# Any language via OpenAPI Generator (50+ targets)
npm install @openapitools/openapi-generator-cli -g
openapi-generator-cli generate -i openapi.json -g go -o ./pulseapi-goFull Example
# 1. Create an API key in Dashboard > Settings > API Keys
API_KEY="pk_live_abc123..."
# 2. Create an endpoint
curl -X POST https://api.pulseapi.tech/endpoints \
-H "Authorization: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Production API",
"url": "https://api.example.com/health",
"method": "GET",
"checkInterval": 300,
"timeout": 10
}'
# 3. List your endpoints
curl -H "Authorization: $API_KEY" \
https://api.pulseapi.tech/endpoints
# 4. Trigger a manual check
curl -X POST -H "Authorization: $API_KEY" \
https://api.pulseapi.tech/endpoints/ENDPOINT_ID/check
# 5. Get uptime stats
curl -H "Authorization: $API_KEY" \
"https://api.pulseapi.tech/endpoints/ENDPOINT_ID/stats?period=24h"
# 6. List active alerts
curl -H "Authorization: $API_KEY" \
"https://api.pulseapi.tech/alerts?resolved=false"
# 7. Get public status (no auth needed)
curl https://api.pulseapi.tech/status/your-slug