{
  "openapi": "3.1.0",
  "info": {
    "title": "AI Bottleneck Map API",
    "version": "1.0.0",
    "description": "The AI boom isn’t just chips — it’s the bottlenecks. Six physical constraints on AI infrastructure: compute, memory, optics, power, space, and servers.\n\nFree, no API key, CORS open. Fair use: about 120 requests per minute per IP. Also available as MCP tools at https://free-agent-tools.vercel.app/mcp"
  },
  "servers": [
    {
      "url": "https://ai-bottleneck-map.vercel.app"
    }
  ],
  "paths": {
    "/api/bottlenecks": {
      "get": {
        "operationId": "aiInfrastructureBottlenecks",
        "summary": "Explain the physical bottlenecks of the AI buildout (compute, memory/HBM, optics, power, space, servers)",
        "description": "Without a slug, returns all six bottlenecks with a one-liner, why it constrains AI infrastructure, and example public companies often cited in that discussion. With slug, returns one. Educational context, not investment advice.\n\nExample: https://ai-bottleneck-map.vercel.app/api/bottlenecks?slug=power",
        "parameters": [
          {
            "name": "slug",
            "in": "query",
            "required": false,
            "description": "Optional: one bottleneck to return.",
            "schema": {
              "type": "string",
              "description": "Optional: one bottleneck to return.",
              "enum": [
                "compute",
                "memory",
                "optics",
                "power",
                "space",
                "servers"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result as JSON. Always includes a `disclaimer` field.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid input. The body explains what to send and gives an example."
          },
          "429": {
            "description": "Too many requests from one IP. Retry after the Retry-After seconds."
          }
        }
      },
      "post": {
        "operationId": "aiInfrastructureBottlenecksPost",
        "summary": "Explain the physical bottlenecks of the AI buildout (compute, memory/HBM, optics, power, space, servers) (JSON body)",
        "description": "Without a slug, returns all six bottlenecks with a one-liner, why it constrains AI infrastructure, and example public companies often cited in that discussion. With slug, returns one. Educational context, not investment advice.",
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [],
                "properties": {
                  "slug": {
                    "type": "string",
                    "description": "Optional: one bottleneck to return.",
                    "enum": [
                      "compute",
                      "memory",
                      "optics",
                      "power",
                      "space",
                      "servers"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result as JSON. Always includes a `disclaimer` field.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid input. The body explains what to send and gives an example."
          },
          "429": {
            "description": "Too many requests from one IP. Retry after the Retry-After seconds."
          }
        }
      }
    },
    "/api/quiz": {
      "get": {
        "operationId": "aiBottleneckQuiz",
        "summary": "Score the 'which AI bottleneck is your stack most constrained by' quiz",
        "description": "Without answers, returns the five quiz questions and their options (each option maps to a slug). With answers (one slug per question), returns the bottleneck picked most often. Slugs: compute, memory, optics, power, space, servers.\n\nExample: https://ai-bottleneck-map.vercel.app/api/quiz?answers=power,power,memory,optics,power",
        "parameters": [
          {
            "name": "answers",
            "in": "query",
            "required": false,
            "description": "Comma-separated slugs, one per question, e.g. power,power,memory,optics,power. POST may send an array.",
            "schema": {
              "type": "string",
              "description": "Comma-separated slugs, one per question, e.g. power,power,memory,optics,power. POST may send an array."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result as JSON. Always includes a `disclaimer` field.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid input. The body explains what to send and gives an example."
          },
          "429": {
            "description": "Too many requests from one IP. Retry after the Retry-After seconds."
          }
        }
      },
      "post": {
        "operationId": "aiBottleneckQuizPost",
        "summary": "Score the 'which AI bottleneck is your stack most constrained by' quiz (JSON body)",
        "description": "Without answers, returns the five quiz questions and their options (each option maps to a slug). With answers (one slug per question), returns the bottleneck picked most often. Slugs: compute, memory, optics, power, space, servers.",
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [],
                "properties": {
                  "answers": {
                    "type": "string",
                    "description": "Comma-separated slugs, one per question, e.g. power,power,memory,optics,power. POST may send an array."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result as JSON. Always includes a `disclaimer` field.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid input. The body explains what to send and gives an example."
          },
          "429": {
            "description": "Too many requests from one IP. Retry after the Retry-After seconds."
          }
        }
      }
    }
  }
}