{
  "openapi": "3.0.3",
  "info": {
    "title": "RSVPete",
    "version": "1.0.0",
    "description": "Public read-only surface for agents. GET /health reports that the API process is up. Device, portal, messaging, and billing routes require a signed-in product session and are not part of this document. Pages for people: https://rsvpete.com/llms.txt"
  },
  "servers": [
    {
      "url": "https://rsvpete.com",
      "description": "Public site. GET /health is proxied to the API."
    },
    {
      "url": "https://api.bellboi.ai",
      "description": "API."
    }
  ],
  "paths": {
    "/health": {
      "get": {
        "operationId": "getHealth",
        "summary": "Service health",
        "responses": {
          "200": {
            "description": "The API process is up.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "ok",
                    "agent"
                  ],
                  "properties": {
                    "ok": {
                      "type": "boolean"
                    },
                    "agent": {
                      "type": "string",
                      "example": "BellBoi"
                    }
                  }
                },
                "example": {
                  "ok": true,
                  "agent": "BellBoi"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "postHealth",
        "summary": "Health does not accept POST",
        "responses": {
          "405": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error",
          "code",
          "message",
          "hint"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "Same sentence as message, for clients that already read error as a string."
          },
          "code": {
            "type": "string",
            "description": "Stable machine-readable code."
          },
          "message": {
            "type": "string",
            "description": "What went wrong."
          },
          "hint": {
            "type": "string",
            "description": "What to do next."
          }
        }
      }
    },
    "responses": {
      "Error": {
        "description": "The request failed. Unmatched paths use this same shape with code not_found.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": "Health only accepts GET.",
              "code": "method_not_allowed",
              "message": "Health only accepts GET.",
              "hint": "Retry with GET https://rsvpete.com/health. The public API is described at https://rsvpete.com/openapi.json."
            }
          }
        }
      }
    }
  }
}
