[{"data":1,"prerenderedAt":712},["ShallowReactive",2],{"navigation:en":3,"\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fcloudflare-access:en":311},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Nuxfire Docs","\u002Fdocs","docs\u002F0.index",[9,11,152],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-layout-grid",{"title":12,"path":13,"stem":14,"children":15,"icon":151},"SaaS Starter Kit","\u002Fdocs\u002Fsaas-starter-kit","docs\u002F1.saas-starter-kit\u002F0.index",[16,19,63,129],{"title":17,"path":13,"stem":14,"icon":18},"What is the SaaS Starter Kit?","i-lucide-info",{"title":20,"icon":21,"hide":22,"path":23,"stem":24,"children":25,"page":62},"Getting Started","i-lucide-play",true,"\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started","docs\u002F1.saas-starter-kit\u002F1.getting-started",[26,30,34,38,42,46,50,54,58],{"title":27,"path":28,"stem":29},"Quick Start","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fquick-start","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F0.quick-start",{"title":31,"path":32,"stem":33},"Installation","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Finstallation","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F1.installation",{"title":35,"path":36,"stem":37},"Cloudflare Access","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fcloudflare-access","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F2.cloudflare-access",{"title":39,"path":40,"stem":41},"Configuration","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fconfiguration","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F3.configuration",{"title":43,"path":44,"stem":45},"Secrets","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fsecrets","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F4.secrets",{"title":47,"path":48,"stem":49},"Environment Variables","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fenvironment-variables","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F5.environment-variables",{"title":51,"path":52,"stem":53},"Deploy","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fdeploy","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F6.deploy",{"title":55,"path":56,"stem":57},"Local Development","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Flocal-development","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F7.local-development",{"title":59,"path":60,"stem":61},"Project Structure","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fproject-structure","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F8.project-structure",false,{"title":64,"icon":65,"hide":22,"path":66,"stem":67,"children":68,"page":62},"Features","i-lucide-box","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures","docs\u002F1.saas-starter-kit\u002F2.features",[69,73,77,81,85,89,93,97,101,105,109,113,117,121,125],{"title":70,"path":71,"stem":72},"Authentication","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fauth","docs\u002F1.saas-starter-kit\u002F2.features\u002F1.auth",{"title":74,"path":75,"stem":76},"Rate Limiting","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Frate-limiting","docs\u002F1.saas-starter-kit\u002F2.features\u002F10.rate-limiting",{"title":78,"path":79,"stem":80},"WebSockets","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fwebsockets","docs\u002F1.saas-starter-kit\u002F2.features\u002F11.websockets",{"title":82,"path":83,"stem":84},"Blog","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fblog","docs\u002F1.saas-starter-kit\u002F2.features\u002F14.blog",{"title":86,"path":87,"stem":88},"Documentation","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fdocumentation","docs\u002F1.saas-starter-kit\u002F2.features\u002F15.documentation",{"title":90,"path":91,"stem":92},"Analytics","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fanalytics","docs\u002F1.saas-starter-kit\u002F2.features\u002F16.analytics",{"title":94,"path":95,"stem":96},"Platform Admin Console","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fplatform-admin","docs\u002F1.saas-starter-kit\u002F2.features\u002F17.platform-admin",{"title":98,"path":99,"stem":100},"Database","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fdatabase","docs\u002F1.saas-starter-kit\u002F2.features\u002F2.database",{"title":102,"path":103,"stem":104},"Payments & Billing","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fpayments","docs\u002F1.saas-starter-kit\u002F2.features\u002F3.payments",{"title":106,"path":107,"stem":108},"Emails","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Femails","docs\u002F1.saas-starter-kit\u002F2.features\u002F4.emails",{"title":110,"path":111,"stem":112},"Notifications","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fnotifications","docs\u002F1.saas-starter-kit\u002F2.features\u002F5.notifications",{"title":114,"path":115,"stem":116},"Role-Based Access Control","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Frbac","docs\u002F1.saas-starter-kit\u002F2.features\u002F6.rbac",{"title":118,"path":119,"stem":120},"Async Jobs","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fasync-jobs","docs\u002F1.saas-starter-kit\u002F2.features\u002F7.async-jobs",{"title":122,"path":123,"stem":124},"Storage","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fstorage","docs\u002F1.saas-starter-kit\u002F2.features\u002F8.storage",{"title":126,"path":127,"stem":128},"Internationalization","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Finternationalization","docs\u002F1.saas-starter-kit\u002F2.features\u002F9.internationalization",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":62},"Concepts","i-lucide-graduation-cap","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts","docs\u002F1.saas-starter-kit\u002F3.concepts",[135,139,143,147],{"title":136,"path":137,"stem":138},"Technology Stack","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Ftech-stack","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F0.tech-stack",{"title":140,"path":141,"stem":142},"SST.dev","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fsst","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F1.sst",{"title":144,"path":145,"stem":146},"NuxtHub","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fnuxt-hub","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F2.nuxt-hub",{"title":148,"path":149,"stem":150},"Design System & Branding","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fdesign-system","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F3.design-system","i-lucide-zap",{"title":153,"path":154,"stem":155,"children":156,"icon":159},"Fireskills","\u002Fdocs\u002Ffireskills","docs\u002F2.fireskills\u002F0.index",[157,160,219,249,275,293],{"title":158,"path":154,"stem":155,"icon":159},"What is Fireskills?","i-lucide-flame",{"title":20,"icon":21,"hide":22,"path":161,"stem":162,"children":163,"page":62},"\u002Fdocs\u002Ffireskills\u002Fgetting-started","docs\u002F2.fireskills\u002F1.getting-started",[164,167,171,175,179,183,187,191,195,199,203,207,211,215],{"title":27,"path":165,"stem":166},"\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fquick-start","docs\u002F2.fireskills\u002F1.getting-started\u002F00.quick-start",{"title":168,"path":169,"stem":170},"Workflow & Governance","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fworkflow","docs\u002F2.fireskills\u002F1.getting-started\u002F01.workflow",{"title":172,"path":173,"stem":174},"Project Context","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fproject-context","docs\u002F2.fireskills\u002F1.getting-started\u002F02.project-context",{"title":176,"path":177,"stem":178},"Step 0: Setup","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-setup","docs\u002F2.fireskills\u002F1.getting-started\u002F03.step-setup",{"title":180,"path":181,"stem":182},"Step 1: Inbox","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-inbox","docs\u002F2.fireskills\u002F1.getting-started\u002F04.step-inbox",{"title":184,"path":185,"stem":186},"Step 2: Backlog","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-backlog","docs\u002F2.fireskills\u002F1.getting-started\u002F05.step-backlog",{"title":188,"path":189,"stem":190},"Step 3: Specify","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-specify","docs\u002F2.fireskills\u002F1.getting-started\u002F06.step-specify",{"title":192,"path":193,"stem":194},"Step 4: Validate","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-validate","docs\u002F2.fireskills\u002F1.getting-started\u002F07.step-validate",{"title":196,"path":197,"stem":198},"Step 5: Tasks","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-tasks","docs\u002F2.fireskills\u002F1.getting-started\u002F08.step-tasks",{"title":200,"path":201,"stem":202},"Step 6: TDD\u002FBDD","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-tdd-bdd","docs\u002F2.fireskills\u002F1.getting-started\u002F09.step-tdd-bdd",{"title":204,"path":205,"stem":206},"Step 7: Implement","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-implement","docs\u002F2.fireskills\u002F1.getting-started\u002F10.step-implement",{"title":208,"path":209,"stem":210},"Step 8: Documentator","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-documentator","docs\u002F2.fireskills\u002F1.getting-started\u002F11.step-documentator",{"title":212,"path":213,"stem":214},"Late Changes","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Flate-changes","docs\u002F2.fireskills\u002F1.getting-started\u002F12.late-changes",{"title":216,"path":217,"stem":218},"Other Entry Points","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fother-entry-points","docs\u002F2.fireskills\u002F1.getting-started\u002F13.other-entry-points",{"title":220,"icon":221,"hide":22,"path":222,"stem":223,"children":224,"page":62},"Methodology","i-lucide-git-branch","\u002Fdocs\u002Ffireskills\u002Fmethodology","docs\u002F2.fireskills\u002F2.methodology",[225,229,233,237,241,245],{"title":226,"path":227,"stem":228},"The Three Acts","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fthree-acts","docs\u002F2.fireskills\u002F2.methodology\u002F0.three-acts",{"title":230,"path":231,"stem":232},"The Three Gates","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fthree-gates","docs\u002F2.fireskills\u002F2.methodology\u002F1.three-gates",{"title":234,"path":235,"stem":236},"The Canonical Spec","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fcanonical-spec","docs\u002F2.fireskills\u002F2.methodology\u002F2.canonical-spec",{"title":238,"path":239,"stem":240},"Lifecycle States","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Flifecycle-states","docs\u002F2.fireskills\u002F2.methodology\u002F3.lifecycle-states",{"title":242,"path":243,"stem":244},"Effort Scale","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Feffort-scale","docs\u002F2.fireskills\u002F2.methodology\u002F4.effort-scale",{"title":246,"path":247,"stem":248},"Milestones & Governance","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fgovernance-and-milestones","docs\u002F2.fireskills\u002F2.methodology\u002F5.governance-and-milestones",{"title":250,"icon":251,"hide":22,"path":252,"stem":253,"children":254,"page":62},"Skills","i-lucide-layers","\u002Fdocs\u002Ffireskills\u002Fskills","docs\u002F2.fireskills\u002F3.skills",[255,259,263,267,271],{"title":256,"path":257,"stem":258},"Catalog","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fcatalog","docs\u002F2.fireskills\u002F3.skills\u002F0.catalog",{"title":260,"path":261,"stem":262},"Act I: Define","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-1-define","docs\u002F2.fireskills\u002F3.skills\u002F1.act-1-define",{"title":264,"path":265,"stem":266},"Act II: Design & Prove","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-2-design-prove","docs\u002F2.fireskills\u002F3.skills\u002F2.act-2-design-prove",{"title":268,"path":269,"stem":270},"Act III: Deliver","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-3-deliver","docs\u002F2.fireskills\u002F3.skills\u002F3.act-3-deliver",{"title":272,"path":273,"stem":274},"Governance & Decisions","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fgovernance-and-decisions","docs\u002F2.fireskills\u002F3.skills\u002F4.governance-and-decisions",{"title":276,"icon":277,"hide":22,"path":278,"stem":279,"children":280,"page":62},"Specialists","i-lucide-sparkles","\u002Fdocs\u002Ffireskills\u002Fspecialists","docs\u002F2.fireskills\u002F4.specialists",[281,285,289],{"title":282,"path":283,"stem":284},"Overview","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Foverview","docs\u002F2.fireskills\u002F4.specialists\u002F0.overview",{"title":286,"path":287,"stem":288},"Nuxfire Stack","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Fnuxfire-stack","docs\u002F2.fireskills\u002F4.specialists\u002F1.nuxfire-stack",{"title":290,"path":291,"stem":292},"Engineering Specialists","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Fengineering-specialists","docs\u002F2.fireskills\u002F4.specialists\u002F2.engineering-specialists",{"title":294,"icon":295,"hide":22,"path":296,"stem":297,"children":298,"page":62},"CLI & Tooling","i-lucide-terminal","\u002Fdocs\u002Ffireskills\u002Fcli","docs\u002F2.fireskills\u002F5.cli",[299,303,307],{"title":300,"path":301,"stem":302},"CLI Overview","\u002Fdocs\u002Ffireskills\u002Fcli\u002Foverview","docs\u002F2.fireskills\u002F5.cli\u002F0.overview",{"title":304,"path":305,"stem":306},"Commands","\u002Fdocs\u002Ffireskills\u002Fcli\u002Fcommands","docs\u002F2.fireskills\u002F5.cli\u002F1.commands",{"title":308,"path":309,"stem":310},"Safety Scripts","\u002Fdocs\u002Ffireskills\u002Fcli\u002Fgovernance-scripts","docs\u002F2.fireskills\u002F5.cli\u002F2.governance-scripts",{"id":312,"title":35,"body":313,"description":706,"extension":707,"meta":708,"navigation":709,"path":36,"seo":710,"stem":37,"__hash__":711},"docs\u002Fdocs\u002F1.saas-starter-kit\u002F1.getting-started\u002F2.cloudflare-access.md",{"type":314,"value":315,"toc":702},"minimark",[316,340,358,554,557,578,593,599,682,692,697],[317,318,319,323,324,327,328,327,331,334,335,339],"p",{},[320,321,322],"strong",{},"Where to create the token",": in the Cloudflare dashboard sidebar, ",[320,325,326],{},"Manage Account → Account API Tokens"," → ",[320,329,330],{},"\"+ Create Token\"",[320,332,333],{},"\"Create Custom Token\"",". (Not ",[336,337,338],"code",{},"dash.cloudflare.com\u002Fprofile\u002Fapi-tokens"," — that's the personal, user-owned tokens page, a different list from the account-owned one this project uses.)",[317,341,342,343,346,347,349,350,353,354,357],{},"Already have a token from an earlier setup and just need to add the ",[336,344,345],{},"D1"," permission to it? Open ",[320,348,326],{},", click the token's name to edit it, click into the policy row scoped to ",[320,351,352],{},"\"Entire Account\"",", and continue from step 3 below.\nOn the policy screen (the layout changes occasionally — use the ",[320,355,356],{},"\"Search for a permission group...\""," box if you can't find something by category):",[359,360,361,380,452,518,538],"ol",{},[362,363,364,365,368,369,372,377],"li",{},"Keep or rename the token name, then click ",[320,366,367],{},"Edit Cloudflare Workers",":",[370,371],"br",{},[373,374],"img",{"alt":375,"src":376},"Token name","\u002Fimages\u002Fdocs\u002Ftoken-name-cloudflare.webp",[373,378],{"alt":367,"src":379},"\u002Fimages\u002Fdocs\u002FEdit-Cloudflare-Workers.webp",[362,381,382,383,386,387,390,391],{},"On the first policy, click ",[320,384,385],{},"\"All zones ... Account\""," to add a second policy scoped to a ",[320,388,389],{},"zone"," (Workers Custom Domains requires this separately from the account-scoped policy):",[392,393,394,407],"ul",{},[362,395,396,397,400,401,403],{},"Switch that policy's scope to ",[320,398,399],{},"\"Specified Domains\""," and pick your domain:",[370,402],{},[373,404],{"alt":405,"src":406},"Specified domains","\u002Fimages\u002Fdocs\u002Fpecified-domains.webp",[362,408,409,410,415,416,419,420,423,424,427,428,431,432,435,436,438,441,443,444,447,448,451],{},"Search ",[320,411,412],{},[336,413,414],{},"Workers Routes"," and check ",[320,417,418],{},"Edit"," — not ",[336,421,422],{},"DNS: Edit",". Workers Custom Domains creates the DNS record automatically behind this permission. The ",[336,425,426],{},"production"," stage uses it twice, for ",[336,429,430],{},"\u003Cyour domain>"," and for ",[336,433,434],{},"www.\u003Cyour domain>",", so nothing else is needed on this policy:",[370,437],{},[373,439],{"alt":414,"src":440},"\u002Fimages\u002Fdocs\u002FWorkers-Routes.webp",[370,442],{},"Don't add ",[336,445,446],{},"Page Rules",": Cloudflare's Page Rules API does not accept Account API Tokens (error ",[336,449,450],{},"1011","), so it can't be used with the token this guide creates.",[362,453,454,455,457,458,460,461,509,511,512,514],{},"On a second policy scoped to ",[320,456,352],{},", add at minimum (search each term and check ",[320,459,418],{}," — it's fine if more comes checked by default):",[392,462,463,468,473,478,483,488],{},[362,464,465],{},[336,466,467],{},"Workers Scripts",[362,469,470],{},[336,471,472],{},"Workers KV",[362,474,475],{},[336,476,477],{},"Workers R2",[362,479,480],{},[336,481,482],{},"Queues",[362,484,485],{},[336,486,487],{},"Hyperdrive",[362,489,490,492,493,496,497,500,501,504,505,508],{},[336,491,345],{}," — listed under the ",[320,494,495],{},"Developer Platform"," category once you search (not alongside Workers\u002FKV\u002FR2 under Account), described as \"Grants write access to D1 configuration and SQL queries\". Backs the docs site's content database (",[336,498,499],{},"apps\u002Fweb","'s search box). Missing this fails the deploy with ",[336,502,503],{},"401 Unauthorized"," on the ",[336,506,507],{},"D1Database"," resource specifically, while every other resource still deploys fine.",[370,510],{},"Confirm every permission is set to Edit:",[370,513],{},[373,515],{"alt":516,"src":517},"Edit account permissions","\u002Fimages\u002Fdocs\u002Fedit-account.webp",[362,519,520,521,524,525,368,528,530,534],{},"Click ",[320,522,523],{},"\"Review token\"",", then ",[320,526,527],{},"\"Create Token\"",[370,529],{},[373,531],{"alt":532,"src":533},"Review token","\u002Fimages\u002Fdocs\u002FReview-token.webp",[373,535],{"alt":536,"src":537},"Create token","\u002Fimages\u002Fdocs\u002Fcreate-token.webp",[362,539,540,541,544,545,368,548,550],{},"Save the token somewhere safe. What you'll actually use going forward are the ",[320,542,543],{},"API token"," and the ",[320,546,547],{},"Account ID",[370,549],{},[373,551],{"alt":552,"src":553},"Tokens","\u002Fimages\u002Fdocs\u002Ftokens.png",[317,555,556],{},"Copy the token value now — it's only shown once.",[317,558,559,560,563,564,568,569,573,574,577],{},"Keep both values handy: they need to be a real ",[320,561,562],{},"environment variable"," (",[565,566,567],"a",{"href":44},"next step",") ",[570,571,572],"em",{},"and"," go into the ",[336,575,576],{},".env"," file you load into the secrets vault. They're the only two variables that need both.",[317,579,580,581,584,585,588,589,592],{},"One more account-level requirement before deploying: your account's ",[336,582,583],{},"workers.dev"," subdomain must already be provisioned — open ",[320,586,587],{},"Workers & Pages"," in the Cloudflare dashboard once (it's created automatically the first time that section loads). Skip this on a brand-new account and the first deploy fails partway through with ",[336,590,591],{},"403: \"You need a workers.dev subdomain...\""," (error code 10063) — the token and account ID are correct, this is a one-time account setup step that has nothing to do with either of them.",[317,594,595,598],{},[320,596,597],{},"Deploy errors that come from the token or the zone",", and what each one means:",[600,601,602,618],"table",{},[603,604,605],"thead",{},[606,607,608,612,615],"tr",{},[609,610,611],"th",{},"Error in the deploy output",[609,613,614],{},"Cause",[609,616,617],{},"Fix",[619,620,621,639,671],"tbody",{},[606,622,623,631,636],{},[624,625,626,628,629],"td",{},[336,627,503],{}," on ",[336,630,507],{},[624,632,633,634],{},"Token lacks ",[336,635,345],{},[624,637,638],{},"Add it (step 3)",[606,640,641,654,657],{},[624,642,643,646,647,650,651],{},[336,644,645],{},"409"," code ",[336,648,649],{},"100117"," \"already has externally managed DNS records\" on ",[336,652,653],{},"WorkersCustomDomain",[624,655,656],{},"Not a permission: the hostname already has an A, AAAA or CNAME record",[624,658,659,660,663,664,666,667,670],{},"Delete that record in ",[320,661,662],{},"DNS → Records"," — for ",[336,665,426],{},", both the apex and ",[336,668,669],{},"www"," — and deploy again",[606,672,673,678,680],{},[624,674,675],{},[320,676,677],{},"Prompt for AI agents:",[624,679],{},[624,681],{},[683,684,690],"pre",{"className":685,"code":687,"language":688,"meta":689},[686],"language-text","This step has no CLI equivalent — token creation only happens in the\nCloudflare dashboard. Stop and ask the user to follow the steps above,\nthen get their CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID before\ncontinuing. Also confirm the user has opened Workers & Pages in the\ndashboard at least once (provisions the workers.dev subdomain) — the\nfirst deploy fails with error 10063 otherwise.\n","text","",[336,691,687],{"__ignoreMap":689},[693,694,696],"h2",{"id":695},"next","Next",[317,698,699,701],{},[565,700,39],{"href":40}," — set your domain and feature flags.",{"title":689,"searchDepth":703,"depth":703,"links":704},2,[705],{"id":695,"depth":703,"text":696},"Create the API token every sst command needs to authenticate.","md",{},{"title":35},{"title":35,"description":706},"t_AJaQyuG6JwhBiVosWkjtyvSks6Ux3XhcR9A47EPOs",1790707485287]