[{"data":1,"prerenderedAt":1091},["ShallowReactive",2],{"navigation":3,"\u002Fbooki-documentation\u002Fapi\u002Fbooki-api":303,"\u002Fbooki-documentation\u002Fapi\u002Fbooki-api-surround":1086},[4,55,105],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":54},"Nuxt Guide","i-lucide-layout","\u002Fnuxt-guide","1.nuxt-guide",[10,14,19,24,29,34,39,44,49],{"title":11,"path":12,"stem":13,"icon":6},"Overview","\u002Fnuxt-guide\u002Foverview","1.nuxt-guide\u002F1.overview",{"title":15,"path":16,"stem":17,"icon":18},"Folder Structure","\u002Fnuxt-guide\u002Ffolder-structure","1.nuxt-guide\u002F2.folder-structure","i-lucide-folder-tree",{"title":20,"path":21,"stem":22,"icon":23},"Components","\u002Fnuxt-guide\u002Fcomponents","1.nuxt-guide\u002F3.components","i-lucide-component",{"title":25,"path":26,"stem":27,"icon":28},"Composables","\u002Fnuxt-guide\u002Fcomposables","1.nuxt-guide\u002F4.composables","i-lucide-puzzle",{"title":30,"path":31,"stem":32,"icon":33},"Pages & Routing","\u002Fnuxt-guide\u002Fpages-routing","1.nuxt-guide\u002F5.pages-routing","i-lucide-file-text",{"title":35,"path":36,"stem":37,"icon":38},"Middleware","\u002Fnuxt-guide\u002Fmiddleware","1.nuxt-guide\u002F6.middleware","i-lucide-shield-check",{"title":40,"path":41,"stem":42,"icon":43},"Plugins","\u002Fnuxt-guide\u002Fplugins","1.nuxt-guide\u002F7.plugins","i-lucide-plug",{"title":45,"path":46,"stem":47,"icon":48},"State Management","\u002Fnuxt-guide\u002Fstate-management","1.nuxt-guide\u002F8.state-management","i-lucide-database",{"title":50,"path":51,"stem":52,"icon":53},"TypeScript","\u002Fnuxt-guide\u002Ftypescript","1.nuxt-guide\u002F9.typescript","i-lucide-braces",false,{"title":56,"icon":57,"path":58,"stem":59,"children":60,"page":54},"Node \u002F Express Guide","i-lucide-server","\u002Fnode-express-guide","2.node-express-guide",[61,64,69,72,77,82,86,91,96,100],{"title":11,"path":62,"stem":63,"icon":57},"\u002Fnode-express-guide\u002Foverview","2.node-express-guide\u002F1.overview",{"title":65,"path":66,"stem":67,"icon":68},"Error Handling","\u002Fnode-express-guide\u002Ferror-handling","2.node-express-guide\u002F10.error-handling","i-lucide-alert-triangle",{"title":15,"path":70,"stem":71,"icon":18},"\u002Fnode-express-guide\u002Ffolder-structure","2.node-express-guide\u002F2.folder-structure",{"title":73,"path":74,"stem":75,"icon":76},"Controllers","\u002Fnode-express-guide\u002Fcontrollers","2.node-express-guide\u002F3.controllers","i-lucide-cpu",{"title":78,"path":79,"stem":80,"icon":81},"Services","\u002Fnode-express-guide\u002Fservices","2.node-express-guide\u002F4.services","i-lucide-workflow",{"title":83,"path":84,"stem":85,"icon":48},"Repositories","\u002Fnode-express-guide\u002Frepositories","2.node-express-guide\u002F5.repositories",{"title":87,"path":88,"stem":89,"icon":90},"Models","\u002Fnode-express-guide\u002Fmodels","2.node-express-guide\u002F6.models","i-lucide-boxes",{"title":92,"path":93,"stem":94,"icon":95},"Routes","\u002Fnode-express-guide\u002Froutes","2.node-express-guide\u002F7.routes","i-lucide-route",{"title":35,"path":97,"stem":98,"icon":99},"\u002Fnode-express-guide\u002Fmiddleware","2.node-express-guide\u002F8.middleware","i-lucide-shield",{"title":101,"path":102,"stem":103,"icon":104},"Validation","\u002Fnode-express-guide\u002Fvalidation","2.node-express-guide\u002F9.validation","i-lucide-check-circle",{"title":106,"icon":107,"path":108,"stem":109,"children":110,"page":54},"Booki Documentation","i-lucide-book-open","\u002Fbooki-documentation","3.booki-documentation",[111,115,120,125,130,229,244,257],{"title":112,"path":113,"stem":114,"icon":107},"Project Overview","\u002Fbooki-documentation\u002Foverview","3.booki-documentation\u002F1.overview",{"title":116,"path":117,"stem":118,"icon":119},"Installation","\u002Fbooki-documentation\u002F1.installation","3.booki-documentation\u002F2.1.installation","i-lucide-download",{"title":121,"path":122,"stem":123,"icon":124},"Development Overview","\u002Fbooki-documentation\u002F2.architecture","3.booki-documentation\u002F2.2.architecture","i-lucide-layers",{"title":126,"path":127,"stem":128,"icon":129},"Local Development","\u002Fbooki-documentation\u002F3.local-development","3.booki-documentation\u002F2.3.local-development","i-lucide-monitor",{"title":131,"icon":57,"path":132,"stem":133,"children":134,"page":54},"API","\u002Fbooki-documentation\u002Fapi","3.booki-documentation\u002F3.api",[135,139,144,149,154,159,163,168,173,178,183,188,192,197,202,206,211,216,220,224],{"title":136,"path":137,"stem":138,"icon":57},"Booki API Reference","\u002Fbooki-documentation\u002Fapi\u002Fbooki-api","3.booki-documentation\u002F3.api\u002F1.booki-api",{"title":140,"path":141,"stem":142,"icon":143},"Auth - Login & Refresh","\u002Fbooki-documentation\u002Fapi\u002Fauth","3.booki-documentation\u002F3.api\u002F2.auth","i-lucide-key",{"title":145,"path":146,"stem":147,"icon":148},"Auth - Customer Registration","\u002Fbooki-documentation\u002Fapi\u002Fauth-customer-register","3.booki-documentation\u002F3.api\u002F2.auth-customer-register","i-lucide-user-check",{"title":150,"path":151,"stem":152,"icon":153},"Auth - Owner Registration","\u002Fbooki-documentation\u002Fapi\u002Fauth-owner-register","3.booki-documentation\u002F3.api\u002F2.auth-owner-register","i-lucide-user-plus",{"title":155,"path":156,"stem":157,"icon":158},"Bookings","\u002Fbooki-documentation\u002Fapi\u002Fbookings","3.booki-documentation\u002F3.api\u002F3.bookings","i-lucide-calendar-check",{"title":160,"path":161,"stem":162,"icon":158},"Bookings - Authenticated","\u002Fbooki-documentation\u002Fapi\u002Fbookings-auth","3.booki-documentation\u002F3.api\u002F3.bookings-auth",{"title":164,"path":165,"stem":166,"icon":167},"Bookings - Public & Guest","\u002Fbooki-documentation\u002Fapi\u002Fbookings-public","3.booki-documentation\u002F3.api\u002F3.bookings-public","i-lucide-calendar-plus",{"title":169,"path":170,"stem":171,"icon":172},"Booking Services","\u002Fbooki-documentation\u002Fapi\u002Fbooking-services","3.booki-documentation\u002F3.api\u002F4.booking-services","i-lucide-box",{"title":174,"path":175,"stem":176,"icon":177},"Organizations - Branches","\u002Fbooki-documentation\u002Fapi\u002Fbranches","3.booki-documentation\u002F3.api\u002F5.branches","i-lucide-git-branch",{"title":179,"path":180,"stem":181,"icon":182},"Organizations - Business Hours","\u002Fbooki-documentation\u002Fapi\u002Fbusiness-hours","3.booki-documentation\u002F3.api\u002F5.business-hours","i-lucide-clock",{"title":184,"path":185,"stem":186,"icon":187},"Organizations - Base","\u002Fbooki-documentation\u002Fapi\u002Forganizations","3.booki-documentation\u002F3.api\u002F5.organizations","i-lucide-building-2",{"title":189,"path":190,"stem":191,"icon":172},"Organizations - Packages","\u002Fbooki-documentation\u002Fapi\u002Fpackages","3.booki-documentation\u002F3.api\u002F5.packages",{"title":193,"path":194,"stem":195,"icon":196},"Organizations - Payments & Integrations","\u002Fbooki-documentation\u002Fapi\u002Fpayments","3.booki-documentation\u002F3.api\u002F5.payments","i-lucide-credit-card",{"title":198,"path":199,"stem":200,"icon":201},"Users - Profile & Settings","\u002Fbooki-documentation\u002Fapi\u002Fusers","3.booki-documentation\u002F3.api\u002F6.users","i-lucide-user",{"title":203,"path":204,"stem":205,"icon":196},"Maya Payments","\u002Fbooki-documentation\u002Fapi\u002Fmaya","3.booki-documentation\u002F3.api\u002F7.maya",{"title":207,"path":208,"stem":209,"icon":210},"Owner - Booking Management","\u002Fbooki-documentation\u002Fapi\u002Fowner-bookings","3.booki-documentation\u002F3.api\u002F7.owner-bookings","i-lucide-calendar",{"title":212,"path":213,"stem":214,"icon":215},"Owner - Customer Management","\u002Fbooki-documentation\u002Fapi\u002Fowner-customers","3.booki-documentation\u002F3.api\u002F7.owner-customers","i-lucide-users",{"title":217,"path":218,"stem":219,"icon":196},"Admin - Billing & Subscriptions","\u002Fbooki-documentation\u002Fapi\u002Fadmin-billing","3.booki-documentation\u002F3.api\u002F8.admin-billing",{"title":221,"path":222,"stem":223,"icon":187},"Admin - Organizations Management","\u002Fbooki-documentation\u002Fapi\u002Fadmin-organizations","3.booki-documentation\u002F3.api\u002F8.admin-organizations",{"title":225,"path":226,"stem":227,"icon":228},"Admin - User Management","\u002Fbooki-documentation\u002Fapi\u002Fadmin-users","3.booki-documentation\u002F3.api\u002F8.admin-users","i-lucide-shield-admin",{"title":230,"icon":231,"path":232,"stem":233,"children":234,"page":54},"Shared","i-lucide-package","\u002Fbooki-documentation\u002Fshared","3.booki-documentation\u002F4.shared",[235,240],{"title":236,"path":237,"stem":238,"icon":239},"codi-node-utils","\u002Fbooki-documentation\u002Fshared\u002Fcodi-node-utils","3.booki-documentation\u002F4.shared\u002F1.codi-node-utils","i-lucide-wrench",{"title":241,"path":242,"stem":243,"icon":124},"codi-layer","\u002Fbooki-documentation\u002Fshared\u002Fcodi-layer","3.booki-documentation\u002F4.shared\u002F2.codi-layer",{"title":245,"path":246,"stem":247,"children":248,"page":54},"Flowcharts","\u002Fbooki-documentation\u002Fflowcharts","3.booki-documentation\u002F5.flowcharts",[249,253],{"title":250,"path":251,"stem":252,"icon":158},"Owner Booking Management Flow","\u002Fbooki-documentation\u002Fflowcharts\u002Fowner-booking-management","3.booki-documentation\u002F5.flowcharts\u002F1.owner-booking-management",{"title":254,"path":255,"stem":256,"icon":167},"Customer Booking Flow","\u002Fbooki-documentation\u002Fflowcharts\u002Fcustomer-booking-flow","3.booki-documentation\u002F5.flowcharts\u002F2.customer-booking-flow",{"title":258,"path":259,"stem":260,"children":261,"page":54},"Guides","\u002Fbooki-documentation\u002Fguides","3.booki-documentation\u002Fguides",[262,267,271,275,280,285,290,294,298],{"title":263,"path":264,"stem":265,"icon":266},"Guide - Authentication Flow & Sessions","\u002Fbooki-documentation\u002Fguides\u002Fguides-auth-flow","3.booki-documentation\u002Fguides\u002Fguides-auth-flow","i-lucide-lock",{"title":268,"path":269,"stem":270,"icon":177},"Guide - Branch Management","\u002Fbooki-documentation\u002Fguides\u002Fguides-branch-management","3.booki-documentation\u002Fguides\u002Fguides-branch-management",{"title":272,"path":273,"stem":274,"icon":196},"Guide - Customer Payment Methods","\u002Fbooki-documentation\u002Fguides\u002Fguides-customer-payments","3.booki-documentation\u002Fguides\u002Fguides-customer-payments",{"title":276,"path":277,"stem":278,"icon":279},"Guide - Environment Setup","\u002Fbooki-documentation\u002Fguides\u002Fguides-environment-setup","3.booki-documentation\u002Fguides\u002Fguides-environment-setup","i-lucide-settings",{"title":281,"path":282,"stem":283,"icon":284},"Guide - Common Error Responses","\u002Fbooki-documentation\u002Fguides\u002Fguides-errors","3.booki-documentation\u002Fguides\u002Fguides-errors","i-lucide-alert-circle",{"title":286,"path":287,"stem":288,"icon":289},"Guide - Gmail SMTP Setup","\u002Fbooki-documentation\u002Fguides\u002Fguides-gmail-setup","3.booki-documentation\u002Fguides\u002Fguides-gmail-setup","i-lucide-mail",{"title":291,"path":292,"stem":293,"icon":124},"Guide - Multi-Tenancy & Tenant Slug Resolution","\u002Fbooki-documentation\u002Fguides\u002Fguides-multi-tenancy","3.booki-documentation\u002Fguides\u002Fguides-multi-tenancy",{"title":295,"path":296,"stem":297,"icon":48},"Guide - Redis Caching","\u002Fbooki-documentation\u002Fguides\u002Fguides-redis","3.booki-documentation\u002Fguides\u002Fguides-redis",{"title":299,"path":300,"stem":301,"icon":302},"Guide - Subscription Billing","\u002Fbooki-documentation\u002Fguides\u002Fguides-subscription-billing","3.booki-documentation\u002Fguides\u002Fguides-subscription-billing","i-lucide-receipt",{"id":304,"title":136,"body":305,"description":1079,"extension":1080,"links":1081,"meta":1082,"navigation":1083,"path":137,"seo":1084,"stem":138,"__hash__":1085},"docs\u002F3.booki-documentation\u002F3.api\u002F1.booki-api.md",{"type":306,"value":307,"toc":1058},"minimark",[308,313,346,351,423,427,442,554,564,595,605,609,619,664,675,681,780,784,872,876,882,906,912,941,947,988,994,1017,1021,1040,1043,1054],[309,310,312],"h2",{"id":311},"quick-start","Quick Start",[314,315,316,320,321,325,328,331,332,335,336,338,341,342,345],"p",{},[317,318,319],"strong",{},"Base path:"," ",[322,323,324],"code",{},"\u002Fapi\u002Fv1\u002F...",[326,327],"br",{},[317,329,330],{},"Environment:"," Subdomain-based multi-tenancy (e.g., ",[322,333,334],{},"acme.booki.app",")",[326,337],{},[317,339,340],{},"Auth:"," Bearer token via ",[322,343,344],{},"Authorization: Bearer \u003CaccessToken>"," header",[347,348,350],"h3",{"id":349},"key-concepts","Key Concepts",[352,353,354,373,395,411,417],"ul",{},[355,356,357,360,361,364,365,368,369,372],"li",{},[317,358,359],{},"Tenant resolution:"," The Nuxt frontend auto-injects ",[322,362,363],{},"x-tenant-slug"," on every API request via the shared ",[322,366,367],{},"$api"," plugin (extracted from the subdomain). For direct\u002Fcurl usage, pass ",[322,370,371],{},"X-Tenant-Slug: \u003Cslug>"," manually.",[355,374,375,320,378,381,382,381,385,381,388,381,391,394],{},[317,376,377],{},"User types:",[322,379,380],{},"admin",", ",[322,383,384],{},"owner",[322,386,387],{},"branch-manager",[322,389,390],{},"customer",[322,392,393],{},"guest",". Different endpoints and roles apply.",[355,396,397,400,401,404,405,407,408,410],{},[317,398,399],{},"Multi-tenancy:"," All data scoped by ",[322,402,403],{},"organizationId",". For authenticated users, ",[322,406,403],{}," comes from the JWT token (set at login). For public endpoints, it is resolved by the tenant middleware from ",[322,409,363],{}," or subdomain.",[355,412,413,416],{},[317,414,415],{},"OTP flows:"," Owner registration uses a 3-step OTP flow. Customer registration is direct (no OTP).",[355,418,419,422],{},[317,420,421],{},"Payment:"," Maya payment gateway integration (webhooks, checkout sessions).",[347,424,426],{"id":425},"how-the-frontend-sends-the-tenant-slug","How the Frontend Sends the Tenant Slug",[314,428,429,430,432,433,435,436,320,439,441],{},"The shared ",[322,431,367],{}," plugin (from ",[322,434,241],{},") ",[317,437,438],{},"automatically injects",[322,440,363],{}," on every request:",[443,444,449],"pre",{"className":445,"code":446,"language":447,"meta":448,"style":448},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F codi-layer\u002Fapp\u002Fplugins\u002Fapi.ts\nconst tenantSlug = useTenant()?.value?.slug;\nif (tenantSlug) {\n  options.headers.set(\"x-tenant-slug\", tenantSlug);\n}\n","ts","",[322,450,451,460,496,509,548],{"__ignoreMap":448},[452,453,456],"span",{"class":454,"line":455},"line",1,[452,457,459],{"class":458},"sHwdD","\u002F\u002F codi-layer\u002Fapp\u002Fplugins\u002Fapi.ts\n",[452,461,463,467,471,475,479,482,485,488,490,493],{"class":454,"line":462},2,[452,464,466],{"class":465},"spNyl","const",[452,468,470],{"class":469},"sTEyZ"," tenantSlug ",[452,472,474],{"class":473},"sMK4o","=",[452,476,478],{"class":477},"s2Zo4"," useTenant",[452,480,481],{"class":469},"()",[452,483,484],{"class":473},"?.",[452,486,487],{"class":469},"value",[452,489,484],{"class":473},[452,491,492],{"class":469},"slug",[452,494,495],{"class":473},";\n",[452,497,499,503,506],{"class":454,"line":498},3,[452,500,502],{"class":501},"s7zQu","if",[452,504,505],{"class":469}," (tenantSlug) ",[452,507,508],{"class":473},"{\n",[452,510,512,515,518,521,523,526,530,533,536,538,541,544,546],{"class":454,"line":511},4,[452,513,514],{"class":469},"  options",[452,516,517],{"class":473},".",[452,519,520],{"class":469},"headers",[452,522,517],{"class":473},[452,524,525],{"class":477},"set",[452,527,529],{"class":528},"swJcz","(",[452,531,532],{"class":473},"\"",[452,534,363],{"class":535},"sfazB",[452,537,532],{"class":473},[452,539,540],{"class":473},",",[452,542,543],{"class":469}," tenantSlug",[452,545,335],{"class":528},[452,547,495],{"class":473},[452,549,551],{"class":454,"line":550},5,[452,552,553],{"class":473},"}\n",[314,555,556,559,560,563],{},[322,557,558],{},"useTenant()"," extracts the first subdomain from ",[322,561,562],{},"window.location.hostname",":",[352,565,566,576,586],{},[355,567,568,571,572,575],{},[322,569,570],{},"janes-salon.booki.app"," → ",[322,573,574],{},"{ slug: \"janes-salon\" }"," → header sent automatically",[355,577,578,581,582,585],{},[322,579,580],{},"owner.booki.app"," → no subdomain match → header ",[317,583,584],{},"not"," sent (owner app uses JWT)",[355,587,588,591,592,594],{},[322,589,590],{},"admin.booki.app"," → no tenant context → header ",[317,593,584],{}," sent",[314,596,597,598,601,602,604],{},"For ",[322,599,600],{},"customer-booki-web-app",", the Nitro server middleware also injects ",[322,603,363],{}," into proxied request headers server-side.",[347,606,608],{"id":607},"tenant-resolution-priority-backend","Tenant Resolution Priority (Backend)",[314,610,611,612,615,616,618],{},"The ",[322,613,614],{},"resolveTenant"," middleware resolves ",[322,617,403],{}," in this order:",[620,621,622,630,638,647],"ol",{},[355,623,624,629],{},[317,625,626,627],{},"Authenticated user's ",[322,628,403],{}," (from JWT token, if logged in)",[355,631,632],{},[317,633,634,637],{},[322,635,636],{},"?organizationId"," query parameter",[355,639,640,646],{},[317,641,642,645],{},[322,643,644],{},":organizationId"," route parameter"," — direct ID from URL, no DB lookup",[355,648,649,652,653,655,656,659,660,663],{},[317,650,651],{},"Slug from request"," — checked in order: ",[322,654,363],{}," header → ",[322,657,658],{},"?slug"," query param → ",[322,661,662],{},":slug"," route param",[665,666,667],"blockquote",{},[314,668,669,670,517],{},"For a deeper dive, see the ",[671,672,674],"a",{"href":673},"..\u002Fguides\u002Fguides-multi-tenancy","Multi-Tenancy Guide",[347,676,678,680],{"id":677},"organizationid-sources",[322,679,403],{}," Sources",[682,683,684,700],"table",{},[685,686,687],"thead",{},[688,689,690,694,697],"tr",{},[691,692,693],"th",{},"Context",[691,695,696],{},"Source",[691,698,699],{},"How",[701,702,703,721,740,762],"tbody",{},[688,704,705,709,718],{},[706,707,708],"td",{},"Authenticated requests (owner, branch-manager, customer)",[706,710,711,714,715,335],{},[317,712,713],{},"JWT token"," (",[322,716,717],{},"req.user.organizationId",[706,719,720],{},"Embedded at login\u002Fregistration — no header needed",[688,722,723,726,734],{},[706,724,725],{},"Public \u002F guest requests",[706,727,728,714,731,733],{},[317,729,730],{},"Tenant middleware",[322,732,363],{}," header or subdomain)",[706,735,736,737,739],{},"Resolved via ",[322,738,363],{}," → org lookup in DB",[688,741,742,748,756],{},[706,743,744,745,747],{},"Routes with ",[322,746,644],{}," path param",[706,749,750,714,753,335],{},[317,751,752],{},"Route parameter",[322,754,755],{},"req.params.organizationId",[706,757,758,759,335],{},"Direct ID in URL — no DB lookup (e.g. ",[322,760,761],{},"POST \u002Fbookings\u002Forganizations\u002F:organizationId\u002F...",[688,763,764,769,774],{},[706,765,766],{},[322,767,768],{},"POST \u002Fapi\u002Fv1\u002Fauth\u002Flogin",[706,770,771],{},[317,772,773],{},"Optional tenant",[706,775,776,777,779],{},"If ",[322,778,363],{}," present → scoped login; if absent → owner\u002Fadmin global login",[309,781,783],{"id":782},"user-type-access-overview","User Type Access Overview",[682,785,786,802],{},[685,787,788],{},[688,789,790,793,796,799],{},[691,791,792],{},"App",[691,794,795],{},"User Type",[691,797,798],{},"Role(s)",[691,800,801],{},"API Sections",[701,803,804,820,836,855],{},[688,805,806,811,814,817],{},[706,807,808],{},[322,809,810],{},"cms-booki-web-app",[706,812,813],{},"Guest \u002F Public",[706,815,816],{},"—",[706,818,819],{},"Auth (register owner), Tenant, Bookings (public), Packages (public), Business Hours (public), Services",[688,821,822,826,829,833],{},[706,823,824],{},[322,825,600],{},[706,827,828],{},"Customer",[706,830,831],{},[322,832,390],{},[706,834,835],{},"Auth (login, register customer), Bookings (authenticated), Users (profile), Maya (checkout), User Payment Methods",[688,837,838,843,846,852],{},[706,839,840],{},[322,841,842],{},"owner-booki-web-app",[706,844,845],{},"Owner \u002F Branch Manager",[706,847,848,381,850],{},[322,849,384],{},[322,851,387],{},[706,853,854],{},"Auth (login), Organizations, Branches, Packages, Business Hours (owner), Owner Bookings, Owner Customers, Maya (webhook), Integrations, Subscription",[688,856,857,862,865,869],{},[706,858,859],{},[322,860,861],{},"admin-booki-web-app",[706,863,864],{},"Admin",[706,866,867],{},[322,868,380],{},[706,870,871],{},"Auth (login), Admin Billing, Admin Organizations, User Management",[309,873,875],{"id":874},"api-modules","API Modules",[347,877,879,880],{"id":878},"guest-public-cms-booki-web-app","Guest \u002F Public — ",[322,881,810],{},[352,883,884,890,895,901],{},[355,885,886],{},[671,887,889],{"href":888},".\u002Forganizations","Organizations - Tenant Lookup",[355,891,892],{},[671,893,164],{"href":894},".\u002Fbookings-public",[355,896,897],{},[671,898,900],{"href":899},".\u002Fbooking-services","Services & Contact Form",[355,902,903],{},[671,904,150],{"href":905},".\u002Fauth-owner-register",[347,907,909,910],{"id":908},"customer-customer-booki-web-app","Customer — ",[322,911,600],{},[352,913,914,920,925,930,935],{},[355,915,916],{},[671,917,919],{"href":918},".\u002Fauth","Auth - Login, Refresh & Logout",[355,921,922],{},[671,923,145],{"href":924},".\u002Fauth-customer-register",[355,926,927],{},[671,928,160],{"href":929},".\u002Fbookings-auth",[355,931,932],{},[671,933,198],{"href":934},".\u002Fusers",[355,936,937],{},[671,938,940],{"href":939},".\u002Fmaya","Maya - Checkout",[347,942,944,945],{"id":943},"owner-branch-manager-owner-booki-web-app","Owner \u002F Branch Manager — ",[322,946,842],{},[352,948,949,953,957,962,967,972,977,983],{},[355,950,951],{},[671,952,919],{"href":918},[355,954,955],{},[671,956,184],{"href":888},[355,958,959],{},[671,960,174],{"href":961},".\u002Fbranches",[355,963,964],{},[671,965,189],{"href":966},".\u002Fpackages",[355,968,969],{},[671,970,179],{"href":971},".\u002Fbusiness-hours",[355,973,974],{},[671,975,193],{"href":976},".\u002Fpayments",[355,978,979],{},[671,980,982],{"href":981},".\u002Fowner-bookings","Owner - Bookings Management",[355,984,985],{},[671,986,212],{"href":987},".\u002Fowner-customers",[347,989,991,992],{"id":990},"admin-admin-booki-web-app","Admin — ",[322,993,861],{},[352,995,996,1000,1006,1012],{},[355,997,998],{},[671,999,919],{"href":918},[355,1001,1002],{},[671,1003,1005],{"href":1004},".\u002Fadmin-billing","Admin - Billing & Invoices",[355,1007,1008],{},[671,1009,1011],{"href":1010},".\u002Fadmin-organizations","Admin - Organizations",[355,1013,1014],{},[671,1015,225],{"href":1016},".\u002Fadmin-users",[309,1018,1020],{"id":1019},"guides-patterns","Guides & Patterns",[352,1022,1023,1028,1034],{},[355,1024,1025],{},[671,1026,1027],{"href":673},"Multi-Tenancy & Tenant Slug Resolution",[355,1029,1030],{},[671,1031,1033],{"href":1032},"..\u002Fguides\u002Fguides-auth-flow","Authentication Flow & Cookie Lifecycle",[355,1035,1036],{},[671,1037,1039],{"href":1038},"..\u002Fguides\u002Fguides-errors","Common Error Responses",[1041,1042],"hr",{},[314,1044,1045,1048,1050,1051,517],{},[317,1046,1047],{},"All pages include real request payloads, response examples, and curl commands.",[326,1049],{},"\nFor exact validation rules, see ",[322,1052,1053],{},"booki-api\u002Fsrc\u002Fvalidations\u002F",[1055,1056,1057],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":448,"searchDepth":455,"depth":462,"links":1059},[1060,1067,1068,1078],{"id":311,"depth":462,"text":312,"children":1061},[1062,1063,1064,1065],{"id":349,"depth":498,"text":350},{"id":425,"depth":498,"text":426},{"id":607,"depth":498,"text":608},{"id":677,"depth":498,"text":1066},"organizationId Sources",{"id":782,"depth":462,"text":783},{"id":874,"depth":462,"text":875,"children":1069},[1070,1072,1074,1076],{"id":878,"depth":498,"text":1071},"Guest \u002F Public — cms-booki-web-app",{"id":908,"depth":498,"text":1073},"Customer — customer-booki-web-app",{"id":943,"depth":498,"text":1075},"Owner \u002F Branch Manager — owner-booki-web-app",{"id":990,"depth":498,"text":1077},"Admin — admin-booki-web-app",{"id":1019,"depth":462,"text":1020},"Complete REST API reference for Booki. Base path \u002Fapi\u002Fv1 with real payloads, responses, and multi-tenant flows.","md",null,{},{"icon":57},{"title":136,"description":1079},"tZw754M5PeBLSHAa9PrlrzmoUP6k-wsh8A-bDU5TbE0",[1087,1089],{"title":126,"path":127,"stem":128,"description":1088,"icon":129,"children":-1},"Local dev URL patterns for each Booki app, *.localhost subdomain setup, and branch slug routing.",{"title":140,"path":141,"stem":142,"description":1090,"icon":143,"children":-1},"Login, logout, and token refresh endpoints with real payloads and responses.",1777787842938]