← Back to site

All Systems Operational

Last check: 16 Sep 03:00 UTC  ·  checks run every ~10 min  ·  page refreshes every 5 min

Services

Website External probe Operational

GET https://puntersedge.online → expects HTTP 200

89 days agoToday
7d 100.00%1008 checks · 100.0% coverage
30d 99.95%4321 checks · 100.0% coverage
90d 99.99%20204 checks · 94.6% coverage
Since 18 Jun 2026 99.99%20206 checks · 94.6% coverage
Last check: 16 Sep 03:00 UTC (200)

Monitoring since 18 Jun 2026 · 20206 checks recorded · monitor running for 94.6% of that period (116.7 h unobserved).

API Platform External probe Operational

GET https://puntersedge.online/api → expects HTTP 200

31 days agoToday
7d 100.00%1008 checks · 100.0% coverage
30d 99.95%4321 checks · 100.0% coverage
Since 16 Aug 2026 99.96%4554 checks · 100.0% coverage
Last check: 16 Sep 03:00 UTC (200)

Monitoring since 16 Aug 2026 · 4554 checks recorded · monitor running for 100.0% of that period. Windows longer than that record are omitted rather than assumed.

Legacy redirect External probe Operational

GET https://puntersedge.online/api-platform → expects HTTP 200

17 days agoToday
7d 100.00%1008 checks · 100.0% coverage
Since 30 Aug 2026 99.96%2332 checks · 100.0% coverage
Last check: 16 Sep 03:00 UTC (200)

Monitoring since 30 Aug 2026 · 2332 checks recorded · monitor running for 100.0% of that period. Windows longer than that record are omitted rather than assumed.

Pricing External probe Operational

GET https://puntersedge.online/api/pricing → expects HTTP 200

31 days agoToday
7d 99.90%1008 checks · 100.0% coverage
30d 99.91%4321 checks · 100.0% coverage
Since 16 Aug 2026 99.91%4554 checks · 100.0% coverage
Last check: 16 Sep 03:00 UTC (200)

Monitoring since 16 Aug 2026 · 4554 checks recorded · monitor running for 100.0% of that period. Windows longer than that record are omitted rather than assumed.

Telegram Bot External probe Operational

GET bot health endpoint → expects HTTP 200

89 days agoToday
7d 100.00%1008 checks · 100.0% coverage
30d 99.98%4321 checks · 100.0% coverage
90d 100.00%20204 checks · 94.6% coverage
Since 18 Jun 2026 100.00%20206 checks · 94.6% coverage
Last check: 16 Sep 03:00 UTC (200)

Monitoring since 18 Jun 2026 · 20206 checks recorded · monitor running for 94.6% of that period (116.7 h unobserved).

Odds API Internal probe Operational

GET /health on the odds API service → expects HTTP 200  ·  loopback: this probe does not traverse DNS, TLS or nginx

89 days agoToday
7d 100.00%1008 checks · 100.0% coverage
30d 99.91%4321 checks · 100.0% coverage
90d 93.82%20204 checks · 94.6% coverage
Since 18 Jun 2026 93.81%20206 checks · 94.6% coverage
Last check: 16 Sep 03:00 UTC (200)

Monitoring since 18 Jun 2026 · 20206 checks recorded · monitor running for 94.6% of that period (116.7 h unobserved).

Stripe Webhooks Internal probe Operational

GET webhook listener endpoint (POST-only; 405 on GET proves it answers) → expects HTTP 405  ·  loopback: this probe does not traverse DNS, TLS or nginx

89 days agoToday
7d 100.00%1008 checks · 100.0% coverage
30d 99.98%4321 checks · 100.0% coverage
90d 100.00%20204 checks · 94.6% coverage
Since 18 Jun 2026 100.00%20206 checks · 94.6% coverage
Last check: 16 Sep 03:00 UTC (405)

Monitoring since 18 Jun 2026 · 20206 checks recorded · monitor running for 94.6% of that period (116.7 h unobserved).

Outbound email

Operational

Outbound email is sending.

Checked 3 min ago. The transport answered a reachability probe. Last successful send 16 Sep 02:20 UTC (47 min ago).

Measured by a separate monitor that reads the delivery result of every message the API sends and probes whether the configured transport is reachable — it never sends a test message to anyone. This page only reads what that monitor last wrote, which is why the time of its last run is published above: if the monitor stops, that timestamp stops moving, and no figure here can quietly go on looking healthy. Recipient addresses are masked and no message subject is published. Also available as JSON at /status.json.

Gaps in monitoring

Uptime above is computed over the checks that actually ran. When the monitor itself is not running, that time is neither up nor down — it is unknown, and dividing it out would quietly inflate every percentage. Every such gap is listed here.

25 Jun 02:30 UTC → 29 Jun 23:13 UTC — 116.7 hours with no checks recorded.

Second, independent probe

A separate process on the API host polls https://puntersedge.online/ping on its own schedule. It is a useful cross-check because it shares no scheduler and no code path with the monitor above — but note what it targets: it probes the website, not api.puntersedge.online. The /v1/uptime endpoint is backed by this same file, so read its number as website availability measured from the API box.

99.97% over the last 30 days (8639 checks, monitor running for 100.0% of the window). Buffer holds the most recent 8640 checks, spanning 30.0 days from 17 Aug 2026; last check 16 Sep 03:04 UTC.

How we measure — and what we do not promise

The checks

A process on the same DigitalOcean droplet as the services issues one HTTP request per surface and records the response code and whether it matched the expected code. The measured interval between checks over the last 24 hours is 10 minutes — measured from the history file rather than read off the scheduler, because the two have disagreed before. Each service card shows the exact URL probed and the code it expects.

2 of the 7 probes are loopback requests on the box itself. They confirm the application process is answering; they cannot detect a DNS, TLS, nginx or network failure that would take the service down for every customer. They are labelled Internal probe above and you should read them as narrower evidence than the external ones.

The percentages

Data freshness

This page is about service availability. It says nothing about how fresh the odds inside a response are — that is a separate, separately measured thing, published with its own p50/p90/max figures on the coverage page under “Data refresh rates”. Those numbers live in one place so they cannot drift apart; they are not restated here.

Every quote the API returns carries its own age. On sports responses the quality object gives score, status, age_seconds and stale_after_seconds; stale_after_seconds is 1800, twice the nominal 900-second poll, so a market flips to stale only after two polls have failed to refresh it. Racing quotes carry a per-book age_seconds, and each race carries data_age_seconds — deliberately the age of the worst contributing book, not the best — alongside freshest_age_seconds. Read those rather than assuming a fixed panel of bookmakers is always quoting: overnight, when the Australian card has finished, far fewer books are.

What happens during an outage

What is not guaranteed

There is no contractual uptime SLA. Everything on this page is observed measurement of what has happened, published so you can judge it yourself. It is not a commitment about what will happen, there is no credit or refund schedule attached to it, and nothing here should be read as one. If you need a contractual availability commitment, ask — it is a conversation, not a published number.

This is not real-time tick data, and it is not suitable for latency-sensitive trading. Refresh rates depend on upstream bookmaker availability and rate limits.

Machine-readable

/uptime.json — availability per surface, each figure with its window, check count and coverage. /status.json — current up/down per service. Both carry the same caveats as fields, so a consumer that never reads this page still gets them.