{
  "openapi": "3.1.0",
  "info": {
    "title": "DABYTE AI Visibility Index — open data API",
    "version": "1.0.0",
    "summary": "Keyless, read-only JSON and CSV access to the DABYTE AI Visibility Index.",
    "description": "Static, pre-built files served from disk. No authentication, no API key, no rate-limit sign-up, no payment. All responses are CC BY 4.0; cite dabyte.ai when reusing numbers. The measurement is refreshed weekly; the frozen prompt panel and scoring rules are described at /methodology/, and /api/measurement-status.json says whether the current release is on schedule.",
    "license": {
      "name": "CC BY 4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/"
    },
    "contact": {
      "name": "VECTORY",
      "url": "https://vectory.space",
      "email": "creanlabs@gmail.com"
    }
  },
  "servers": [
    {
      "url": "https://dabyte.ai",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "Methodology",
    "url": "https://dabyte.ai/methodology/"
  },
  "paths": {
    "/api/aiv.json": {
      "get": {
        "operationId": "getVisibilityIndex",
        "summary": "Full current index: every tracked brand with rank, overall and per-engine share of answer.",
        "responses": {
          "200": {
            "description": "Full current index: every tracked brand with rank, overall and per-engine share of answer.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/history.json": {
      "get": {
        "operationId": "getHistory",
        "summary": "Full weekly time series, with the panel version each measurement was made under.",
        "responses": {
          "200": {
            "description": "Full weekly time series, with the panel version each measurement was made under.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/brands.json": {
      "get": {
        "operationId": "listTrackedBrands",
        "summary": "The tracked brands and their slugs. This is the authoritative slug list.",
        "responses": {
          "200": {
            "description": "The tracked brands and their slugs. This is the authoritative slug list.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/brands/{slug}.json": {
      "get": {
        "operationId": "getBrandVisibility",
        "summary": "One brand's visibility: per-engine share of answer, rank, quadrant, and how many panel prompts name it.",
        "responses": {
          "200": {
            "description": "One brand's visibility: per-engine share of answer, rank, quadrant, and how many panel prompts name it.",
            "content": {
              "application/json": {}
            }
          },
          "404": {
            "description": "No such slug in the current index.",
            "content": {
              "text/html": {}
            }
          }
        },
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "A slug from /api/brands.json. The set changes between releases; read it, do not hardcode it.",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/api/methodology.json": {
      "get": {
        "operationId": "getMethodology",
        "summary": "Prompt panel, engines, scoring rules, editorial firewall and ownership disclosure.",
        "responses": {
          "200": {
            "description": "Prompt panel, engines, scoring rules, editorial firewall and ownership disclosure.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/api/measurement-status.json": {
      "get": {
        "operationId": "getMeasurementStatus",
        "summary": "Whether the weekly measurement is on schedule or paused, and why. A paused index keeps its last complete release rather than publishing a partial one.",
        "responses": {
          "200": {
            "description": "Whether the weekly measurement is on schedule or paused, and why. A paused index keeps its last complete release rather than publishing a partial one.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/aiv.csv": {
      "get": {
        "operationId": "getIndexCsv",
        "summary": "Current ranking as CSV.",
        "responses": {
          "200": {
            "description": "Current ranking as CSV.",
            "content": {
              "text/csv": {}
            }
          }
        }
      }
    },
    "/index.md": {
      "get": {
        "operationId": "getIndexMarkdown",
        "summary": "Index page as token-efficient markdown.",
        "responses": {
          "200": {
            "description": "Index page as token-efficient markdown.",
            "content": {
              "text/markdown": {}
            }
          }
        }
      }
    }
  }
}