{"openapi":"3.1.0","info":{"title":"Agentic Boilerplate API","version":"1.0.0","summary":"Public, read-only data behind the Agentic Boilerplate Next.js generator.","description":"List the batteries (auth, database, payments, email, analytics and more), presets, designs and solution docs that Agentic Boilerplate can put in a generated Next.js repo, and dry-run the resolver to see exactly what a selection produces. No API key. Every error is JSON with a code, a message and a hint. To download a repo, send a person to /build with the same selection.","contact":{"name":"Agentic Boilerplate","email":"agenticstudio@gmail.com","url":"https://agenticboilerplate.com/contact"}},"servers":[{"url":"https://agenticboilerplate.com","description":"Production"}],"security":[],"externalDocs":{"description":"llms.txt: what this site is and when to use it","url":"https://agenticboilerplate.com/llms.txt"},"tags":[{"name":"catalog","description":"What a generated repo can contain."},{"name":"plan","description":"Check a selection before generating it."}],"paths":{"/api/v1":{"get":{"operationId":"getApiIndex","tags":["catalog"],"summary":"List the API's endpoints","description":"Entry point: the API version, the stacks on offer and a URL for every endpoint.","responses":{"200":{"description":"The index.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"405":{"description":"Wrong method. The Allow header names the right ones.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/batteries":{"get":{"operationId":"listBatteries","tags":["catalog"],"summary":"List batteries","description":"Every battery (Stripe, Clerk, Neon, Resend, PostHog and the rest) with its category, requirements and conflicts.","parameters":[{"name":"category","in":"query","required":false,"description":"Only batteries in this category, for example payments or auth.","schema":{"type":"string"},"example":"payments"}],"responses":{"200":{"description":"The batteries.","content":{"application/json":{"schema":{"type":"object","required":["batteries"],"properties":{"batteries":{"type":"array","items":{"$ref":"#/components/schemas/Battery"}}}}}}},"400":{"description":"Unknown category.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Wrong method. The Allow header names the right ones.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/batteries/{id}":{"get":{"operationId":"getBattery","tags":["catalog"],"summary":"Get one battery","description":"One battery with its environment variables, setup steps, pricing note, trade-offs and solution docs.","parameters":[{"name":"id","in":"path","required":true,"description":"The battery id.","schema":{"type":"string","pattern":"^[a-z0-9-]+$"},"example":"stripe"}],"responses":{"200":{"description":"The battery.","content":{"application/json":{"schema":{"type":"object","required":["battery"],"properties":{"battery":{"$ref":"#/components/schemas/BatteryDetail"}}}}}},"404":{"description":"No battery with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Wrong method. The Allow header names the right ones.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/presets":{"get":{"operationId":"listPresets","tags":["catalog"],"summary":"List presets","description":"Ready-made selections such as Indie SaaS, AI Product and Content site.","responses":{"200":{"description":"The presets.","content":{"application/json":{"schema":{"type":"object","required":["presets"],"properties":{"presets":{"type":"array","items":{"$ref":"#/components/schemas/Preset"}}}}}}},"405":{"description":"Wrong method. The Allow header names the right ones.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/presets/{id}":{"get":{"operationId":"getPreset","tags":["catalog"],"summary":"Get one preset","description":"One preset and the full selection it starts from.","parameters":[{"name":"id","in":"path","required":true,"description":"The preset id.","schema":{"type":"string","pattern":"^[a-z0-9-]+$"},"example":"indie-saas"}],"responses":{"200":{"description":"The preset.","content":{"application/json":{"schema":{"type":"object","required":["preset"],"properties":{"preset":{"$ref":"#/components/schemas/Preset"}}}}}},"404":{"description":"No preset with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Wrong method. The Allow header names the right ones.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/designs":{"get":{"operationId":"listDesigns","tags":["catalog"],"summary":"List designs","description":"Every design system a generated repo can start from.","responses":{"200":{"description":"The designs.","content":{"application/json":{"schema":{"type":"object","required":["designs"],"properties":{"designs":{"type":"array","items":{"$ref":"#/components/schemas/Design"}}}}}}},"405":{"description":"Wrong method. The Allow header names the right ones.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/designs/{id}":{"get":{"operationId":"getDesign","tags":["catalog"],"summary":"Get one design","description":"One design system: label, description, tags and default theme.","parameters":[{"name":"id","in":"path","required":true,"description":"The design id.","schema":{"type":"string","pattern":"^[a-z0-9-]+$"},"example":"default"}],"responses":{"200":{"description":"The design.","content":{"application/json":{"schema":{"type":"object","required":["design"],"properties":{"design":{"$ref":"#/components/schemas/Design"}}}}}},"404":{"description":"No design with that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Wrong method. The Allow header names the right ones.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/solution-docs":{"get":{"operationId":"listSolutionDocs","tags":["catalog"],"summary":"List solution docs","description":"The known fixes that ship inside generated repos, one per real problem, with a link to the full text.","parameters":[{"name":"plugin","in":"query","required":false,"description":"Only docs owned by this battery, stack or design id.","schema":{"type":"string"},"example":"stripe"}],"responses":{"200":{"description":"The solution docs.","content":{"application/json":{"schema":{"type":"object","required":["solutionDocs"],"properties":{"solutionDocs":{"type":"array","items":{"$ref":"#/components/schemas/SolutionDoc"}}}}}}},"400":{"description":"No docs for that plugin id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Wrong method. The Allow header names the right ones.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/plan":{"post":{"operationId":"planSelection","tags":["plan"],"summary":"Dry-run a selection","description":"Resolve a selection exactly as the builder does: auto-add required batteries, refuse conflicts and untested pairs, and count the agent layer. Omitted fields come from the preset when one is named, else the builder's defaults. Stores nothing and sends nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanRequest"}}}},"responses":{"200":{"description":"The plan. ok is false when the selection cannot be generated; explanations say why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Plan"}}}},"400":{"description":"Malformed JSON or a field that does not validate.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown preset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Wrong method. The Allow header names the right ones.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Body over 16KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Body is not application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","hint","docs"],"properties":{"code":{"type":"string","enum":["not_found","method_not_allowed","bad_request","unsupported_media_type","payload_too_large"]},"message":{"type":"string","description":"What went wrong."},"hint":{"type":"string","description":"How to fix the request."},"docs":{"type":"string","format":"uri"},"details":{"type":"array","items":{"type":"string"}}}}}},"Counts":{"type":"object","description":"How much of the agent layer this contributes.","required":["agents","skills","rules","hooks","solutions","mcp"],"properties":{"agents":{"type":"integer","minimum":0},"skills":{"type":"integer","minimum":0},"rules":{"type":"integer","minimum":0},"hooks":{"type":"integer","minimum":0},"solutions":{"type":"integer","minimum":0},"mcp":{"type":"integer","minimum":0}}},"Battery":{"type":"object","required":["id","label","category","categoryLabel","description","requires","recommends","conflicts","counts","links"],"properties":{"id":{"type":"string","example":"stripe"},"label":{"type":"string","example":"Stripe"},"category":{"type":"string","example":"payments"},"categoryLabel":{"type":"string","example":"Payments"},"description":{"type":"string"},"tagline":{"type":["string","null"]},"requires":{"type":"array","items":{"type":"string"},"description":"Category or battery ids that must be present."},"recommends":{"type":"array","items":{"type":"string"}},"conflicts":{"type":"array","items":{"type":"string"},"description":"Battery ids that cannot be picked together with this one."},"counts":{"$ref":"#/components/schemas/Counts"},"links":{"type":"object","required":["page","api"],"properties":{"page":{"type":"string","format":"uri","description":"The page on the site. Send Accept: text/markdown for Markdown."},"api":{"type":"string","format":"uri","description":"This resource in the API."}}}}},"BatteryDetail":{"allOf":[{"$ref":"#/components/schemas/Battery"},{"type":"object","properties":{"homepage":{"type":["string","null"],"format":"uri"},"pricing":{"type":["string","null"]},"bestFor":{"type":["string","null"]},"tradeoffs":{"type":"array","items":{"type":"string"}},"env":{"type":"array","items":{"type":"object","required":["key","required","description"],"properties":{"key":{"type":"string"},"required":{"type":"boolean"},"description":{"type":"string"},"docs":{"type":["string","null"],"format":"uri"}}}},"setupSteps":{"type":"array","items":{"type":"string"}},"solutionDocs":{"type":"array","items":{"$ref":"#/components/schemas/SolutionDoc"}}}}]},"Preset":{"type":"object","required":["id","label","tagline","description","highlights","selection","links"],"properties":{"id":{"type":"string","example":"indie-saas"},"label":{"type":"string"},"tagline":{"type":"string"},"description":{"type":"string"},"highlights":{"type":"array","items":{"type":"string"}},"selection":{"type":"object","properties":{"projectName":{"type":"string","minLength":1,"maxLength":64,"description":"Folder name of the generated repo."},"stack":{"type":"string","description":"Stack id. Today only nextjs-vercel."},"pm":{"type":"string","enum":["bun","pnpm","npm"],"description":"Package manager the repo is set up for."},"batteries":{"type":"array","maxItems":40,"items":{"type":"string"},"description":"Battery ids. One per category at most."},"design":{"type":"string","description":"Design id, from GET /api/v1/designs."},"mode":{"type":"string","enum":["solo","team"],"description":"Team mode adds the hooks and rules a shared repo needs."},"targets":{"type":"array","items":{"type":"string","enum":["claude","codex","cursor"]},"description":"Coding agents to write config for. claude is always included."},"ai":{"type":"object","description":"The AI bundle: a provider plus chat, structured output and tool calling.","properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","enum":["anthropic","openai"]},"chat":{"type":"boolean"},"structured":{"type":"boolean"},"tools":{"type":"boolean"}}},"admin":{"type":"boolean","description":"Include the admin panel."}}},"links":{"type":"object","required":["page","api"],"properties":{"page":{"type":"string","format":"uri","description":"The page on the site. Send Accept: text/markdown for Markdown."},"api":{"type":"string","format":"uri","description":"This resource in the API."}}}}},"Design":{"type":"object","required":["id","label","description","tags","links"],"properties":{"id":{"type":"string","example":"default"},"label":{"type":"string"},"description":{"type":"string"},"tagline":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"theme":{"type":["string","null"],"enum":["light","dark",null]},"links":{"type":"object","required":["page","api"],"properties":{"page":{"type":"string","format":"uri","description":"The page on the site. Send Accept: text/markdown for Markdown."},"api":{"type":"string","format":"uri","description":"This resource in the API."}}}}},"SolutionDoc":{"type":"object","required":["id","plugin","title","summary","tags","url"],"properties":{"id":{"type":"string"},"plugin":{"type":"string","description":"The battery, stack or design that ships this doc."},"title":{"type":"string"},"summary":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"url":{"type":"string","format":"uri"}}},"Selection":{"type":"object","required":["projectName","stack","pm","batteries","design","mode","targets","ai","admin"],"properties":{"projectName":{"type":"string","minLength":1,"maxLength":64,"description":"Folder name of the generated repo."},"stack":{"type":"string","description":"Stack id. Today only nextjs-vercel."},"pm":{"type":"string","enum":["bun","pnpm","npm"],"description":"Package manager the repo is set up for."},"batteries":{"type":"array","maxItems":40,"items":{"type":"string"},"description":"Battery ids. One per category at most."},"design":{"type":"string","description":"Design id, from GET /api/v1/designs."},"mode":{"type":"string","enum":["solo","team"],"description":"Team mode adds the hooks and rules a shared repo needs."},"targets":{"type":"array","items":{"type":"string","enum":["claude","codex","cursor"]},"description":"Coding agents to write config for. claude is always included."},"ai":{"type":"object","description":"The AI bundle: a provider plus chat, structured output and tool calling.","properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","enum":["anthropic","openai"]},"chat":{"type":"boolean"},"structured":{"type":"boolean"},"tools":{"type":"boolean"}}},"admin":{"type":"boolean","description":"Include the admin panel."}}},"PlanRequest":{"type":"object","additionalProperties":false,"description":"Any subset of a Selection, plus an optional preset to start from.","properties":{"preset":{"type":"string","description":"Start from this preset's selection.","example":"indie-saas"},"projectName":{"type":"string","minLength":1,"maxLength":64,"description":"Folder name of the generated repo."},"stack":{"type":"string","description":"Stack id. Today only nextjs-vercel."},"pm":{"type":"string","enum":["bun","pnpm","npm"],"description":"Package manager the repo is set up for."},"batteries":{"type":"array","maxItems":40,"items":{"type":"string"},"description":"Battery ids. One per category at most."},"design":{"type":"string","description":"Design id, from GET /api/v1/designs."},"mode":{"type":"string","enum":["solo","team"],"description":"Team mode adds the hooks and rules a shared repo needs."},"targets":{"type":"array","items":{"type":"string","enum":["claude","codex","cursor"]},"description":"Coding agents to write config for. claude is always included."},"ai":{"type":"object","description":"The AI bundle: a provider plus chat, structured output and tool calling.","properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","enum":["anthropic","openai"]},"chat":{"type":"boolean"},"structured":{"type":"boolean"},"tools":{"type":"boolean"}}},"admin":{"type":"boolean","description":"Include the admin panel."}},"example":{"preset":"indie-saas","pm":"pnpm"}},"Explanation":{"type":"object","required":["level","code","message"],"properties":{"level":{"type":"string","enum":["info","warn","error"]},"code":{"type":"string","description":"Stable machine code, for example auto-added, conflict or untested."},"message":{"type":"string"},"pluginId":{"type":"string"}}},"Plan":{"type":"object","required":["ok","selection","plugins","counts","explanations"],"properties":{"ok":{"type":"boolean","description":"True when this selection can be generated."},"selection":{"$ref":"#/components/schemas/Selection"},"plugins":{"type":"array","items":{"type":"string"},"description":"Every plugin in generation order."},"counts":{"$ref":"#/components/schemas/Counts"},"explanations":{"type":"array","items":{"$ref":"#/components/schemas/Explanation"}}}}}}}