[{"data":1,"prerenderedAt":1041},["ShallowReactive",2],{"navigation":3,"\u002Fbooki-documentation\u002Fapi\u002Fauth-customer-register":303,"\u002Fbooki-documentation\u002Fapi\u002Fauth-customer-register-surround":1036},[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":145,"body":305,"description":1029,"extension":1030,"links":1031,"meta":1032,"navigation":1033,"path":146,"seo":1034,"stem":147,"__hash__":1035},"docs\u002F3.booki-documentation\u002F3.api\u002F2.auth-customer-register.md",{"type":306,"value":307,"toc":1019},"minimark",[308,316,323,332,371,377,382,543,548,556,562,565,599,603,634,640,644,650,697,703,748,753,797,801,806,896,901,983,986,990,1015],[309,310,311,312],"p",{},"Base path: ",[313,314,315],"code",{},"\u002Fapi\u002Fv1\u002Fauth",[309,317,318,319,322],{},"Customer registration is simpler than owner registration—no OTP needed. A customer is automatically scoped to a tenant (organization) via subdomain or ",[313,320,321],{},"x-tenant-slug"," header.",[324,325,327,328,331],"h2",{"id":326},"post-apiv1authregistercustomer-create-customer-account","POST ",[313,329,330],{},"\u002Fapi\u002Fv1\u002Fauth\u002Fregister\u002Fcustomer"," — Create Customer Account",[309,333,334,338,339,342,343,346,349,350,353,354,357,358,360,363,364,366,367,370],{},[335,336,337],"strong",{},"Auth:"," Public (",[313,340,341],{},"resolveRequiredTenant",")",[344,345],"br",{},[335,347,348],{},"Used by:"," ",[313,351,352],{},"customer-booki-web-app"," · ",[335,355,356],{},"Role:"," guest (unauthenticated)",[344,359],{},[335,361,362],{},"organizationId:"," Resolved by tenant middleware — from ",[313,365,321],{}," header (auto-injected by the Nuxt ",[313,368,369],{},"$api"," plugin from the subdomain). The created customer account is permanently scoped to this organization.",[309,372,373,376],{},[335,374,375],{},"Description:"," Register a new customer for the business. Automatically scoped to the tenant organization.",[378,379,381],"h3",{"id":380},"request","Request",[383,384,389],"pre",{"className":385,"code":386,"language":387,"meta":388,"style":388},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"firstName\": \"John\",\n  \"middleName\": \"Cruz\", \u002F\u002F (optional)\n  \"lastName\": \"Smith\",\n  \"email\": \"john@example.com\",\n  \"phone\": \"09161234567\",\n  \"password\": \"CustomerP@ss123\"\n}\n","json","",[313,390,391,400,428,454,475,496,517,537],{"__ignoreMap":388},[392,393,396],"span",{"class":394,"line":395},"line",1,[392,397,399],{"class":398},"sMK4o","{\n",[392,401,403,406,410,413,416,419,423,425],{"class":394,"line":402},2,[392,404,405],{"class":398},"  \"",[392,407,409],{"class":408},"spNyl","firstName",[392,411,412],{"class":398},"\"",[392,414,415],{"class":398},":",[392,417,418],{"class":398}," \"",[392,420,422],{"class":421},"sfazB","John",[392,424,412],{"class":398},[392,426,427],{"class":398},",\n",[392,429,431,433,436,438,440,442,445,447,450],{"class":394,"line":430},3,[392,432,405],{"class":398},[392,434,435],{"class":408},"middleName",[392,437,412],{"class":398},[392,439,415],{"class":398},[392,441,418],{"class":398},[392,443,444],{"class":421},"Cruz",[392,446,412],{"class":398},[392,448,449],{"class":398},",",[392,451,453],{"class":452},"sHwdD"," \u002F\u002F (optional)\n",[392,455,457,459,462,464,466,468,471,473],{"class":394,"line":456},4,[392,458,405],{"class":398},[392,460,461],{"class":408},"lastName",[392,463,412],{"class":398},[392,465,415],{"class":398},[392,467,418],{"class":398},[392,469,470],{"class":421},"Smith",[392,472,412],{"class":398},[392,474,427],{"class":398},[392,476,478,480,483,485,487,489,492,494],{"class":394,"line":477},5,[392,479,405],{"class":398},[392,481,482],{"class":408},"email",[392,484,412],{"class":398},[392,486,415],{"class":398},[392,488,418],{"class":398},[392,490,491],{"class":421},"john@example.com",[392,493,412],{"class":398},[392,495,427],{"class":398},[392,497,499,501,504,506,508,510,513,515],{"class":394,"line":498},6,[392,500,405],{"class":398},[392,502,503],{"class":408},"phone",[392,505,412],{"class":398},[392,507,415],{"class":398},[392,509,418],{"class":398},[392,511,512],{"class":421},"09161234567",[392,514,412],{"class":398},[392,516,427],{"class":398},[392,518,520,522,525,527,529,531,534],{"class":394,"line":519},7,[392,521,405],{"class":398},[392,523,524],{"class":408},"password",[392,526,412],{"class":398},[392,528,415],{"class":398},[392,530,418],{"class":398},[392,532,533],{"class":421},"CustomerP@ss123",[392,535,536],{"class":398},"\"\n",[392,538,540],{"class":394,"line":539},8,[392,541,542],{"class":398},"}\n",[309,544,545],{},[335,546,547],{},"Headers (required):",[383,549,554],{"className":550,"code":552,"language":553},[551],"language-text","X-Tenant-Slug: janes-salon\n","text",[313,555,552],{"__ignoreMap":388},[309,557,558,559],{},"OR access via subdomain: ",[313,560,561],{},"https:\u002F\u002Fjanes-salon.booki.app\u002Fapi\u002Fv1\u002Fauth\u002Fregister\u002Fcustomer",[309,563,564],{},"Fields:",[566,567,568,574,579,584,589,594],"ul",{},[569,570,571,573],"li",{},[313,572,409],{}," (string, required): First name (max 255 chars)",[569,575,576,578],{},[313,577,435],{}," (string, optional): Middle name (max 255 chars)",[569,580,581,583],{},[313,582,461],{}," (string, required): Last name (max 255 chars)",[569,585,586,588],{},[313,587,482],{}," (string, required): Valid email address (lowercase)",[569,590,591,593],{},[313,592,503],{}," (string, required): Phone number (10-20 chars)",[569,595,596,598],{},[313,597,524],{}," (string, required): Min 8 chars, uppercase + lowercase + number + special char",[378,600,602],{"id":601},"response-201-created","Response (201 Created)",[383,604,606],{"className":385,"code":605,"language":387,"meta":388,"style":388},"{\n  \"message\": \"Customer created successfully.\"\n}\n",[313,607,608,612,630],{"__ignoreMap":388},[392,609,610],{"class":394,"line":395},[392,611,399],{"class":398},[392,613,614,616,619,621,623,625,628],{"class":394,"line":402},[392,615,405],{"class":398},[392,617,618],{"class":408},"message",[392,620,412],{"class":398},[392,622,415],{"class":398},[392,624,418],{"class":398},[392,626,627],{"class":421},"Customer created successfully.",[392,629,536],{"class":398},[392,631,632],{"class":394,"line":430},[392,633,542],{"class":398},[635,636,637],"blockquote",{},[309,638,639],{},"After registration, the customer can log in to receive tokens. All subsequent authenticated requests from this customer are automatically scoped to that organization.",[378,641,643],{"id":642},"error-responses","Error Responses",[309,645,646,649],{},[335,647,648],{},"422 Unprocessable Entity"," — Missing or unresolvable tenant:",[383,651,653],{"className":385,"code":652,"language":387,"meta":388,"style":388},"{\n  \"statusCode\": 422,\n  \"message\": \"Organization could not be determined. Please ensure you access via a valid subdomain.\"\n}\n",[313,654,655,659,676,693],{"__ignoreMap":388},[392,656,657],{"class":394,"line":395},[392,658,399],{"class":398},[392,660,661,663,666,668,670,674],{"class":394,"line":402},[392,662,405],{"class":398},[392,664,665],{"class":408},"statusCode",[392,667,412],{"class":398},[392,669,415],{"class":398},[392,671,673],{"class":672},"sbssI"," 422",[392,675,427],{"class":398},[392,677,678,680,682,684,686,688,691],{"class":394,"line":430},[392,679,405],{"class":398},[392,681,618],{"class":408},[392,683,412],{"class":398},[392,685,415],{"class":398},[392,687,418],{"class":398},[392,689,690],{"class":421},"Organization could not be determined. Please ensure you access via a valid subdomain.",[392,692,536],{"class":398},[392,694,695],{"class":394,"line":456},[392,696,542],{"class":398},[309,698,699,702],{},[335,700,701],{},"400 Bad Request"," — Email already registered:",[383,704,706],{"className":385,"code":705,"language":387,"meta":388,"style":388},"{\n  \"statusCode\": 400,\n  \"message\": \"Email john@example.com is already registered\"\n}\n",[313,707,708,712,727,744],{"__ignoreMap":388},[392,709,710],{"class":394,"line":395},[392,711,399],{"class":398},[392,713,714,716,718,720,722,725],{"class":394,"line":402},[392,715,405],{"class":398},[392,717,665],{"class":408},[392,719,412],{"class":398},[392,721,415],{"class":398},[392,723,724],{"class":672}," 400",[392,726,427],{"class":398},[392,728,729,731,733,735,737,739,742],{"class":394,"line":430},[392,730,405],{"class":398},[392,732,618],{"class":408},[392,734,412],{"class":398},[392,736,415],{"class":398},[392,738,418],{"class":398},[392,740,741],{"class":421},"Email john@example.com is already registered",[392,743,536],{"class":398},[392,745,746],{"class":394,"line":456},[392,747,542],{"class":398},[309,749,750,752],{},[335,751,648],{}," — Weak password:",[383,754,756],{"className":385,"code":755,"language":387,"meta":388,"style":388},"{\n  \"statusCode\": 422,\n  \"message\": \"Password must contain at least one uppercase letter, one lowercase letter, one number, and one special character\"\n}\n",[313,757,758,762,776,793],{"__ignoreMap":388},[392,759,760],{"class":394,"line":395},[392,761,399],{"class":398},[392,763,764,766,768,770,772,774],{"class":394,"line":402},[392,765,405],{"class":398},[392,767,665],{"class":408},[392,769,412],{"class":398},[392,771,415],{"class":398},[392,773,673],{"class":672},[392,775,427],{"class":398},[392,777,778,780,782,784,786,788,791],{"class":394,"line":430},[392,779,405],{"class":398},[392,781,618],{"class":408},[392,783,412],{"class":398},[392,785,415],{"class":398},[392,787,418],{"class":398},[392,789,790],{"class":421},"Password must contain at least one uppercase letter, one lowercase letter, one number, and one special character",[392,792,536],{"class":398},[392,794,795],{"class":394,"line":456},[392,796,542],{"class":398},[378,798,800],{"id":799},"curl-examples","cURL Examples",[309,802,803],{},[335,804,805],{},"Via subdomain:",[383,807,811],{"className":808,"code":809,"language":810,"meta":388,"style":388},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -X POST https:\u002F\u002Fjanes-salon.booki.app\u002Fapi\u002Fv1\u002Fauth\u002Fregister\u002Fcustomer \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"firstName\": \"John\",\n    \"middleName\": \"Cruz\",\n    \"lastName\": \"Smith\",\n    \"email\": \"john@example.com\",\n    \"phone\": \"09161234567\",\n    \"password\": \"CustomerP@ss123\"\n  }'\n","bash",[313,812,813,832,846,856,861,866,871,876,881,887],{"__ignoreMap":388},[392,814,815,819,822,825,828],{"class":394,"line":395},[392,816,818],{"class":817},"sBMFI","curl",[392,820,821],{"class":421}," -X",[392,823,824],{"class":421}," POST",[392,826,827],{"class":421}," https:\u002F\u002Fjanes-salon.booki.app\u002Fapi\u002Fv1\u002Fauth\u002Fregister\u002Fcustomer",[392,829,831],{"class":830},"sTEyZ"," \\\n",[392,833,834,837,839,842,844],{"class":394,"line":402},[392,835,836],{"class":421},"  -H",[392,838,418],{"class":398},[392,840,841],{"class":421},"Content-Type: application\u002Fjson",[392,843,412],{"class":398},[392,845,831],{"class":830},[392,847,848,851,854],{"class":394,"line":430},[392,849,850],{"class":421},"  -d",[392,852,853],{"class":398}," '",[392,855,399],{"class":421},[392,857,858],{"class":394,"line":456},[392,859,860],{"class":421},"    \"firstName\": \"John\",\n",[392,862,863],{"class":394,"line":477},[392,864,865],{"class":421},"    \"middleName\": \"Cruz\",\n",[392,867,868],{"class":394,"line":498},[392,869,870],{"class":421},"    \"lastName\": \"Smith\",\n",[392,872,873],{"class":394,"line":519},[392,874,875],{"class":421},"    \"email\": \"john@example.com\",\n",[392,877,878],{"class":394,"line":539},[392,879,880],{"class":421},"    \"phone\": \"09161234567\",\n",[392,882,884],{"class":394,"line":883},9,[392,885,886],{"class":421},"    \"password\": \"CustomerP@ss123\"\n",[392,888,890,893],{"class":394,"line":889},10,[392,891,892],{"class":421},"  }",[392,894,895],{"class":398},"'\n",[309,897,898],{},[335,899,900],{},"Via header (localhost development):",[383,902,904],{"className":808,"code":903,"language":810,"meta":388,"style":388},"curl -X POST http:\u002F\u002Flocalhost:4001\u002Fapi\u002Fv1\u002Fauth\u002Fregister\u002Fcustomer \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"X-Tenant-Slug: janes-salon\" \\\n  -d '{\n    \"firstName\": \"John\",\n    \"middleName\": \"Cruz\",\n    \"lastName\": \"Smith\",\n    \"email\": \"john@example.com\",\n    \"phone\": \"09161234567\",\n    \"password\": \"CustomerP@ss123\"\n  }'\n",[313,905,906,919,931,944,952,956,960,964,968,972,976],{"__ignoreMap":388},[392,907,908,910,912,914,917],{"class":394,"line":395},[392,909,818],{"class":817},[392,911,821],{"class":421},[392,913,824],{"class":421},[392,915,916],{"class":421}," http:\u002F\u002Flocalhost:4001\u002Fapi\u002Fv1\u002Fauth\u002Fregister\u002Fcustomer",[392,918,831],{"class":830},[392,920,921,923,925,927,929],{"class":394,"line":402},[392,922,836],{"class":421},[392,924,418],{"class":398},[392,926,841],{"class":421},[392,928,412],{"class":398},[392,930,831],{"class":830},[392,932,933,935,937,940,942],{"class":394,"line":430},[392,934,836],{"class":421},[392,936,418],{"class":398},[392,938,939],{"class":421},"X-Tenant-Slug: janes-salon",[392,941,412],{"class":398},[392,943,831],{"class":830},[392,945,946,948,950],{"class":394,"line":456},[392,947,850],{"class":421},[392,949,853],{"class":398},[392,951,399],{"class":421},[392,953,954],{"class":394,"line":477},[392,955,860],{"class":421},[392,957,958],{"class":394,"line":498},[392,959,865],{"class":421},[392,961,962],{"class":394,"line":519},[392,963,870],{"class":421},[392,965,966],{"class":394,"line":539},[392,967,875],{"class":421},[392,969,970],{"class":394,"line":883},[392,971,880],{"class":421},[392,973,974],{"class":394,"line":889},[392,975,886],{"class":421},[392,977,979,981],{"class":394,"line":978},11,[392,980,892],{"class":421},[392,982,895],{"class":398},[984,985],"hr",{},[324,987,989],{"id":988},"notes","Notes",[566,991,992,999,1002,1005,1012],{},[569,993,994,995,998],{},"Customer accounts are ",[335,996,997],{},"automatically scoped to the tenant"," (organization) via subdomain or header.",[569,1000,1001],{},"Password complexity is required (uppercase + lowercase + number + special character).",[569,1003,1004],{},"Once registered, the customer can immediately book services and login.",[569,1006,1007,1008,1011],{},"Customers are created with ",[313,1009,1010],{},"ACTIVE"," status.",[569,1013,1014],{},"See multi-tenancy guide for details on tenant resolution.",[1016,1017,1018],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":388,"searchDepth":395,"depth":402,"links":1020},[1021,1028],{"id":326,"depth":402,"text":1022,"children":1023},"POST \u002Fapi\u002Fv1\u002Fauth\u002Fregister\u002Fcustomer — Create Customer Account",[1024,1025,1026,1027],{"id":380,"depth":430,"text":381},{"id":601,"depth":430,"text":602},{"id":642,"depth":430,"text":643},{"id":799,"depth":430,"text":800},{"id":988,"depth":402,"text":989},"Customer registration for tenant-scoped bookings (no OTP required).","md",null,{},{"icon":148},{"title":145,"description":1029},"atr87itq_ZNCuJs1EL9YhwO8MMxpMnbLc1Xd4wGOP_Y",[1037,1039],{"title":140,"path":141,"stem":142,"description":1038,"icon":143,"children":-1},"Login, logout, and token refresh endpoints with real payloads and responses.",{"title":150,"path":151,"stem":152,"description":1040,"icon":153,"children":-1},"Owner registration flow with OTP verification and business details.",1777787844708]