API is down
InvestigatingSince , 1 min so far. Affects API.
- Investigating. API stopped responding to checks (Timed out). Opened automatically.
Checks every minute from four regions, alerts that repeat until acknowledged, errors and logs from your apps.
All 7 monitors are responding. 2 timeouts in the last 24 hours.
Up for 43 d 19 h99.99% passed
62,821 checks, median 142 ms from Copenhagen, 4 timeouts, 45 slow, 285 during maintenance
95% under 305 ms
Medians over this range, on one scale up to 1,000 ms. Europe's places are scaled to Copenhagen, its fastest shared place.
Up for 1 d 3 h99.97% passed
62,827 checks, median 195 ms from Copenhagen, 17 failed checks, 12 timeouts, 288 slow, 285 during maintenance
95% under 327 ms
Medians over this range, on one scale up to 1,500 ms. Europe's places are scaled to Copenhagen, its fastest shared place.
and 5 earlier failed runs in this window
Failures older than 14 days show on the bars only.
Up for 43 d 19 h99.98% passed
62,782 checks, median 180 ms from Copenhagen, 8 failed checks, 7 timeouts, 70 slow, 284 during maintenance
95% under 332 ms
Medians over this range, on one scale up to 800 ms. Europe's places are scaled to Copenhagen, its fastest shared place.
and 1 earlier failed run in this window
Failures older than 14 days show on the bars only.
Up for 11 d 10 h99.98% passed
16,455 checks, median 123 ms from Falkenstein, 2 failed checks, 1 timeout, 33 during maintenance
95% under 185 ms
Medians over this range, on one scale up to 1,000 ms. Europe's places are scaled to Falkenstein, its fastest shared place.
As reported on status.polar.sh
As reported on status.polar.sh
As reported on status.polar.sh
The page for StatOSS itself, checked once a minute. Yours has the same layout with your own monitors.
An API on an example page, from the minute its monitor is added to the same time the next day.
23 Oct
Add the URL. Test requests it at once and shows the status code and the response time.
Add a monitor
The add-a-monitor form with the name API, the URL https://api.example.com/health, and the test result: Passed: 200 in 174 ms.
23 Oct
Each bar is the median response time of the checks around it, so one slow check makes no spike. On Hobby and Pro the regions take turns, a minute each, from Helsinki in Finland, Falkenstein in Germany, Copenhagen in Denmark, Ashburn in the USA, Singapore and Sydney in Australia.
API is responding. No failed checks in the last 24 hours.
Updated
Up for 7 h 5 min100% passed
426 checks, median 111 ms from Falkenstein, all passed
95% under 145 ms
Medians over this range, on one scale up to 800 ms. Europe's places are scaled to Falkenstein, its fastest shared place.
No incidents in the last 7 days.
24 Oct
Singapore gets no answer within ten seconds, and a second try gets none either. The check gets a mark on the strip, amber for a timeout and red for any other failure, and no alert goes out.
API is responding. 1 timeout in the last 24 hours.
Updated
Up for 10 h 16 min99.83% passed
616 checks, median 112 ms from Falkenstein, 1 timeout
95% under 146 ms
Medians over this range, on one scale up to 1,000 ms. Europe's places are scaled to Falkenstein, its fastest shared place.
No incidents in the last 7 days.
02:45 to 02:55
From Singapore. Checked again there: failed too
From Ashburn, USA
DNS 4 ms, connect 71 ms, TLS 95 ms, first byte 227 ms
From Copenhagen, Denmark
DNS 4 ms, connect 35 ms, TLS 46 ms, first byte 107 ms
From Sydney, Australia
DNS 3 ms, connect 31 ms, TLS 41 ms, first byte 96 ms
From Singapore
DNS 4 ms, connect 162 ms, TLS 216 ms, first byte 516 ms
From Ashburn, USA
DNS 4 ms, connect 79 ms, TLS 106 ms, first byte 251 ms
Times are UTC.
24 Oct
The next check fails too. Two in a row make the monitor down: the headline says so, an incident opens on the page and one alert goes out.
From StatOSS alerts, [email protected]
API (https://api.example.com/health) is failing.
Error: timeout
Down since 24 Oct 02:51 UTC.
Open in the dashboard
API is down, open for 1 min. 2 timeouts in the last 24 hours.
Updated
Since , 1 min so far. Affects API.
Incident openDown for 1 min, since 99.67% passed
617 checks, median 112 ms from Falkenstein, 2 timeouts
95% under 146 ms
Medians over this range, on one scale up to 1,000 ms. Europe's places are scaled to Falkenstein, its fastest shared place.
No incidents in the last 7 days.
24 Oct
The next check passes, the incident is resolved and one more alert says so. The two failed checks stay on the strip, and the list under it gives the reason, the start time and how long it lasted.
From StatOSS alerts, [email protected]
API (https://api.example.com/health) is back up.
Downtime: 1 min
Time: 24 Oct 02:52 UTC
Open in the dashboard
API is responding. 2 timeouts in the last 24 hours.
Updated
Up for 1 min99.67% passed
618 checks, median 113 ms from Falkenstein, 2 timeouts
95% under 146 ms
Medians over this range, on one scale up to 1,000 ms. Europe's places are scaled to Falkenstein, its fastest shared place.
, resolved after 1 min. Affects API.
24 Oct
This monitor has a slow threshold of 400 ms, and from 13:00 its responses take longer. After two in a row the headline changes, the bars over the line turn indigo and an alert goes out.
From StatOSS alerts, [email protected]
API (https://api.example.com/health) is responding, but slowly.
Response time: 1,292 ms, over the 400 ms threshold
Time: 24 Oct 13:01 UTC
Open in the dashboard
API has been responding slowly for 59 min. 2 timeouts in the last 24 hours.
Updated
Slow for 59 min99.84% passed
1,286 checks, median 148 ms from Falkenstein, 2 timeouts, 16 slow
95% under 233 ms
Medians over this range, on one scale up to 3,000 ms. Europe's places are scaled to Falkenstein, its fastest shared place.
, resolved after 1 min. Affects API.
24 Oct
The release pipeline posts each deploy to the API, and the page draws it as a dashed line: v2.14.0 at 12:58, v2.14.1 at 14:28. Responses are back under 400 ms from 14:30, and one more alert says so.
curl -X POST \
https://statoss.com/api/v1/pages/PAGE_ID/deploys \
-H "Authorization: Bearer sk_..." \
-H "Content-Type: application/json" \
-d '{"version": "v2.14.1"}'From StatOSS alerts, [email protected]
API (https://api.example.com/health) is responding at normal speed again.
Slow for: 1 h 29 min
Time: 24 Oct 14:30 UTC
Open in the dashboard
API is responding. 2 timeouts in the last 24 hours.
Updated
Up for 10 min99.84% passed
1,326 checks, median 152 ms from Falkenstein, 2 timeouts, 23 slow
95% under 424 ms
Medians over this range, on one scale up to 3,000 ms. Europe's places are scaled to Falkenstein, its fastest shared place.
, resolved after 1 min. Affects API.
24 Oct
Visitors see every check of the last 24 hours at the page's StatOSS address, or at your own domain on Pro, and the range switch goes back as far as the plan keeps history. On Pro they subscribe to incident updates by email or in a Slack channel.
API is responding. 2 timeouts in the last 24 hours.
Updated
Up for 2 h 5 min99.86% passed
1,436 checks, median 152 ms from Falkenstein, 2 timeouts, 23 slow
95% under 416 ms
Medians over this range, on one scale up to 3,000 ms. Europe's places are scaled to Falkenstein, its fastest shared place.
, resolved after 1 min. Affects API.
Two failed checks in a row make an outage, and one passed check ends it. A second location confirms every failure before it counts.
method, headers, body, status, keyword
open or not
a record, and the text it must hold
one echo to a host
checked hourly, fails before it expires
the registry's date, every 6 hours
your cron job requests a URL
set by hand, or follows a vendor's page
Copenhagen, Falkenstein, Helsinki
Europe
Ashburn
North America
Singapore
Asia
Sydney
Oceania
London, Paris, San Jose, São Paulo, Toronto
$4 a month each
Johannesburg, Tokyo
$8 a month each
A fixed IP on an added place
$4 a month
On Hobby and Pro the regions take turns every minute, and a page picks which ones count toward its response times. Free checks every 5 minutes, from Europe.
Up for 21 h 7 min99.86% passed
1,440 checks, median 152 ms from Falkenstein, 2 timeouts
95% under 416 ms
Medians over this range, on one scale up to 3,000 ms. Europe's places are scaled to Falkenstein, its fastest shared place.
Email on every plan. Hobby and Pro add these channels, set per page, with a delivery record for each one.
From StatOSS alerts, [email protected]
API (https://api.example.com/health) is failing.
Error: timeout
Down since 24 Oct 02:51 UTC.
Open in the dashboard
SlackDiscordMicrosoft TeamsTelegramPagerDutyOpsgeniePushoverntfyA signed webhook
Anything that sends to PagerDuty's Events API, Opsgenie's Alert API or Sentry's webhooks sends to api.statoss.com instead, with a source's key.
Repeats until acknowledged
every 5 minutes
An acknowledgement lasts
4 hours, or until resolved
Hobby
one person, 3 sources
Pro
the team, 50 sources
Pro adds
escalation policies and schedules
Import
PagerDuty and Opsgenie, on Pro
From StatOSS alerts, [email protected]
Critical alert #214 from Sentry.
Paged through Platform, level 1 of 2.
Affected: northwind.example/checkout
p95 2,310 ms, over the 2,000 ms threshold
Opened 24 Oct 19:20 UTC.
AcknowledgeResolveOpen in the dashboard
On Pro each person picks how they are reached: email, Pushover, ntfy or Telegram. There are no phone calls or SMS. On-call in the docs
Everything on the status page besides the strips, and who gets to see it.
, resolved after 21 min. Affects API.
Post-mortem
Summary
A database failover left the API's connection pool empty. Requests timed out until the pool was restarted.
What we are changing
The pool's size and the failover timeout now follow the database's own settings.
Change the DSN and events land in an app, grouped into issues, on every plan.
# Any Sentry SDK takes the DSN. So do @statoss/sdk and the Python statoss package.
import * as StatOSS from "@statoss/sdk";
StatOSS.init({
dsn: "https://<key>@ingest.statoss.com/<app number>",
environment: "production",
});
# Source maps and releases, from CI
export SENTRY_URL=https://statoss.com
export SENTRY_AUTH_TOKEN=<a StatOSS API key that writes>
export SENTRY_ORG=statoss
export SENTRY_PROJECT=<the app's slug>
sentry-cli sourcemaps upload ./distAn add-on to Hobby and Pro, kept beside the errors of the same app. $0.25 a GB past 15. Lines kept 30 days count twice.
npx @statoss/cli logs tail 'level:>=warn service:api' --app web
npx @statoss/cli logs search '"timed out"' --since 1h --limit 50Pages, monitors, incidents, alert destinations, subscribers, the team and API keys. Keys read or write, and reach every page or one.
# An MCP client, with a key
claude mcp add statoss https://statoss.com/api/v1/mcp \
--transport http \
--header "Authorization: Bearer sk_..."
# The same key makes a page, and its first monitor, over REST
curl -X POST https://statoss.com/api/v1/pages \
-H "Authorization: Bearer sk_..." \
-H "Content-Type: application/json" \
-d '{"name": "Northwind", "url": "https://northwind.example/health"}'
# A deploy marker, from CI
curl -X POST https://statoss.com/api/v1/pages/PAGE_ID/deploys \
-H "Authorization: Bearer sk_..." \
-H "Content-Type: application/json" \
-d '{"version": "v2.14.1"}'Paste this into Claude Code, Codex or Cursor, in the project's folder.
Set up StatOSS for this project.
1. Read https://statoss.com/auth.md and follow it: register as an anonymous agent, solve the proof of work, and exchange the assertion for a token.
2. Look through the project for what to watch: the public URLs it serves (the site, the API, health endpoints), the scheduled jobs that should check in, and whether it writes logs.
3. PUT a draft to https://statoss.com/api/v1/agent/draft: one status page named after the project, an http monitor for each URL, a heartbeat monitor with periodMinutes for each scheduled job, and one app for the project's errors with its platform. Ask me only what the project cannot tell you.
4. Ask me for my email address and start the claim with it. Give me the claim link and the 6-digit code in one message, and say that the code goes into the page, not back to you. Poll the claim grant at the interval it names until I have confirmed.
5. After the claim, for the app draft_result made: read its dsn with GET https://statoss.com/api/v1/apps/{appId}, install the SDK for the project's language as https://statoss.com/docs/send-errors describes, keep the DSN in the project's configuration rather than in its code, and send one test error. If the project writes logs, send them to the same app as https://statoss.com/docs/send-logs describes. For each heartbeat monitor it made, read its pingUrl with GET https://statoss.com/api/v1/pages/{pageId}/monitors/{monitorId} and add the ping to the job.
6. Tell me what you set up, with the dashboardUrl draft_result gives for each page and app, and what draft_result.leftOut says the plan left out.
Free needs no card. Hobby and Pro bill monthly through Polar and can be cancelled from the billing page.
| Feature | Free$0a month | Hobby$4a month | Pro$15a month |
|---|---|---|---|
| Status pages | 1 | 1 | 10 |
| Monitors | 1 | 10 | 100, 50 per page |
| Checks | Every 5 minutes, from Europe | Every minute, four regions in turn | Every minute, four regions in turn |
| History | 7 days | 90 days | A year |
| Alerts | Email, Slack, Discord, Teams, Telegram, PagerDuty, Opsgenie, Pushover, ntfy and webhooks | The same | |
| On-call | None | One person, 3 sources | The team, 50 sources, escalation and schedules |
| Errors a month | 5,000, kept 30 days | 50,000, kept 30 days | 500,000, kept 90 days |
| Logs | None | $5 a month with 15 GB, then $0.25 a GB | The same |
| Subscribers | None | None | 1,000 per page, blocks of 1,000 at $5 |
| Your own domain, private pages | No | No | Yes |
| People | 1 | 1 | 3, then $5 a month each, up to 25 |
statoss-standalone is MIT licensed: the same kinds of check, the same strip and page, incidents, maintenance windows and alerts to the same ten places. No limit on pages or monitors.
curl -o config.yaml \
https://raw.githubusercontent.com/kroqdotdev/statoss-standalone/main/config.example.yaml
# Edit config.yaml; the example explains every field.
docker run -d --name statoss --restart unless-stopped \
-p 127.0.0.1:3000:3000 \
-v "$PWD/config.yaml:/data/config.yaml:ro" \
-v statoss-data:/data \
ghcr.io/kroqdotdev/statoss-standalone:latest