Attestwire status
Live availability of everything we run, checked every 5 minutes with real requests to the same URLs you use.
Last checked .
- HomepageGET / Operational 53 ms 100%
- Rule page BR-02GET /rules/BR-02 Operational 54 ms 100%
- HomepageGET / Operational 54 ms 100%
- Health endpointGET /api/health Operational 83 ms 100%
- Signup endpoint (liveness)POST /api/subscribe Operational 12 ms 100%
- API documentationGET /docs Operational 17 ms 100%
- Health endpointGET /v1/health Operational 9 ms 100%
- Authenticated validationPOST /v1/validate Operational 1.1 s 100%
- Status boardGET / Operational 23 ms 100%
- Data freshnessGET /api/status.json Operational 19 ms 100%
- Alert signup (liveness)POST /api/alerts Operational 7 ms 100%
- Redirect to apexGET /rules/BR-02 Operational 19 ms 100%
attestwire-pulse
Internal alerting (not part of the overall verdict) Operational 100%24h 100%7d- Cron lanes completingGET /health Operational 43 ms 100%
Uptime comes from our own checks: monitoring began 2026-08-09, and we do not backfill history we did not measure.
Incident history
Every status change we have recorded, newest first. Nothing here is edited or removed after the fact.
- vies.attestwire.com — Data freshness Down → Operational
- vies.attestwire.com — Data freshness Operational → Down STALE_DATA
- vies.attestwire.com — Data freshness Down → Operational
- vies.attestwire.com — Data freshness Operational → Down STALE_DATA
- vies.attestwire.com — Data freshness Degraded → Operational
- vies.attestwire.com — Data freshness Operational → Degraded SLOW
- attestwire-pulse.ben-harborne.workers.dev — Cron lanes completing Degraded → Operational
- attestwire-pulse.ben-harborne.workers.dev — Cron lanes completing Operational → Degraded SLOW
- vies.attestwire.com — Data freshness Down → Operational
- vies.attestwire.com — Data freshness Operational → Down STALE_DATA
- attestwire-pulse.ben-harborne.workers.dev — Cron lanes completing Down → Operational
- vies.attestwire.com — Data freshness Down → Operational
- attestwire-pulse.ben-harborne.workers.dev — Cron lanes completing Operational → Down STALE_DATA
- vies.attestwire.com — Data freshness Operational → Down STALE_DATA
- attestwire-pulse.ben-harborne.workers.dev — Cron lanes completing Down → Operational
- vies.attestwire.com — Data freshness Down → Operational
- attestwire-pulse.ben-harborne.workers.dev — Cron lanes completing Operational → Down STALE_DATA
- vies.attestwire.com — Data freshness Operational → Down STALE_DATA
- attestwire-pulse.ben-harborne.workers.dev — Cron lanes completing Down → Operational
- vies.attestwire.com — Data freshness Down → Operational
- attestwire-pulse.ben-harborne.workers.dev — Cron lanes completing Operational → Down STALE_DATA
- vies.attestwire.com — Data freshness Operational → Down STALE_DATA
- attestwire-pulse.ben-harborne.workers.dev — Cron lanes completing Down → Operational
- attestwire-pulse.ben-harborne.workers.dev — Cron lanes completing Operational → Down STALE_DATA
- vies.attestwire.com — Data freshness Down → Operational
What each check does
| Service | Check | Pass condition |
|---|---|---|
| attestwire.com | Homepage | GET / — must return 200 and render the site. |
| attestwire.com | Rule page BR-02 | GET /rules/BR-02 — one real rule page, so a broken build is visible. |
| check.attestwire.com | Homepage | GET / — must return 200 and serve the checker page. |
| check.attestwire.com | Health endpoint | GET /api/health — must return ok:true with data.source kv and a checked_at under 48 h old, proving the platform-list refresh cron is alive. |
| check.attestwire.com | Signup endpoint (liveness) | POST /api/subscribe with an empty payload — must reject with a 4xx JSON error, proving the capture path is alive without creating a subscriber. |
| api.attestwire.com | API documentation | GET /docs — the most-linked page we publish; must return 200 and render. |
| api.attestwire.com | Health endpoint | GET /v1/health — must return ok:true with billing_configured true. |
| api.attestwire.com | Authenticated validation | POST /v1/validate with a real key and a known-good invoice — must return valid:true. |
| vies.attestwire.com | Status board | GET / — must return 200 and render the board. |
| vies.attestwire.com | Data freshness | GET /api/status.json — generatedAt must be less than 15 minutes old. |
| vies.attestwire.com | Alert signup (liveness) | POST /api/alerts with an empty payload — must reject with a 4xx JSON error, proving the capture path is alive without creating a subscriber. |
| www.attestwire.com | Redirect to apex | GET /rules/BR-02 — must return 301 to https://attestwire.com/rules/BR-02, path preserved. |
| attestwire-pulse | Cron lanes completing | GET /health — the NOW lane must have written its hourly heartbeat within 75 min and the DAILY lane must have completed within 26 h. Internal; excluded from the overall verdict. |
JSON API
Current status, latency and uptime for every service and check. CORS-open, cached 60 seconds, no key and no signup.
curl https://status.attestwire.com/api/uptime.json
Served at /api/uptime.json rather than /api/status.json: this host used to serve the VIES monitor, and /api/status.json here still permanently redirects to vies.attestwire.com/api/status.json so third-party dashboards that were polling it keep getting the VIES data they asked for.
How this is measured
A Cloudflare Worker runs every 5 minutes and makes real requests to the surfaces listed above — the same URLs a customer uses, not internal health pings. Each check states its own pass condition: a 200 is not enough if the body is wrong. The rule page check fails if the page stops containing its own rule ID; the VIES check fails if the monitor's JSON is more than 15 minutes stale, even though the endpoint is answering; the API check posts a known-good invoice and fails if the verdict comes back anything other than valid: true; the www check follows nothing and fails if the 301 drops the path it was given.
Two checks post to signup endpoints — the checker's and the VIES monitor's. They send a deliberately empty payload and pass only if it is rejected with a 4xx JSON error, so they prove the capture path is alive without ever creating a subscriber. They assert the status class rather than an exact code, because the code those handlers reject with is theirs to change and any 4xx proves the same thing.
Operational means the check passed inside its latency threshold. Degraded means it passed but was slow, or we were rate limited. Down means it failed: a timeout, a 5xx, an unexpected status, or a response that did not contain what the check requires.
Uptime is (operational + degraded) ÷ (operational + degraded + down). Checks we could not run — a missing probe credential, a throttled check that was not due — are excluded from the denominator rather than counted as either success or failure. We have been collecting since 2026-08-09; we do not backfill, so windows longer than that read “–” instead of showing a number we did not measure.
The authenticated API check runs every 480 minutes rather than every cycle, because each run consumes one document from a free-tier key we minted for this purpose (status-probe@attestwire.com, 100 documents a month). If that key runs out, the check reports QUOTA_EXCEEDED as degraded, not down — it is our measurement budget expiring, not the API failing.
What this page cannot tell you
Every measurement is taken from Cloudflare's network. That is the same network that serves these services, so this page is blind to the class of problem where our origin is fine and the route from your network is not. It is also a sample every 5 minutes: an outage shorter than that can pass unrecorded. And a page that says everything is operational is a claim about 13 specific checks, listed above with their URLs — not a promise about every code path we ship.
Monitoring someone else
We also run vies.attestwire.com, a live monitor of VIES — the European Commission's VAT number validation service — across all 27 member states. Same measurement discipline, applied to a service we do not control. It used to live on this hostname; every one of its old URLs still redirects there.
Building EU invoicing?
Attestwire is an EN 16931 validation API — post an invoice as JSON, get back the rule it breaks and the fix. Free tier, 100 documents a month, no card.