// Everything this site serves

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.

EndpointMethodsWhat it is
/api/anatomyGETThe exemplar pull request behind /anatomy.html.
/api/badgeGETThe SVG status badge.
/api/dayGETOne working day of the team, for /day.html.
/api/discussionsGETThe Discussion queue, redacted, for /discussions.html.
/api/git-metricsGETMetrics derived from GitHub, served at /metrics.json.
/api/interviewGET POSTThe coldstart interview schema; POST runs the generator.
/api/lifecycleGETOne change from Discussion to merge, for /lifecycle.html.
/api/pull-requestsGETThe public pull request browser behind /ship.html.
/api/questionsGETRecent questions from the public repo's Q&A discussions.
/api/queue-feedGETThe Discussion queue as RSS, served at /queue.xml.
/api/reportGET POSTGET returns what it accepts; POST files a report.
/api/ship-feedGETMerged pull requests as RSS, served at /ship.xml.
/api/ship-statsGETAggregate merge statistics for /ship.html.
/api/sponsorsGETThe public sponsor list.
/api/statusGETCurrent activity, for /status.html.
/api/status-historyGETThe recorded activity history.
/api/telemetryDELETE GET POSTGET returns the schema; POST accepts a report.
/api/unlockGETWhen the launch gate opens. Reports; does not unlock.
/api/versionGETThe deployed commit, shown in the footer.

Authenticated 4

Refuses without a secret. The live check asserts the refusal.

EndpointMethodsWhat it is
/api/follow-notifyPOSTCron target that mails followed Discussions that closed. GET is a dry run.
/api/inboxGETReads back everything the intake endpoints collected.
/api/send-digestGET POSTMails the newest unsent post. GET is a dry run.
/api/status-logGETCron target that records an activity snapshot.

Writes 9

Changes state or costs money. Nothing automated calls these.

EndpointMethodsWhat it is
/api/bug-reportPOSTThe web form on /bugs.html.
/api/checkoutGET POSTStarts a Stripe checkout session.
/api/confirmGET POSTConfirms a blog subscription from the welcome email.
/api/followGET POSTFollows a queue item for one email when it closes.
/api/orderGETLooks up a completed order.
/api/stripe-webhookPOSTStripe calls this; it verifies a signature.
/api/subscribeGET POSTAdds an address to the blog list.
/api/unsubscribeGET POSTOne-click unsubscribe, per RFC 8058.
/api/waitlistPOSTAdds 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.