# UptimeSignal > Uptime monitoring and status pages for developers. We ping your endpoints, alert you when they break, and give you public status pages to share with users. ## Quick Facts - Website: https://uptimesignal.io - Dashboard: https://app.uptimesignal.io - API: https://api.uptimesignal.io - MCP Package: `uptimesignal-mcp` on npm (for AI coding agents) - Sister product: [CronSignal](https://cronsignal.io) (cron job monitoring) ## Pricing | | Free | Pro ($15/mo) | |---|---|---| | Monitors | 25 | Unlimited | | Check interval | 5 min | 1 min | | History | 7 days | 90 days | | Status pages | 1 | Unlimited | | Custom domains | - | Yes (auto-SSL) | | Remove branding | - | Yes | | Integrations | Email only | Email, Slack, Discord, Telegram, Webhooks | | Commercial use | Yes | Yes | No trial period. Free tier is the trial. ## Features ### Uptime Monitoring - HTTP/HTTPS endpoint monitoring (GET, POST, PUT, PATCH, DELETE) - Custom headers, request body, and content type - Expected status code validation - Keyword/content validation (assert keyword present or absent in response) - SSL certificate monitoring with expiry alerts (configurable days threshold) - Response time tracking and charts - Response time SLA alerts (threshold-based slow/recovery alerts) - Tags for organizing monitors (up to 5 per monitor) - Embeddable status badges (uptime %, status, response time) ### Maintenance Windows - One-time maintenance windows (suppress alerts during deploys) - Recurring windows: daily, weekly, monthly - Per-monitor or account-wide - Quick suppress: suppress alerts for N minutes from dashboard ### Status Pages - Unlimited public status pages - Custom branding: logo, accent color, header text - Custom domains with auto-provisioned SSL (Pro) - Remove "Powered by UptimeSignal" branding (Pro) - 30-day uptime bars per monitor - Component groups for organizing services - Manual components with statuses: operational, degraded, partial_outage, major_outage, maintenance - Incident management: create, update, resolve with timeline - Inbound webhooks for CI/CD automated status updates - Public URL: https://status.uptimesignal.io/{slug} ### Integrations (Pro only) - Slack (webhook URL) - Discord (webhook URL) - Telegram (bot with verification flow) - Custom webhooks (HTTPS, custom headers) - All integrations receive down, recovery, slow, and slow_recovery alerts ### Embeddable Badges - `https://api.uptimesignal.io/badge/{monitor_id}/uptime.svg` - 30-day uptime % - `https://api.uptimesignal.io/badge/{monitor_id}/status.svg` - Current status - `https://api.uptimesignal.io/badge/{monitor_id}/response.svg` - Avg response time (24h) - `https://api.uptimesignal.io/badge/{monitor_id}/data.json` - JSON data for custom badges - Badges can be enabled/disabled per monitor ## MCP Server for AI Agents Install `uptimesignal-mcp` from npm to give your AI coding agent (Claude, Cursor, etc.) the ability to manage uptime monitors programmatically. The MCP server exposes tools for creating, listing, pausing, and deleting monitors. ## API Overview Base URL: `https://api.uptimesignal.io` Authentication: Bearer token via `Authorization: Bearer ` header. Get a token by requesting a magic link via email. ### Auth - `POST /auth/magic-link` - Request magic link email. Body: `{ "email": "..." }` - `POST /auth/verify` - Verify token from magic link. Body: `{ "token": "..." }`. Returns session token. - `GET /auth/me` - Get current user info - `POST /auth/logout` - Logout (client-side token removal) ### Monitors - `GET /monitors` - List all monitors (optional `?tags=tag1,tag2` filter) - `POST /monitors` - Create monitor - `GET /monitors/:id` - Get single monitor - `PUT /monitors/:id` - Update monitor - `DELETE /monitors/:id` - Delete monitor - `POST /monitors/:id/pause` - Pause monitoring - `POST /monitors/:id/resume` - Resume monitoring - `POST /monitors/:id/suppress` - Quick suppress alerts. Body: `{ "minutes": 30 }` - `GET /monitors/:id/checks` - Check history (`?limit=100`, max 1000) - `GET /monitors/:id/checks/:checkId` - Single check with response body/headers - `GET /monitors/:id/stats` - Stats with period (`?period=24h|7d|30d`) - `GET /monitors/:id/uptime-bars` - Hourly uptime bars (`?hours=24`, max 168) - `GET /monitors/:id/alerts` - Alert history (`?limit=50`, max 200) ### Dashboard - `GET /stats` - Overall dashboard stats (up/down/paused/pending counts) - `GET /tags` - All tags with counts ### Status Pages - `GET /status-pages` - List status pages - `POST /status-pages` - Create status page - `GET /status-pages/:id` - Get status page - `PUT /status-pages/:id` - Update status page - `DELETE /status-pages/:id` - Delete status page - `POST /status-pages/:id/custom-domain` - Set custom domain (Pro) - `POST /status-pages/:id/custom-domain/verify` - Verify custom domain DNS - `DELETE /status-pages/:id/custom-domain` - Remove custom domain ### Incidents - `GET /status-pages/:id/incidents` - List incidents - `POST /status-pages/:id/incidents` - Create incident - `GET /status-pages/:id/incidents/:incidentId` - Get incident with updates - `POST /status-pages/:id/incidents/:incidentId/updates` - Add incident update - `DELETE /status-pages/:id/incidents/:incidentId` - Delete incident ### Components & Groups - `GET /status-pages/:id/component-groups` - List component groups - `POST /status-pages/:id/component-groups` - Create component group - `PUT /status-pages/:id/component-groups/:groupId` - Update group - `DELETE /status-pages/:id/component-groups/:groupId` - Delete group - `GET /status-pages/:id/components` - List components - `POST /status-pages/:id/components` - Create component - `PUT /status-pages/:id/components/:componentId` - Update component - `DELETE /status-pages/:id/components/:componentId` - Delete component ### Inbound Webhooks (Status Pages) - `GET /status-pages/:id/webhooks` - List webhooks - `POST /status-pages/:id/webhooks` - Create webhook - `PUT /status-pages/:id/webhooks/:webhookId` - Update webhook - `DELETE /status-pages/:id/webhooks/:webhookId` - Delete webhook - `POST /status-pages/:id/webhooks/:webhookId/regenerate` - Regenerate secret - `GET /status-pages/:id/webhooks/:webhookId/logs` - Webhook call logs - `POST /webhook/:secret` - Public inbound webhook endpoint (actions: update_component, create_incident, update_incident, resolve_incident) ### Integrations (Pro) - `GET /integrations` - List integrations - `POST /integrations` - Create integration (types: slack, discord, telegram, webhook) - `PUT /integrations/:id` - Update integration - `DELETE /integrations/:id` - Delete integration - `POST /integrations/:id/test` - Send test alert - `POST /integrations/telegram/init` - Start Telegram verification - `GET /integrations/telegram/status` - Check Telegram connection ### Maintenance Windows - `GET /maintenance` - List maintenance windows - `POST /maintenance` - Create maintenance window - `GET /maintenance/:id` - Get window - `PUT /maintenance/:id` - Update window - `DELETE /maintenance/:id` - Delete window ### Badges (Public, no auth) - `GET /badge/:id/uptime.svg` - Uptime badge SVG - `GET /badge/:id/status.svg` - Status badge SVG - `GET /badge/:id/response.svg` - Response time badge SVG - `GET /badge/:id/data.json` - Badge data JSON ### Billing - `POST /stripe/checkout` - Create Stripe checkout session - `POST /stripe/portal` - Create billing portal session - `POST /stripe/webhook` - Stripe webhook handler ### Tools (Public, rate-limited) - `POST /tools/check-url` - Check URL status and response time. Body: `{ "url": "..." }` - `POST /tools/ssl-check` - Check SSL certificate validity. Body: `{ "domain": "..." }` ### Public Status Page Data (no auth) - `GET /public/status/:slug` - Full status page data (monitors, incidents, components) - `GET /public/status-by-domain/:domain` - Lookup slug by custom domain ### Test Endpoints (Public) - `GET /test/healthy` - Always 200 - `GET /test/unhealthy` - Always 500 - `GET /test/200` through `/test/504` - Returns specific status codes - `GET /test/timeout` - 60-second hang - `GET /test/slow` - 5-second delay then 200 - `GET /test/random` - Random 200/500/503 ## Getting Started 1. Go to https://uptimesignal.io and enter your email 2. Click the magic link in your inbox (no password needed) 3. Add your first monitor: enter a URL and name 4. Configure alert preferences 5. Optionally create a status page to share uptime with users ## Free Tools (no account required) - Is It Down Checker: https://uptimesignal.io/tools/is-it-down - SSL Certificate Checker: https://uptimesignal.io/tools/ssl-checker - HTTP Status Checker: https://uptimesignal.io/tools/http-status - Test Endpoints: https://uptimesignal.io/tools/test-endpoints ## Comparison to Alternatives - vs UptimeRobot: Flat $15/mo unlimited vs per-monitor pricing. Free tier allows commercial use. Built-in status pages included. - vs Pingdom: Much cheaper, simpler, developer-focused. Status pages included at no extra cost. - vs Checkly: Simpler for basic HTTP monitoring. Significantly cheaper. - vs Better Stack: Focused monitoring + status pages without incident management overhead. - vs Atlassian Statuspage: $15/mo for monitoring + status pages vs $29/mo for status pages only (no monitoring). ## Sister Product CronSignal (https://cronsignal.io) monitors cron jobs and scheduled tasks. Same team, different direction: - UptimeSignal: We ping your endpoints (synthetic/active monitoring) - CronSignal: Your jobs ping us (heartbeat/passive monitoring) ## Contact - Website: https://uptimesignal.io - Contact: https://uptimesignal.io/contact