The endpoints
Every page here is backed by something you can call yourself. This is the whole list, generated from the handlers rather than written alongside them — a reference maintained by hand drifts from the directory it describes, and this site had 27 endpoints that nothing listed at all until recently.
The classification is the part a machine cannot infer, so it is declared and checked. Open means a GET with no side effects — safe to call, and called every time the live check runs. Authenticated means it refuses without a secret, and the check asserts that it does; a 200 there would mean a key stopped being required. Writes means it changes something or costs somebody money, and nothing automated ever calls it.
Open 19
A GET with no side effects. Called by the live check every time it runs.
| Endpoint | Methods | What it is |
|---|---|---|
/api/anatomy | GET | The exemplar pull request behind /anatomy.html. |
/api/badge | GET | The SVG status badge. |
/api/day | GET | One working day of the team, for /day.html. |
/api/discussions | GET | The Discussion queue, redacted, for /discussions.html. |
/api/git-metrics | GET | Metrics derived from GitHub, served at /metrics.json. |
/api/interview | GET POST | The coldstart interview schema; POST runs the generator. |
/api/lifecycle | GET | One change from Discussion to merge, for /lifecycle.html. |
/api/pull-requests | GET | The public pull request browser behind /ship.html. |
/api/questions | GET | Recent questions from the public repo's Q&A discussions. |
/api/queue-feed | GET | The Discussion queue as RSS, served at /queue.xml. |
/api/report | GET POST | GET returns what it accepts; POST files a report. |
/api/ship-feed | GET | Merged pull requests as RSS, served at /ship.xml. |
/api/ship-stats | GET | Aggregate merge statistics for /ship.html. |
/api/sponsors | GET | The public sponsor list. |
/api/status | GET | Current activity, for /status.html. |
/api/status-history | GET | The recorded activity history. |
/api/telemetry | DELETE GET POST | GET returns the schema; POST accepts a report. |
/api/unlock | GET | When the launch gate opens. Reports; does not unlock. |
/api/version | GET | The deployed commit, shown in the footer. |
Authenticated 4
Refuses without a secret. The live check asserts the refusal.
| Endpoint | Methods | What it is |
|---|---|---|
/api/follow-notify | POST | Cron target that mails followed Discussions that closed. GET is a dry run. |
/api/inbox | GET | Reads back everything the intake endpoints collected. |
/api/send-digest | GET POST | Mails the newest unsent post. GET is a dry run. |
/api/status-log | GET | Cron target that records an activity snapshot. |
Writes 9
Changes state or costs money. Nothing automated calls these.
| Endpoint | Methods | What it is |
|---|---|---|
/api/bug-report | POST | The web form on /bugs.html. |
/api/checkout | GET POST | Starts a Stripe checkout session. |
/api/confirm | GET POST | Confirms a blog subscription from the welcome email. |
/api/follow | GET POST | Follows a queue item for one email when it closes. |
/api/order | GET | Looks up a completed order. |
/api/stripe-webhook | POST | Stripe calls this; it verifies a signature. |
/api/subscribe | GET POST | Adds an address to the blog list. |
/api/unsubscribe | GET POST | One-click unsubscribe, per RFC 8058. |
/api/waitlist | POST | Adds an address to the waitlist. |
Where to start
/api/telemetry and /api/report both answer a
GET with exactly what they accept, so you can read the contract before
sending anything. The telemetry page sets
out what an install would report, field by field.
Check the work explains which numbers on this
site are facts and which are readings.
This page is generated by tools/build-endpoints.py
from the handler files in formal-support/api/. Nothing on it is written by hand.