{
  "endpoints": [
    {
      "path": "/api/anatomy",
      "kind": "probe",
      "summary": "The exemplar pull request behind /anatomy.html.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/badge",
      "kind": "probe",
      "summary": "The SVG status badge.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/bug-report",
      "kind": "write",
      "summary": "The web form on /bugs.html.",
      "methods": [
        "POST"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/checkout",
      "kind": "write",
      "summary": "Starts a Stripe checkout session.",
      "methods": [
        "GET",
        "POST"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/confirm",
      "kind": "write",
      "summary": "Confirms a blog subscription from the welcome email.",
      "methods": [
        "GET",
        "POST"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/day",
      "kind": "probe",
      "summary": "One working day of the team, for /day.html.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/discussions",
      "kind": "probe",
      "summary": "The Discussion queue, redacted, for /discussions.html.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/follow",
      "kind": "write",
      "summary": "Follows a queue item for one email when it closes.",
      "methods": [
        "GET",
        "POST"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/follow-notify",
      "kind": "authed",
      "summary": "Cron target that mails followed Discussions that closed. GET is a dry run.",
      "methods": [
        "POST"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/git-metrics",
      "kind": "probe",
      "summary": "Metrics derived from GitHub, served at /metrics.json.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/inbox",
      "kind": "authed",
      "summary": "Reads back everything the intake endpoints collected.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/interview",
      "kind": "probe",
      "summary": "The coldstart interview schema; POST runs the generator.",
      "methods": [
        "GET",
        "POST"
      ],
      "runtime": "python"
    },
    {
      "path": "/api/lifecycle",
      "kind": "probe",
      "summary": "One change from Discussion to merge, for /lifecycle.html.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/order",
      "kind": "write",
      "summary": "Looks up a completed order.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/pull-requests",
      "kind": "probe",
      "summary": "The public pull request browser behind /ship.html.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/questions",
      "kind": "probe",
      "summary": "Recent questions from the public repo's Q&A discussions.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/queue-feed",
      "kind": "probe",
      "summary": "The Discussion queue as RSS, served at /queue.xml.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/report",
      "kind": "probe",
      "summary": "GET returns what it accepts; POST files a report.",
      "methods": [
        "GET",
        "POST"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/send-digest",
      "kind": "authed",
      "summary": "Mails the newest unsent post. GET is a dry run.",
      "methods": [
        "GET",
        "POST"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/ship-feed",
      "kind": "probe",
      "summary": "Merged pull requests as RSS, served at /ship.xml.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/ship-stats",
      "kind": "probe",
      "summary": "Aggregate merge statistics for /ship.html.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/sponsors",
      "kind": "probe",
      "summary": "The public sponsor list.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/status",
      "kind": "probe",
      "summary": "Current activity, for /status.html.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/status-history",
      "kind": "probe",
      "summary": "The recorded activity history.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/status-log",
      "kind": "authed",
      "summary": "Cron target that records an activity snapshot.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/stripe-webhook",
      "kind": "write",
      "summary": "Stripe calls this; it verifies a signature.",
      "methods": [
        "POST"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/subscribe",
      "kind": "write",
      "summary": "Adds an address to the blog list.",
      "methods": [
        "GET",
        "POST"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/telemetry",
      "kind": "probe",
      "summary": "GET returns the schema; POST accepts a report.",
      "methods": [
        "DELETE",
        "GET",
        "POST"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/unlock",
      "kind": "probe",
      "summary": "When the launch gate opens. Reports; does not unlock.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/unsubscribe",
      "kind": "write",
      "summary": "One-click unsubscribe, per RFC 8058.",
      "methods": [
        "GET",
        "POST"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/version",
      "kind": "probe",
      "summary": "The deployed commit, shown in the footer.",
      "methods": [
        "GET"
      ],
      "runtime": "node"
    },
    {
      "path": "/api/waitlist",
      "kind": "write",
      "summary": "Adds an address to the waitlist.",
      "methods": [
        "POST"
      ],
      "runtime": "node"
    }
  ],
  "counts": {
    "total": 32,
    "probe": 19,
    "authed": 4,
    "write": 9
  }
}
