Skip to main content

statusdoc: Open Status Document

CI

A specification and a Python tool to find, read and validate the status pages of the services you depend on, starting from nothing but their domain.

statusdoc check: GitHub, Anthropic, Stripe, Slack and Vercel operational; Cloudflare with a partial outage and its incidents

  • Specification: SPEC.md, Open Status Document (OSD) 0.1, draft.
  • Compatible with what is deployed: OSD specifies the summary.json shape that Atlassian Statuspage made common and other providers mirror, so thousands of status pages already serve conforming documents.
  • Adds discovery: https://{domain}/.well-known/status tells programs where a service's status document lives.
  • Zero dependencies, Python 3.10+.

Why

Status pages are for people. Programs need the same information: a CI pipeline that should hold a deploy while the cloud provider has an outage, a dashboard of upstream dependencies, a support bot that explains an error. Today that means knowing that GitHub's status lives on githubstatus.com and Stripe's on stripestatus.com, and writing a parser for every format. Commercial aggregators maintain thousands of such scrapers.

OSD turns the de facto format into a written spec, and lets each service announce its document on its own domain.

Install

pip install git+https://github.com/AndreaAcanfora/statusdoc

Command line

statusdoc check github.com npmjs.com             # exit 1 if any is degraded
statusdoc check --fail-on major vercel.com       # only major and critical fail
statusdoc check --json -v github.com             # machine-readable, with components
statusdoc discover fly.io                        # where is the status document?
statusdoc validate status.example.com            # is it conforming?
statusdoc convert status.betterstack.com         # any supported format → OSD JSON

Targets are domains (github.com), status page URLs or document URLs. Exit codes of check: 0 all fine, 1 at least one service at or above --fail-on (default minor), 3 a service could not be reached.

GitHub Action: hold a deploy during an upstream outage

- uses: AndreaAcanfora/statusdoc@v0
  with:
    services: github.com npmjs.com vercel.com
    fail-on: major          # minor, major, critical or never

The step fails when a service is at or above fail-on, adds a table to the job summary and annotations to the run, and sets the outputs worst-level, degraded, unreachable and report (JSON) for later steps. A status page that cannot be read only produces a warning, unless fail-on-unreachable: true. It runs on Linux, macOS and Windows runners with any Python 3.10+, and installs nothing.

Or from any CI:

pip install git+https://github.com/AndreaAcanfora/statusdoc
statusdoc check --fail-on major github.com npmjs.com vercel.com

How documents are found

  1. https://{domain}/.well-known/status, the discovery URI defined by OSD.
  2. A list of known services bundled with the tool (60 services, each verified by hand), checked weekly by CI.
  3. Conventions: status.{domain}, {name}status.com, www.{name}status.com, at /api/v2/summary.json (Statuspage shape) or /index.json (Better Stack).

Better Stack pages and the Slack Status API are converted to OSD on the fly. Other formats can be added as adapters.

Library

from statusdoc import discover, validate_document

found = discover("github.com")
doc = found.document
print(doc.name, doc.level)  # GitHub operational
for incident in doc.open_incidents:
    print(incident.name, incident.impact, incident.shortlink)
for c in doc.components:
    if c.status != "operational":
        print(c.name, c.status)

issues = validate_document(found.response.json())

doc.level is one of operational, maintenance, minor, major, critical: the publisher's indicator, raised by open incidents and active maintenance.

Publishing a conforming status page

If your status page runs on Statuspage or a compatible provider, it most likely conforms already. Two small additions complete it:

  1. Announce it on your own domain. Serve this at https://example.com/.well-known/status, with Content-Type: application/json and Access-Control-Allow-Origin: *:

    {
      "osd_version": "0.1",
      "document": "https://status.example.com/api/v2/summary.json",
      "page": "https://status.example.com"
    }
    

    With nginx:

    location = /.well-known/status {
        default_type application/json;
        add_header Access-Control-Allow-Origin *;
        return 200 '{"osd_version":"0.1","document":"https://status.example.com/api/v2/summary.json","page":"https://status.example.com"}';
    }
    
  2. Run the validator: statusdoc validate example.com.

If you build your own status page, Document.to_dict() produces a conforming document, and SPEC.md lists every field.

Status

The spec is a 0.1 draft. The most useful contributions right now are feedback on the spec, new verified entries for the service list and adapters for other status page providers.

  • Atlassian Statuspage's public API, whose summary.json shape OSD specifies.
  • The expired IETF draft Service Status Resource Format for Web Services, which proposed a new format instead.
  • Aggregators such as StatusGator (commercial) and Statusphere (open source), which scrape status pages with one parser per provider.

License

MIT

Metadata

Release files for statusdoc 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for statusdoc 0.1.0
File Size Uploaded Provenance Actions
statusdoc-0.1.0.tar.gz 27.7 kB With provenance Details for statusdoc-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for statusdoc 0.1.0
File Interpreter ABI Platform Actions
statusdoc-0.1.0-py3-none-any.whl Python 3 none any Details for statusdoc-0.1.0-py3-none-any.whl

Total release size: 49.7 kB

Release files / statusdoc-0.1.0.tar.gz

Download URL statusdoc-0.1.0.tar.gz
Size 27.7 kB
Tags Source
SHA-256 checksum
How to use checksums
d4557e8ee1a33e9948b09d9ce50915353e227c961434d767539e9d886fb98717
BLAKE2b-256 checksum
How to use checksums
dcabe7b60caf8d6706debd3492a71ea6b251d209c7b0198cb74855c24e18c658
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.

Transparency log

Release files / statusdoc-0.1.0-py3-none-any.whl

Download URL statusdoc-0.1.0-py3-none-any.whl
Size 22.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
962fa7db10328b3a01edeb66a8f7693ae6b0c24bc97d1504805d7e7da2707b79
BLAKE2b-256 checksum
How to use checksums
cb20472447b2b6c805dc21eeaff9a7423a77030cb2736a89c3817513ffa88cdb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.

Transparency log

Security for statusdoc 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for statusdoc-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page