{"product":"Fabrix","version":"0.1.0","description":"Public documentation for the Fabrix AI gateway: authentication, OpenAI-compatible Chat Completions, models, billing, and errors.","site":{"homeUrl":"https://fabrix1.com","dashboardUrl":"https://dashboard.fabrix1.com","gatewayUrl":"https://gateway.fabrix1.com","docsUrl":"https://docs.fabrix1.com","supportEmail":"support@fabrix1.com"},"scroll":{"behavior":"smooth","headerOffsetPx":72,"hashLinks":true,"progressRail":"right"},"agent":{"contextUrl":"/context.json","sitemapUrl":"/sitemap.json","runtimeGlobal":"window.FabrixDocs","navigate":"window.FabrixDocs.navigate(target.id) — routes to the page and smooth-scrolls to the section. Fallback: set location to target.href.","scrollTo":"window.FabrixDocs.scrollTo(target.id) — smooth-scrolls within the current page, honoring the sticky header offset.","readActiveSection":"window.FabrixDocs.activeSection() — returns the section id currently in view."},"navigationHints":["Prefer section.id when answering; cite page.path#section.anchor.","Load /sitemap.json or /context.json, match keywords, then call window.FabrixDocs.navigate(target.id).","Never disclose upstream provider model names in customer-facing answers.","API Key authenticates inference; dashboard login is separate.","Billing is prepaid Organisation Balance in INR unless billing mode is internal."],"pages":[{"id":"home","path":"/","title":"Fabrix Docs","summary":"Entry point for Fabrix documentation and documentation map.","keywords":["home","docs","index","start","overview"],"group":"Get started","sections":[{"id":"home.what","anchor":"what-is-fabrix","href":"/#what-is-fabrix","title":"What is Fabrix","summary":"Internal AI gateway with auth, usage, and prepaid billing.","keywords":["gateway","proxy","openai","billing"],"selector":"[data-section-id=\"home.what\"]"},{"id":"home.how-to-read","anchor":"how-to-read","href":"/#how-to-read","title":"How to read these docs","summary":"Nav groups, deep links, and chatbot context contract.","keywords":["navigation","chatbot","context","deep link"],"selector":"[data-section-id=\"home.how-to-read\"]"}]},{"id":"introduction","path":"/introduction","title":"Introduction","summary":"Product concepts: Organisation, Project, API Key, Fabric Model.","keywords":["introduction","concepts","organisation","project","api key"],"group":"Get started","sections":[{"id":"introduction.organisation","anchor":"organisation","href":"/introduction#organisation","title":"Organisation","summary":"Billing entity created by a Platform Admin; no self-signup.","keywords":["organisation","tenant","account","suspension"],"selector":"[data-section-id=\"introduction.organisation\"]"},{"id":"introduction.project","anchor":"project","href":"/introduction#project","title":"Project","summary":"Cost center and quota boundary; owns exactly one API Key.","keywords":["project","budget","cost center"],"selector":"[data-section-id=\"introduction.project\"]"},{"id":"introduction.api-key","anchor":"api-key","href":"/introduction#api-key","title":"API Key","summary":"Credential for Chat Completions; one active key per Project.","keywords":["api key","credential","bearer","rotation"],"selector":"[data-section-id=\"introduction.api-key\"]"},{"id":"introduction.fabric-model","anchor":"fabric-model","href":"/introduction#fabric-model","title":"Fabric Model","summary":"Customer-facing model name; upstream identity is concealed.","keywords":["model","slug","concealment","fabric model"],"selector":"[data-section-id=\"introduction.fabric-model\"]"}]},{"id":"quickstart","path":"/quickstart","title":"Quickstart","summary":"Call Chat Completions with an API Key in a few steps.","keywords":["quickstart","getting started","curl","hello world"],"group":"Get started","sections":[{"id":"quickstart.prerequisites","anchor":"prerequisites","href":"/quickstart#prerequisites","title":"Prerequisites","summary":"Organisation, Project, API Key, allowed Fabric Model, balance.","keywords":["prerequisites","setup","balance"],"selector":"[data-section-id=\"quickstart.prerequisites\"]"},{"id":"quickstart.first-request","anchor":"first-request","href":"/quickstart#first-request","title":"First request","summary":"POST /v1/chat/completions with Bearer API Key.","keywords":["curl","chat","completions","example"],"selector":"[data-section-id=\"quickstart.first-request\"]"},{"id":"quickstart.base-url","anchor":"base-url","href":"/quickstart#base-url","title":"Base URL","summary":"Production gateway host and local Compose port.","keywords":["base url","gateway","endpoint","host"],"selector":"[data-section-id=\"quickstart.base-url\"]"}]},{"id":"authentication","path":"/authentication","title":"Authentication","summary":"API Key Bearer auth for inference; dashboard sessions are separate.","keywords":["auth","authentication","bearer","authorization","api key"],"group":"Guides","sections":[{"id":"authentication.header","anchor":"authorization-header","href":"/authentication#authorization-header","title":"Authorization header","summary":"Authorization: Bearer <api_key> on /v1/* inference routes.","keywords":["bearer","header","authorization"],"selector":"[data-section-id=\"authentication.header\"]"},{"id":"authentication.errors","anchor":"auth-errors","href":"/authentication#auth-errors","title":"Auth errors","summary":"401 invalid key, 403 suspended organisation.","keywords":["401","403","suspended","unauthorized"],"selector":"[data-section-id=\"authentication.errors\"]"},{"id":"authentication.rotation","anchor":"rotation","href":"/authentication#rotation","title":"Key rotation","summary":"Hard cutover: old secret dies immediately; new shown once.","keywords":["rotate","rotation","revoke"],"selector":"[data-section-id=\"authentication.rotation\"]"}]},{"id":"api.chat-completions","path":"/api/chat-completions","title":"Chat Completions","summary":"OpenAI-compatible POST /v1/chat/completions including SSE streaming.","keywords":["chat","completions","streaming","sse","openai","/v1/chat/completions"],"group":"API reference","sections":[{"id":"api.chat-completions.endpoint","anchor":"endpoint","href":"/api/chat-completions#endpoint","title":"Endpoint","summary":"POST /v1/chat/completions","keywords":["endpoint","post","path"],"selector":"[data-section-id=\"api.chat-completions.endpoint\"]"},{"id":"api.chat-completions.request","anchor":"request","href":"/api/chat-completions#request","title":"Request body","summary":"model (Fabric Model slug), messages, optional stream and max_tokens.","keywords":["request","body","messages","max_tokens","stream"],"selector":"[data-section-id=\"api.chat-completions.request\"]"},{"id":"api.chat-completions.response","anchor":"response","href":"/api/chat-completions#response","title":"Response","summary":"OpenAI-shaped response; model field echoes Fabric Model only.","keywords":["response","choices","usage","concealment"],"selector":"[data-section-id=\"api.chat-completions.response\"]"},{"id":"api.chat-completions.streaming","anchor":"streaming","href":"/api/chat-completions#streaming","title":"Streaming","summary":"SSE chunks in OpenAI form when stream=true.","keywords":["stream","sse","chunk"],"selector":"[data-section-id=\"api.chat-completions.streaming\"]"},{"id":"api.chat-completions.reserve","anchor":"reserve","href":"/api/chat-completions#reserve","title":"Reserve and billing","summary":"Prepaid reserve held before provider call; settled after usage.","keywords":["reserve","billing","prepaid","402"],"selector":"[data-section-id=\"api.chat-completions.reserve\"]"}]},{"id":"api.models","path":"/api/models","title":"List Models","summary":"GET /v1/models returns Fabric Models allowed for the Organisation.","keywords":["models","list","/v1/models","slug"],"group":"API reference","sections":[{"id":"api.models.endpoint","anchor":"endpoint","href":"/api/models#endpoint","title":"Endpoint","summary":"GET /v1/models","keywords":["get","endpoint"],"selector":"[data-section-id=\"api.models.endpoint\"]"},{"id":"api.models.response","anchor":"response","href":"/api/models#response","title":"Response","summary":"object=list of {id, object: model} with Fabric Model slugs only.","keywords":["response","list","id"],"selector":"[data-section-id=\"api.models.response\"]"}]},{"id":"billing","path":"/billing","title":"Billing","summary":"Organisation Balance, Project Budgets, Reserves, Top-ups, internal mode.","keywords":["billing","balance","budget","razorpay","top-up","inr"],"group":"Guides","sections":[{"id":"billing.balance","anchor":"organisation-balance","href":"/billing#organisation-balance","title":"Organisation Balance","summary":"Single prepaid INR wallet for commercial Organisations.","keywords":["balance","wallet","inr","prepaid"],"selector":"[data-section-id=\"billing.balance\"]"},{"id":"billing.budget","anchor":"project-budget","href":"/billing#project-budget","title":"Project Budget","summary":"Optional monthly cap; soft alert then hard stop.","keywords":["budget","monthly","soft alert"],"selector":"[data-section-id=\"billing.budget\"]"},{"id":"billing.modes","anchor":"billing-modes","href":"/billing#billing-modes","title":"Billing modes","summary":"commercial vs internal (sponsored; no wallet debit).","keywords":["commercial","internal","sponsored"],"selector":"[data-section-id=\"billing.modes\"]"},{"id":"billing.topup","anchor":"top-ups","href":"/billing#top-ups","title":"Top-ups","summary":"Razorpay Top-up Packages credit Organisation Balance.","keywords":["top-up","razorpay","package","invoice"],"selector":"[data-section-id=\"billing.topup\"]"}]},{"id":"errors","path":"/errors","title":"Errors","summary":"Fabric-shaped OpenAI-compatible errors; no upstream vendor text.","keywords":["errors","status","402","429","401","403","502"],"group":"Guides","sections":[{"id":"errors.shape","anchor":"error-shape","href":"/errors#error-shape","title":"Error shape","summary":"OpenAI-compatible error object with Fabric messages only.","keywords":["error","json","message"],"selector":"[data-section-id=\"errors.shape\"]"},{"id":"errors.codes","anchor":"status-codes","href":"/errors#status-codes","title":"Status codes","summary":"Common HTTP statuses returned by the gateway.","keywords":["status","http","codes"],"selector":"[data-section-id=\"errors.codes\"]"}]},{"id":"rate-limits","path":"/rate-limits","title":"Rate limits","summary":"Organisation-wide RPM shared across Projects and API Keys.","keywords":["rate limit","rpm","429","throttle"],"group":"Guides","sections":[{"id":"rate-limits.scope","anchor":"scope","href":"/rate-limits#scope","title":"Scope","summary":"Per Organisation RPM pool; not per Project or key in v1.","keywords":["organisation","rpm","scope"],"selector":"[data-section-id=\"rate-limits.scope\"]"},{"id":"rate-limits.response","anchor":"response","href":"/rate-limits#response","title":"Exceeded response","summary":"429 Rate limit exceeded.","keywords":["429","exceeded"],"selector":"[data-section-id=\"rate-limits.response\"]"}]}],"targets":[{"id":"home","pageId":"home","path":"/","href":"/","title":"Fabrix Docs","summary":"Entry point for Fabrix documentation and documentation map.","keywords":["home","docs","index","start","overview"],"selector":"[data-doc-id=\"home\"]","kind":"page"},{"id":"home.what","pageId":"home","path":"/","href":"/#what-is-fabrix","title":"What is Fabrix","summary":"Internal AI gateway with auth, usage, and prepaid billing.","keywords":["gateway","proxy","openai","billing"],"selector":"[data-section-id=\"home.what\"]","kind":"section"},{"id":"home.how-to-read","pageId":"home","path":"/","href":"/#how-to-read","title":"How to read these docs","summary":"Nav groups, deep links, and chatbot context contract.","keywords":["navigation","chatbot","context","deep link"],"selector":"[data-section-id=\"home.how-to-read\"]","kind":"section"},{"id":"introduction","pageId":"introduction","path":"/introduction","href":"/introduction","title":"Introduction","summary":"Product concepts: Organisation, Project, API Key, Fabric Model.","keywords":["introduction","concepts","organisation","project","api key"],"selector":"[data-doc-id=\"introduction\"]","kind":"page"},{"id":"introduction.organisation","pageId":"introduction","path":"/introduction","href":"/introduction#organisation","title":"Organisation","summary":"Billing entity created by a Platform Admin; no self-signup.","keywords":["organisation","tenant","account","suspension"],"selector":"[data-section-id=\"introduction.organisation\"]","kind":"section"},{"id":"introduction.project","pageId":"introduction","path":"/introduction","href":"/introduction#project","title":"Project","summary":"Cost center and quota boundary; owns exactly one API Key.","keywords":["project","budget","cost center"],"selector":"[data-section-id=\"introduction.project\"]","kind":"section"},{"id":"introduction.api-key","pageId":"introduction","path":"/introduction","href":"/introduction#api-key","title":"API Key","summary":"Credential for Chat Completions; one active key per Project.","keywords":["api key","credential","bearer","rotation"],"selector":"[data-section-id=\"introduction.api-key\"]","kind":"section"},{"id":"introduction.fabric-model","pageId":"introduction","path":"/introduction","href":"/introduction#fabric-model","title":"Fabric Model","summary":"Customer-facing model name; upstream identity is concealed.","keywords":["model","slug","concealment","fabric model"],"selector":"[data-section-id=\"introduction.fabric-model\"]","kind":"section"},{"id":"quickstart","pageId":"quickstart","path":"/quickstart","href":"/quickstart","title":"Quickstart","summary":"Call Chat Completions with an API Key in a few steps.","keywords":["quickstart","getting started","curl","hello world"],"selector":"[data-doc-id=\"quickstart\"]","kind":"page"},{"id":"quickstart.prerequisites","pageId":"quickstart","path":"/quickstart","href":"/quickstart#prerequisites","title":"Prerequisites","summary":"Organisation, Project, API Key, allowed Fabric Model, balance.","keywords":["prerequisites","setup","balance"],"selector":"[data-section-id=\"quickstart.prerequisites\"]","kind":"section"},{"id":"quickstart.first-request","pageId":"quickstart","path":"/quickstart","href":"/quickstart#first-request","title":"First request","summary":"POST /v1/chat/completions with Bearer API Key.","keywords":["curl","chat","completions","example"],"selector":"[data-section-id=\"quickstart.first-request\"]","kind":"section"},{"id":"quickstart.base-url","pageId":"quickstart","path":"/quickstart","href":"/quickstart#base-url","title":"Base URL","summary":"Production gateway host and local Compose port.","keywords":["base url","gateway","endpoint","host"],"selector":"[data-section-id=\"quickstart.base-url\"]","kind":"section"},{"id":"authentication","pageId":"authentication","path":"/authentication","href":"/authentication","title":"Authentication","summary":"API Key Bearer auth for inference; dashboard sessions are separate.","keywords":["auth","authentication","bearer","authorization","api key"],"selector":"[data-doc-id=\"authentication\"]","kind":"page"},{"id":"authentication.header","pageId":"authentication","path":"/authentication","href":"/authentication#authorization-header","title":"Authorization header","summary":"Authorization: Bearer <api_key> on /v1/* inference routes.","keywords":["bearer","header","authorization"],"selector":"[data-section-id=\"authentication.header\"]","kind":"section"},{"id":"authentication.errors","pageId":"authentication","path":"/authentication","href":"/authentication#auth-errors","title":"Auth errors","summary":"401 invalid key, 403 suspended organisation.","keywords":["401","403","suspended","unauthorized"],"selector":"[data-section-id=\"authentication.errors\"]","kind":"section"},{"id":"authentication.rotation","pageId":"authentication","path":"/authentication","href":"/authentication#rotation","title":"Key rotation","summary":"Hard cutover: old secret dies immediately; new shown once.","keywords":["rotate","rotation","revoke"],"selector":"[data-section-id=\"authentication.rotation\"]","kind":"section"},{"id":"api.chat-completions","pageId":"api.chat-completions","path":"/api/chat-completions","href":"/api/chat-completions","title":"Chat Completions","summary":"OpenAI-compatible POST /v1/chat/completions including SSE streaming.","keywords":["chat","completions","streaming","sse","openai","/v1/chat/completions"],"selector":"[data-doc-id=\"api.chat-completions\"]","kind":"page"},{"id":"api.chat-completions.endpoint","pageId":"api.chat-completions","path":"/api/chat-completions","href":"/api/chat-completions#endpoint","title":"Endpoint","summary":"POST /v1/chat/completions","keywords":["endpoint","post","path"],"selector":"[data-section-id=\"api.chat-completions.endpoint\"]","kind":"section"},{"id":"api.chat-completions.request","pageId":"api.chat-completions","path":"/api/chat-completions","href":"/api/chat-completions#request","title":"Request body","summary":"model (Fabric Model slug), messages, optional stream and max_tokens.","keywords":["request","body","messages","max_tokens","stream"],"selector":"[data-section-id=\"api.chat-completions.request\"]","kind":"section"},{"id":"api.chat-completions.response","pageId":"api.chat-completions","path":"/api/chat-completions","href":"/api/chat-completions#response","title":"Response","summary":"OpenAI-shaped response; model field echoes Fabric Model only.","keywords":["response","choices","usage","concealment"],"selector":"[data-section-id=\"api.chat-completions.response\"]","kind":"section"},{"id":"api.chat-completions.streaming","pageId":"api.chat-completions","path":"/api/chat-completions","href":"/api/chat-completions#streaming","title":"Streaming","summary":"SSE chunks in OpenAI form when stream=true.","keywords":["stream","sse","chunk"],"selector":"[data-section-id=\"api.chat-completions.streaming\"]","kind":"section"},{"id":"api.chat-completions.reserve","pageId":"api.chat-completions","path":"/api/chat-completions","href":"/api/chat-completions#reserve","title":"Reserve and billing","summary":"Prepaid reserve held before provider call; settled after usage.","keywords":["reserve","billing","prepaid","402"],"selector":"[data-section-id=\"api.chat-completions.reserve\"]","kind":"section"},{"id":"api.models","pageId":"api.models","path":"/api/models","href":"/api/models","title":"List Models","summary":"GET /v1/models returns Fabric Models allowed for the Organisation.","keywords":["models","list","/v1/models","slug"],"selector":"[data-doc-id=\"api.models\"]","kind":"page"},{"id":"api.models.endpoint","pageId":"api.models","path":"/api/models","href":"/api/models#endpoint","title":"Endpoint","summary":"GET /v1/models","keywords":["get","endpoint"],"selector":"[data-section-id=\"api.models.endpoint\"]","kind":"section"},{"id":"api.models.response","pageId":"api.models","path":"/api/models","href":"/api/models#response","title":"Response","summary":"object=list of {id, object: model} with Fabric Model slugs only.","keywords":["response","list","id"],"selector":"[data-section-id=\"api.models.response\"]","kind":"section"},{"id":"billing","pageId":"billing","path":"/billing","href":"/billing","title":"Billing","summary":"Organisation Balance, Project Budgets, Reserves, Top-ups, internal mode.","keywords":["billing","balance","budget","razorpay","top-up","inr"],"selector":"[data-doc-id=\"billing\"]","kind":"page"},{"id":"billing.balance","pageId":"billing","path":"/billing","href":"/billing#organisation-balance","title":"Organisation Balance","summary":"Single prepaid INR wallet for commercial Organisations.","keywords":["balance","wallet","inr","prepaid"],"selector":"[data-section-id=\"billing.balance\"]","kind":"section"},{"id":"billing.budget","pageId":"billing","path":"/billing","href":"/billing#project-budget","title":"Project Budget","summary":"Optional monthly cap; soft alert then hard stop.","keywords":["budget","monthly","soft alert"],"selector":"[data-section-id=\"billing.budget\"]","kind":"section"},{"id":"billing.modes","pageId":"billing","path":"/billing","href":"/billing#billing-modes","title":"Billing modes","summary":"commercial vs internal (sponsored; no wallet debit).","keywords":["commercial","internal","sponsored"],"selector":"[data-section-id=\"billing.modes\"]","kind":"section"},{"id":"billing.topup","pageId":"billing","path":"/billing","href":"/billing#top-ups","title":"Top-ups","summary":"Razorpay Top-up Packages credit Organisation Balance.","keywords":["top-up","razorpay","package","invoice"],"selector":"[data-section-id=\"billing.topup\"]","kind":"section"},{"id":"errors","pageId":"errors","path":"/errors","href":"/errors","title":"Errors","summary":"Fabric-shaped OpenAI-compatible errors; no upstream vendor text.","keywords":["errors","status","402","429","401","403","502"],"selector":"[data-doc-id=\"errors\"]","kind":"page"},{"id":"errors.shape","pageId":"errors","path":"/errors","href":"/errors#error-shape","title":"Error shape","summary":"OpenAI-compatible error object with Fabric messages only.","keywords":["error","json","message"],"selector":"[data-section-id=\"errors.shape\"]","kind":"section"},{"id":"errors.codes","pageId":"errors","path":"/errors","href":"/errors#status-codes","title":"Status codes","summary":"Common HTTP statuses returned by the gateway.","keywords":["status","http","codes"],"selector":"[data-section-id=\"errors.codes\"]","kind":"section"},{"id":"rate-limits","pageId":"rate-limits","path":"/rate-limits","href":"/rate-limits","title":"Rate limits","summary":"Organisation-wide RPM shared across Projects and API Keys.","keywords":["rate limit","rpm","429","throttle"],"selector":"[data-doc-id=\"rate-limits\"]","kind":"page"},{"id":"rate-limits.scope","pageId":"rate-limits","path":"/rate-limits","href":"/rate-limits#scope","title":"Scope","summary":"Per Organisation RPM pool; not per Project or key in v1.","keywords":["organisation","rpm","scope"],"selector":"[data-section-id=\"rate-limits.scope\"]","kind":"section"},{"id":"rate-limits.response","pageId":"rate-limits","path":"/rate-limits","href":"/rate-limits#response","title":"Exceeded response","summary":"429 Rate limit exceeded.","keywords":["429","exceeded"],"selector":"[data-section-id=\"rate-limits.response\"]","kind":"section"}]}