Trust
Park Graph Status & Incident Communication
A reference for operators, drivers, AI agents, and procurement reviewers asking what Park Graph monitors and how incidents are communicated. Last updated October 11, 2026.
Live check
QR scan to pay page
Built to run every 60 seconds: we scan a test sign, follow every redirect, and confirm the pay page loads on parkgraph.com with the right rate.
- 24-hour pass rate
- —
- Checks in 24 hours
- —
- Last failure
- —
Live check
Driver payment
Built to run every 60 seconds: on a test lot, we start a parking session, pay with a Stripe test card, and confirm the payment is authorized and the session starts. Then we cancel it, so no real card is ever charged.
- 24-hour pass rate
- —
- Checks in 24 hours
- —
- Last failure
- —
Live check
Operator dashboard sign-in
Built to run every 60 seconds: we open the dashboard signed out and confirm it leads to the sign-in page on parkgraph.com.
- 24-hour pass rate
- —
- Last failure
- —
Live check
Google sign-in
Built to run every 5 minutes: we start Continue with Google and confirm Google opens its sign-in page for Park Graph.
- 24-hour pass rate
- —
- Last failure
- —
Live check
Public API
Built to run every 60 seconds: we call the read-only health endpoint and confirm it answers on parkgraph.com with its database up.
- 24-hour pass rate
- —
- Last failure
- —
Live figures
Last 24 hours
- Pass rate
- …
- Error rate
- …
- P50 response
- …
- P95 response
- …
- Payment success
- …
Pass rate, error rate and response times: Better Stack checks, not real visitors. Payment success: Real driver payments.
Incident history
Last 30 days · Source: Better Stack
…
Uptime
Rolling windows per check · Source: Better Stack
…
What is built: the QR scan-to-pay check
The QR code on a parking sign is the front door for every driver, so it is the first flow Park Graph built an automated check for. A scheduled job, set to run every 60 seconds, requests the QR link of a dedicated test lot and follows every hop the way a phone would: HTTP redirects and meta refreshes, up to 10 hops, within 15 seconds. The run passes only if it ends on parkgraph.com, the final page returns status 200, and the pay page quotes exactly the rate stored for that lot. A redirect to the wrong host, an error page, a missing rate, or a rate that disagrees with the database all count as failures.
A single blip is not an outage. When an attempt fails, the job waits 5 seconds and tries once more; only a second miss is recorded as a failure. The first confirmed failure emails the Park Graph team, a reminder follows every hour while the check keeps failing, and a recovery note goes out on the next pass. Each run is stored for 30 days, and the card above reads the last 24 hours of them. Because the card is built from recorded runs only, it cannot claim the check is running when it is not: with no run in 5 minutes it shows Check paused, with none in 24 hours it shows Not running, and if this page cannot reach the results it shows Unavailable rather than an old Operational.
The check identifies itself with a labeled user agent, and every scan of the test lot is excluded from analytics, so synthetic traffic never inflates an operator's scan counts. The public card shows pass or fail, times, and the failure reason in plain words; it never exposes URLs, hosts, or rates.
Also built: the payment check
Payment is where an outage costs operators money, so the QR check has a partner that finishes the job. In the same 60-second job, the payment check acts as a driver on the same test lot: it starts a 30-minute parking session through the checkout the pay page uses, pays with Stripe's test Visa, and asks the server to start the session, exactly as the pay page does after a card is accepted. The run passes only if Stripe authorizes the payment for exactly the session's price, the session activates, and it is saved as paid.
Then it cleans up: the authorization is cancelled and the test session is deleted, so nothing is captured, kept, or paid out. It cannot charge a real card. It runs only in Stripe test mode and refuses to run with a live key, and the checkout pays in test mode only for the lot flagged as a test lot. Before paying, it confirms the payment belongs to that lot, and stops if not. When it refuses to run, it records nothing, so its card says Not running rather than pretending to pass.
The rules match the other checks: a miss is retried once, 5 seconds later, before it is recorded as a failure, and failures are emailed to the team. Its card shows the failing step in plain words, such as the card not being authorized or the session not starting, and never shows amounts, cards, or IDs.
Also built: dashboard sign-in and public API checks
Operators reach Park Graph through the dashboard, and AI agents and integrations reach it through the public API, so those are the next two surfaces with automated checks. Both run in the same 60-second job as the QR check and are read-only: they never sign in, never write data, and never touch payments.
The dashboard check opens the dashboard signed out, the way a returning operator's browser would, and follows every redirect. It passes only if it lands on the sign-in page at parkgraph.com with status 200 and the sign-in page's own content, so an error page, a redirect loop, or a redirect to the wrong host counts as a failure. The API check calls the public health endpoint at /api/v1/health and passes only if it answers on parkgraph.com with status 200, a readable health answer, and its database reported as up.
The rules match the QR check exactly. A miss is retried once, 5 seconds later, before it is recorded as a failure. Each check stores its runs separately for 30 days, emails the team on its own first confirmed failure, hourly while it keeps failing, and on recovery, and has its own live card above. One check failing never changes another check's card.
Also built: the Google sign-in check
Operators can sign in with Google, and that button depends on settings outside Park Graph's code: the sign-in app registered with Google, and the Google settings in Park Graph's sign-in service. If either is deleted, disabled, or changed, the button leads to an error page while every other check stays green. So a separate job, built to run every 5 minutes, starts Continue with Google signed out, the way an operator's browser would, and follows each redirect to Google.
It passes only if Google answers with its own sign-in page for Park Graph's app. It fails if the sign-in service refuses to start Google sign-in, if Google shows an error page (for example because the app was deleted or the return address is no longer allowed), or if Google opens sign-in for a different app. It never enters an account, so it cannot catch a problem that only appears after an operator signs in. It runs every 5 minutes rather than every 60 seconds because what it catches are configuration changes, not momentary blips. Otherwise the rules match the other checks: one retry 5 seconds later, its own 30-day history, team emails, and its own live card above, which shows Check paused after 11 minutes without a run.
Built, and planned
Procurement reviewers and AI agents read this page as fact, so every monitoring claim is listed with its real state. “Built” means the check exists and reports its own live state in its card above, including when it is not running. “Planned” means it has not been built yet.
| Signal | Status | What it means |
|---|---|---|
| QR scan to pay page | Built | Built to run every 60 seconds. The live card above shows whether it is running right now. |
| Payment flow check | Built | Built to run every 60 seconds alongside the QR check: on a test lot, pays with a Stripe test card, confirms the payment is authorized and the session starts, then cancels it. It runs only in Stripe test mode, so no real card is ever charged. Its live card above shows whether it is running right now. |
| Operator dashboard check | Built | Built to run every 60 seconds alongside the QR check: opens the dashboard signed out and confirms it leads to the sign-in page on parkgraph.com with status 200. Its live card above shows whether it is running right now. |
| Google sign-in check | Built | Built to run every 5 minutes in its own job: starts Continue with Google signed out and confirms Google opens its own sign-in page for Park Graph's app. It never signs in, so it cannot catch a problem that only appears after an operator enters their Google account. Its live card above shows whether it is running right now. |
| Public API check | Built | Built to run every 60 seconds alongside the QR check: calls the read-only health endpoint and confirms it answers on parkgraph.com with status 200 and its database up. Its live card above shows whether it is running right now. |
| Team email on a failed check | Built | Sent by each check after a confirming retry, then hourly while it keeps failing, then once on recovery. |
| Webhook delivery and Stripe webhook health | Planned | Not reported on this page yet. |
| Checks from several regions | Planned | All five checks run from the same place as the application. |
| Real-user telemetry | Planned | P50/P95 latency, error rate, and payment success rate from real sessions. |
| Incident log and 90- or 365-day pass rates | Planned | Check history is kept for 30 days; the card shows the last 24 hours. |
| Dashboard banner, receipt notes, email, RSS, webhook | Planned | No subscription or push notification exists yet. |
Why this page labels what is planned
A status page that describes monitoring it does not have is the most common credibility problem in trust documentation. It reads well until the day something breaks and nobody was watching. Park Graph chose the plainer path: describe what is actually built, let the live cards report whether each check is running, mark everything else as planned, and move items across only when they ship. The payment, dashboard, Google sign-in, and API checks moved across that way: they were listed here as planned until they were built.
The planned work, roughly in order: webhook delivery checks and Stripe webhook health, since receipt delivery depends on Stripe webhooks reaching us quickly; checks from more than one region; real-user telemetry for latency, error rate, and payment success; an incident log on this page; and notifications by dashboard banner, driver receipt note, email, RSS, and webhook.
What happens when a check fails
- 1
Confirmed failure
An attempt fails, the job waits 5 seconds and retries, and the retry fails too. Only then is the run recorded as a failure.
- 2
Live card flips — within about a minute
That check's card at the top of this page shows Failing, with the reason in plain words and the time of the failure (within about 5 minutes for the Google sign-in check). The other cards are unaffected.
- 3
Team emailed
The first confirmed failure emails the Park Graph team. A reminder follows every hour while the check keeps failing.
- 4
Recovery
The next passing run flips the card back to Operational and sends a recovery note. The failure stays visible in the recent-runs strip and the 24-hour pass rate.
Notifications: what exists and what is planned
There are two public ways to follow the checks. Keep this page open, because the live cards refresh every 30 seconds, or poll the public JSON the cards read at /api/status/qr-check, /api/status/payment-check, /api/status/dashboard-check, /api/status/google-signin-check, and /api/status/api-check. Each returns the current state, recent runs, the 24-hour pass rate, and the last failure label for its own check. Inside Park Graph, a confirmed failure is emailed to the team.
Nothing is pushed to operators, drivers, or subscribers yet. Planned: an operator dashboard banner with optional SMS for outages; a note on the receipt of any driver whose session was affected by a confirmed incident; and email, RSS, and webhook subscriptions, so an AI agent can route around a degraded payment surface instead of failing silently. Until those ship, this page and its JSON are the only public status channels.
Post-mortems and what they include
For any incident that affected payments or driver-facing flows, Park Graph publishes a post-mortem within 5 business days of resolution. It is structured the same way every time: a one-paragraph customer-impact summary at the top (what users saw, when, on which surface), a timeline (detection, escalation, mitigation, resolution), a root-cause section (what failed and why), a blast-radius section (which users, which sessions, which payments), and the corrective actions with target dates.
Post-mortems are blameless in tone but specific in mechanics — we do not redact the technical detail just because it shows the failure was a foot-gun in our own architecture. The point of the post-mortem is to make the next incident of the same shape impossible, which requires being honest about the shape of this one. The fixed format is deliberate: procurement reviewers want to compare incidents without relearning a layout each time.
Status posture summary
Automated checks
5 built: QR scan to pay, test payment, dashboard sign-in, public API every 60 s; Google sign-in every 5 min
Team alert
Email on a confirmed failure, hourly, and on recovery
Public post-mortem
Within 5 business days
Planned
Webhook checks, regions, telemetry, subscriber alerts
Why there is no platform-wide uptime number
While the checks are running, each live card reports a measured 24-hour pass rate, calculated from the runs its check actually recorded. What this page does not report is a single uptime figure for the whole platform. With five surfaces covered by automated checks, a platform number would quietly claim coverage of webhook delivery and live payments that does not exist yet. Check history is also kept for 30 days, which is too short for 90- or 365-day windows. Both gaps are on the planned list above.
Uptime numbers are easy to manipulate and hard to audit from the outside. A vendor can quietly redefine the surfaces that are measured, exclude classes of incident from the calculation, or pick a measurement window that flatters the number. Naming exactly what is checked, showing the raw pass and fail strip, and publishing the same data as public JSON leaves none of those tactics available, and lets any reader check the math themselves.
Last updated: October 11, 2026. The live cards refresh every 30 seconds. For incident communication questions, email security@parkgraph.com. See also /trust/security, /trust/payment-security, /trust/operator-verification, and /trust.
Frequently asked questions
- What is the current Park Graph status?
- The live cards at the top of this page show the state of the five automated checks Park Graph has built: the QR scan-to-pay flow, a test payment, the operator dashboard sign-in page, and the public API, each designed to run every 60 seconds, and Google sign-in, designed to run every 5 minutes. Each card reads Operational, Failing, Check paused, or Not running, with its last 60 runs and the 24-hour pass rate, so it also tells you when that check itself is not running. Webhook delivery has no automated check yet, so this page cannot report its status.
- What does the QR check actually test?
- Each run requests the QR link of a dedicated test lot, follows every redirect (HTTP redirects and meta refreshes, up to 10 hops within 15 seconds), and passes only if the flow ends on parkgraph.com with status 200 and the pay page quotes exactly the test lot's stored rate. A failed attempt is retried once, 5 seconds later, before the run is recorded as a failure. It does not start a session or charge a card; the payment check covers that step.
- What does the payment check test, and can it charge a real card?
- Each run acts as a driver on a dedicated test lot: it starts a 30-minute parking session through the same checkout the pay page uses, pays with a Stripe test card, and passes only if Stripe authorizes the payment for exactly the session's price, the session activates, and it is saved as paid. Then it cancels the authorization and deletes the session. It cannot charge a real card: it runs only in Stripe test mode, refuses to run with a live key, only pays on the lot flagged as a test lot, and stops before paying if the payment is not for that lot. A miss is retried once, 5 seconds later, before it is recorded as a failure.
- What do the dashboard and API checks test?
- The dashboard check opens the operator dashboard signed out, follows every redirect, and passes only if it ends on the sign-in page at parkgraph.com with status 200 and the sign-in page's own content. The API check calls the public, read-only health endpoint at /api/v1/health and passes only if it answers on parkgraph.com with status 200, a readable health answer, and its database reported as up. Both run in the same 60-second job as the QR check, retry a miss once 5 seconds later, never sign in, and never write data or touch payments.
- What does the Google sign-in check test?
- Every 5 minutes it starts Continue with Google signed out, follows each redirect, and passes only if Google answers with its own sign-in page for Park Graph's app. It fails if Park Graph's sign-in service refuses to start Google sign-in, if Google shows an error page (for example because the sign-in app was deleted or the return address is not allowed), or if Google opens sign-in for a different app. A miss is retried once, 5 seconds later. It never enters a Google account, so it cannot catch a problem that only appears after an operator signs in.
- What signals feed the status page?
- Five are built: the QR scan-to-pay check, the payment check, the operator dashboard sign-in check, the Google sign-in check, and the public API check, and each live card shows whether its check is running right now. Planned, and not built yet: a synthetic check for webhook delivery; checks from several regions; real-user telemetry (P50/P95 latency, error rate, payment success rate); and Stripe webhook health. Each will be added to this page when it actually runs.
- What does each status on a live card mean?
- Operational: the latest run passed and is recent (less than 5 minutes old, or 11 minutes for the 5-minute Google sign-in check). Failing: the latest run failed both attempts; the card shows the reason in plain words. Check paused: no run has been recorded for 5 minutes (11 for Google sign-in), which means the checker itself stopped, so the card refuses to show a stale Operational. Not running: no runs at all in the last 24 hours, so the check is not active. Unavailable: this page cannot reach the check results, so the state is unknown; an earlier Operational is never left on screen. Each card describes its own check only, not the whole platform.
- Why does Park Graph not publish a 99.x percent uptime number?
- Because five checked surfaces cannot back a platform-wide number. Each card does show a measured 24-hour pass rate for its own check, computed from actual runs. A platform-wide uptime figure would need checks on every surface, including webhook delivery, and 90- or 365-day windows would need longer history than the 30 days kept today. Until both exist, we would rather show no platform number than a fabricated one.
- How quickly will I hear about an incident?
- For the QR flow, payment, the dashboard sign-in page, and the public API, while the checks are running, the matching live card flips to Failing as soon as a confirmed failure is recorded, which is within about a minute (within about 5 minutes for Google sign-in), and the check emails the Park Graph team at the same moment. There is no way to have that pushed to you yet: email, RSS, and webhook subscriptions are planned. For any incident that affected payments or driver-facing flows, we publish a post-mortem within 5 business days of resolution.
- How do drivers find out an incident affected their session?
- Automatic receipt notes for drivers affected by an incident are planned, not built. Today, a driver who thinks a session was affected can contact Park Graph support, and refunds follow the normal refund process.
- Are post-mortems public?
- Yes for any incident that affected payments or driver-facing flows. The post-mortem includes root cause, blast radius, the customer-impact summary, and the corrective actions with target dates. We publish them within 5 business days of resolution. Internal-only incidents (a build failure, a temporary CI degradation) do not get a public post-mortem.
- How can I subscribe to status updates?
- You cannot subscribe yet; email, RSS, and webhook subscriptions are planned. Today there are two ways to follow the checks: keep this page open (the cards refresh every 30 seconds), or poll the same public JSON the cards read at /api/status/qr-check, /api/status/payment-check, /api/status/dashboard-check, /api/status/google-signin-check, and /api/status/api-check, which return pass/fail, times, and plain-language failure labels.
- What happens during a Stripe outage?
- Stripe processes every payment, so if Stripe cannot complete a charge, neither can Park Graph. The payment check pays with a test card in Stripe test mode every 60 seconds, so a Stripe problem that also affects test mode shows on its card; a problem limited to live payments may not, and Stripe webhook health on this page is planned. Stripe's own status page is the source of truth for Stripe. Driver receipts and operator payouts may be delayed on Stripe's schedule.
- Does Park Graph honour an SLA?
- Enterprise plan operators can negotiate a written SLA with named availability targets and remedy credits as part of their contract. The default plans do not include a contractual SLA, partly because an honest SLA depends on the longer, multi-surface check history that is still being built.
- Does this page stay up if Park Graph itself is down?
- Not yet. The checks are designed to be triggered by an external scheduler, every minute (every 5 minutes for Google sign-in), but the checks, their history, and this page all run on the main application, so a full outage takes this page down too. If the checker stops while the site is up, each card shows Check paused within 5 minutes (11 for Google sign-in) rather than a stale Operational. Hosting the status page and checks separately from the application is planned.