Uptime monitoring
What you’ll build: a dashboard that shows whether each service is healthy and puts any incident at the top the instant a check fails — a status page for your own stack, fed by a script you control.
Finished uptime dashboard: an alert feed of incidents beside a grid of service statuses.
Drop an image into public/shots/ and pass src.
What you’ll need
Section titled “What you’ll need”- PulseDeck running (Quickstart).
- A registered source and its
pd_…API key. - Anything that can run a check and make an HTTP request (a cron job, n8n, a small script).
1. Plan the structure
Section titled “1. Plan the structure”Use one category for monitoring and one stream for this set of services:
- Category:
monitoring - Stream:
uptime
2. Send the report
Section titled “2. Send the report”After each round of checks, your agent posts one report with three blocks: a
status grid (current health), an alert when something is down, and a
timeline of what changed. Post on every run, with the timestamp as the
Idempotency-Key.
curl -X POST http://localhost:3001/api/v1/reports \ -H "Authorization: Bearer pd_xxxxx" \ -H "Idempotency-Key: uptime-2026-06-23T14:05:00Z" \ -H "Content-Type: application/json" \ -d @uptime.json{ "version": "1.0", "source": { "id": "src_…" }, "category": { "slug": "monitoring" }, "stream": { "slug": "uptime" }, "report": { "title": "Uptime check — 14:05", "severity": "critical", "occurred_at": "2026-06-23T14:05:00Z", "tags": ["uptime"] }, "blocks": [ { "id": "services", "type": "status", "items": [ { "key": "api", "label": "API", "status": "down" }, { "key": "web", "label": "Web", "status": "healthy" }, { "key": "db", "label": "Database", "status": "healthy" } ] }, { "id": "incident", "type": "alert", "title": "API is unreachable", "severity": "critical", "message": "Health check timed out after 3 attempts." }, { "id": "history", "type": "timeline", "events": [ { "time": "2026-06-23T14:04:00Z", "label": "API latency rising", "status": "degraded" }, { "time": "2026-06-23T14:05:00Z", "label": "API down", "status": "down" } ] } ]}Set the report severity from the worst service state (critical if anything
is down, warning if degraded, else info) so the dashboard’s alert feed
only lights up when it should.
3. Build the dashboard
Section titled “3. Build the dashboard”Create a dashboard (Dashboards → New) and add two widgets:
- An alert_feed scoped to the
monitoringcategory — anywarning/criticalreport jumps to the top. - A stream_feed on
uptime— the latest full checks, so the status grid is always one click away.
{ "version": 1, "widgets": [ { "id": "a", "type": "alert_feed", "span": "half", "row": 0, "config": { "categoryId": "cat_monitoring", "limit": 10 } }, { "id": "f", "type": "stream_feed", "span": "half", "row": 0, "config": { "streamId": "str_uptime", "limit": 10 } } ]}The dashboard builder with an alert_feed and stream_feed widget placed side by side.
Drop an image into public/shots/ and pass src.
Make it your own
Section titled “Make it your own”- Per-client status pages — give each client its own workspace and an
uptimestream; the same agent posts to each. - Group by category — split
monitoringintoapi,infra,third-partycategories and point an alert feed at each. - History — because reports are immutable, the stream is a full audit trail of every check you ever ran.