{
  "openapi": "3.1.0",
  "info": {
    "title": "AksesApi",
    "version": "1.0.0",
    "description": "Gerbang API: akses web (Stockbit, Gemini, DeepSeek, Dola) menjadi API key."
  },
  "servers": [{ "url": "https://aksesapi.pages.dev" }],
  "components": {
    "securitySchemes": {
      "apiKey": { "type": "apiKey", "in": "header", "name": "X-API-Key" }
    }
  },
  "security": [{ "apiKey": [] }],
  "paths": {
    "/api/v1/ping": {
      "get": { "summary": "Cek hidup", "responses": { "200": { "description": "OK" } } }
    },
    "/api/v1/providers": {
      "get": { "summary": "Daftar provider", "responses": { "200": { "description": "OK" } } }
    },
    "/api/v1/models": {
      "get": {
        "summary": "Daftar model provider",
        "parameters": [{ "name": "provider", "in": "query", "required": true, "schema": { "type": "string", "enum": ["gemini", "deepseek", "dola"] } }],
        "responses": { "200": { "description": "OK" } }
      }
    },
    "/api/v1/chat/completions": {
      "post": {
        "summary": "Chat OpenAI-compatible",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": ["messages"],
                "properties": {
                  "provider": { "type": "string", "enum": ["gemini", "deepseek", "dola"], "default": "gemini" },
                  "model": { "type": "string" },
                  "messages": { "type": "array", "items": { "type": "object" } }
                }
              }
            }
          }
        },
        "responses": { "200": { "description": "OK" } }
      }
    },
    "/api/v1/stockbit/sectors": { "get": { "summary": "Sektor IDX", "responses": { "200": { "description": "OK" } } } },
    "/api/v1/stockbit/info/{code}": {
      "get": {
        "summary": "Info emiten",
        "parameters": [{ "name": "code", "in": "path", "required": true, "schema": { "type": "string" } }],
        "responses": { "200": { "description": "OK" } }
      }
    },
    "/api/v1/stockbit/orderbook/{code}": {
      "get": {
        "summary": "Orderbook",
        "parameters": [{ "name": "code", "in": "path", "required": true, "schema": { "type": "string" } }],
        "responses": { "200": { "description": "OK" } }
      }
    },
    "/api/v1/stockbit/historical/{code}": {
      "get": {
        "summary": "OHLC historis",
        "parameters": [
          { "name": "code", "in": "path", "required": true, "schema": { "type": "string" } },
          { "name": "days", "in": "query", "schema": { "type": "integer", "maximum": 365, "default": 60 } },
          { "name": "limit", "in": "query", "schema": { "type": "integer", "maximum": 50, "default": 50 } },
          { "name": "page", "in": "query", "schema": { "type": "integer", "default": 1 } }
        ],
        "responses": { "200": { "description": "OK" } }
      }
    },
    "/api/v1/stockbit/keystats/{code}": {
      "get": {
        "summary": "Valuasi (PER/PBV/ROE)",
        "parameters": [{ "name": "code", "in": "path", "required": true, "schema": { "type": "string" } }],
        "responses": { "200": { "description": "OK" } }
      }
    },
    "/api/v1/stockbit/broker/{code}": {
      "get": {
        "summary": "Bandarmologi",
        "parameters": [
          { "name": "code", "in": "path", "required": true, "schema": { "type": "string" } },
          { "name": "days", "in": "query", "schema": { "type": "integer", "maximum": 365, "default": 30 } },
          { "name": "limit", "in": "query", "schema": { "type": "integer", "maximum": 25, "default": 25 } }
        ],
        "responses": { "200": { "description": "OK" } }
      }
    }
  }
}
