{
  "openapi": "3.1.0",
  "info": {
    "title": "GateVia Product API",
    "version": "0.1.0",
    "description": "Isolated GateVia product preview. Inference is proxied to the M3 gateway; finance is recorded by M2; the console is a Go service with PostgreSQL."
  },
  "servers": [
    { "url": "http://127.0.0.1:18090", "description": "Isolated product preview" }
  ],
  "security": [],
  "paths": {
    "/api/v1/chat/completions": {
      "post": {
        "summary": "OpenAI-compatible chat completion",
        "description": "Requires a workspace inference key. Streaming uses server-sent events.",
        "security": [{ "bearerAuth": [] }],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": ["model", "messages"],
                "properties": {
                  "model": { "type": "string", "example": "seed-model" },
                  "messages": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": ["role", "content"],
                      "properties": {
                        "role": { "type": "string", "enum": ["system", "user", "assistant"] },
                        "content": { "type": "string" }
                      }
                    }
                  },
                  "stream": { "type": "boolean", "default": false }
                }
              }
            }
          }
        },
        "responses": {
          "200": { "description": "Completion or SSE stream" },
          "401": { "$ref": "#/components/responses/Error" },
          "429": { "$ref": "#/components/responses/Error" }
        }
      }
    },
    "/api/v1/models": {
      "get": {
        "summary": "Published model catalog",
        "responses": { "200": { "description": "OpenAI-style model list" } }
      }
    },
    "/api/status": {
      "get": {
        "summary": "Workspace status",
        "security": [{ "sessionCookie": [] }],
        "responses": { "200": { "description": "Balance, usage and routing state" } }
      }
    },
    "/api/keys": {
      "get": {
        "summary": "List workspace inference keys",
        "security": [{ "sessionCookie": [] }],
        "responses": { "200": { "description": "Key metadata without secrets" } }
      },
      "post": {
        "summary": "Create an inference key",
        "security": [{ "sessionCookie": [], "csrfHeader": [] }],
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "type": "object", "required": ["name"], "properties": { "name": { "type": "string" }, "limit_usd": { "type": "number" }, "allowed_models": { "type": "array", "items": { "type": "string" } } } } } }
        },
        "responses": { "201": { "description": "Secret returned exactly once" }, "403": { "$ref": "#/components/responses/Error" } }
      }
    },
    "/api/keys/{key_id}": {
      "delete": {
        "summary": "Revoke an inference key",
        "security": [{ "sessionCookie": [], "csrfHeader": [] }],
        "parameters": [{ "name": "key_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }],
        "responses": { "204": { "description": "Revoked" } }
      }
    },
    "/api/usage/series": {
      "get": {
        "summary": "Daily workspace usage series",
        "security": [{ "sessionCookie": [] }],
        "parameters": [{ "name": "days", "in": "query", "schema": { "type": "integer", "minimum": 1, "maximum": 365 } }],
        "responses": { "200": { "description": "Daily settled usage rows" } }
      }
    },
    "/api/invoices": {
      "get": {
        "summary": "List organization invoices",
        "security": [{ "sessionCookie": [] }],
        "responses": { "200": { "description": "Invoice list" } }
      },
      "post": {
        "summary": "Create a top-up invoice",
        "security": [{ "sessionCookie": [], "csrfHeader": [] }],
        "responses": { "201": { "description": "Invoice created" } }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": { "type": "http", "scheme": "bearer", "description": "gv-ik-… inference key" },
      "sessionCookie": { "type": "apiKey", "in": "cookie", "name": "gv_session" },
      "csrfHeader": { "type": "apiKey", "in": "header", "name": "X-CSRF-Token" }
    },
    "responses": {
      "Error": {
        "description": "Canonical product error",
        "content": { "application/json": { "schema": { "type": "object", "properties": { "error": { "type": "object", "properties": { "code": { "type": "string" }, "message": { "type": "string" }, "request_id": { "type": "string" } } } } } } }
      }
    }
  }
}
