{
  "openapi": "3.0.3",
  "info": {
    "title": "NeuralPulse API",
    "version": "2.0.0",
    "description": "REST endpoints for NeuralPulse. MCP clients typically connect through /mcp using bearer authentication."
  },
  "servers": [
    {
      "url": "/"
    }
  ],
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "Token"
      }
    },
    "schemas": {
      "TokenInfo": {
        "type": "object",
        "properties": {
          "active": { "type": "boolean" },
          "tokenPrefix": { "type": "string" },
          "createdAt": { "type": "string", "format": "date-time" },
          "lastUsedAt": { "type": "string", "format": "date-time", "nullable": true }
        },
        "required": ["active", "tokenPrefix", "createdAt"]
      }
    }
  },
  "paths": {
    "/api/me": {
      "get": {
        "summary": "Get current user",
        "security": [{ "bearerAuth": [] }],
        "responses": {
          "200": {
            "description": "Resolved user",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": { "userId": { "type": "string" } }
                }
              }
            }
          }
        }
      }
    },
    "/api/channels": {
      "get": {
        "summary": "List channels",
        "security": [{ "bearerAuth": [] }],
        "responses": { "200": { "description": "Channels list" } }
      }
    },
    "/api/feed": {
      "get": {
        "summary": "Fetch feed items",
        "security": [{ "bearerAuth": [] }],
        "parameters": [
          { "name": "limit", "in": "query", "schema": { "type": "integer" } },
          { "name": "types", "in": "query", "schema": { "type": "string" } },
          { "name": "tags", "in": "query", "schema": { "type": "string" } },
          { "name": "q", "in": "query", "schema": { "type": "string" } },
          { "name": "since", "in": "query", "schema": { "type": "string", "format": "date-time" } }
        ],
        "responses": { "200": { "description": "Feed items" } }
      }
    },
    "/api/briefing": {
      "get": {
        "summary": "Generate briefing",
        "security": [{ "bearerAuth": [] }],
        "parameters": [
          { "name": "limit", "in": "query", "schema": { "type": "integer" } },
          { "name": "tags", "in": "query", "schema": { "type": "string" } },
          { "name": "since", "in": "query", "schema": { "type": "string", "format": "date-time" } }
        ],
        "responses": { "200": { "description": "Summary response" } }
      }
    },
    "/api/token": {
      "get": {
        "summary": "Get active personal token metadata",
        "security": [{ "bearerAuth": [] }],
        "responses": {
          "200": {
            "description": "Token metadata or null",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "token": {
                      "oneOf": [
                        { "$ref": "#/components/schemas/TokenInfo" },
                        { "type": "null" }
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Generate a new personal token",
        "security": [{ "bearerAuth": [] }],
        "responses": {
          "200": {
            "description": "Token string (returned once)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": { "token": { "type": "string" } },
                  "required": ["token"]
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Revoke active personal token",
        "security": [{ "bearerAuth": [] }],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": { "confirm": { "type": "boolean" } },
                "required": ["confirm"]
              }
            }
          }
        },
        "responses": { "200": { "description": "Revocation status" } }
      }
    },
    "/mcp": {
      "post": {
        "summary": "MCP endpoint",
        "description": "Model Context Protocol endpoint. Use MCP SDK/clients for request and response payload formats.",
        "security": [{ "bearerAuth": [] }],
        "responses": { "200": { "description": "MCP response" } }
      }
    }
  }
}
