[{"data":1,"prerenderedAt":1736},["ShallowReactive",2],{"navigation_docs":3,"docs-navigation-with-icons":419,"-docs-guides-user-management":561,"-docs-guides-user-management-surround":1731},[4,66,87,124,405],{"title":5,"path":6,"stem":7,"children":8,"page":65},"Api","\u002Fdocs\u002Fapi","docs\u002Fapi",[9,13,17,21,25,29,33,37,41,45,49,53,57,61],{"title":10,"path":11,"stem":12},"Best Practices","\u002Fdocs\u002Fapi\u002Fbest-practices","docs\u002Fapi\u002Fbest-practices",{"title":14,"path":15,"stem":16},"Blog","\u002Fdocs\u002Fapi\u002Fblog","docs\u002Fapi\u002Fblog",{"title":18,"path":19,"stem":20},"Code Examples","\u002Fdocs\u002Fapi\u002Fcode-examples","docs\u002Fapi\u002Fcode-examples",{"title":22,"path":23,"stem":24},"Collections","\u002Fdocs\u002Fapi\u002Fcollections","docs\u002Fapi\u002Fcollections",{"title":26,"path":27,"stem":28},"Field Types","\u002Fdocs\u002Fapi\u002Ffield-types","docs\u002Fapi\u002Ffield-types",{"title":30,"path":31,"stem":32},"Rate Limits & Errors","\u002Fdocs\u002Fapi\u002Flimits-and-errors","docs\u002Fapi\u002Flimits-and-errors",{"title":34,"path":35,"stem":36},"Media","\u002Fdocs\u002Fapi\u002Fmedia","docs\u002Fapi\u002Fmedia",{"title":38,"path":39,"stem":40},"Overview","\u002Fdocs\u002Fapi\u002Foverview","docs\u002Fapi\u002Foverview",{"title":42,"path":43,"stem":44},"Pages","\u002Fdocs\u002Fapi\u002Fpages","docs\u002Fapi\u002Fpages",{"title":46,"path":47,"stem":48},"Query Parameters","\u002Fdocs\u002Fapi\u002Fquery-parameters","docs\u002Fapi\u002Fquery-parameters",{"title":50,"path":51,"stem":52},"Responses & Caching","\u002Fdocs\u002Fapi\u002Fresponses","docs\u002Fapi\u002Fresponses",{"title":54,"path":55,"stem":56},"Troubleshooting","\u002Fdocs\u002Fapi\u002Ftroubleshooting","docs\u002Fapi\u002Ftroubleshooting",{"title":58,"path":59,"stem":60},"Validation","\u002Fdocs\u002Fapi\u002Fvalidation","docs\u002Fapi\u002Fvalidation",{"title":62,"path":63,"stem":64},"Webhooks","\u002Fdocs\u002Fapi\u002Fwebhooks","docs\u002Fapi\u002Fwebhooks",false,{"title":67,"path":68,"stem":69,"children":70,"page":65},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started",[71,75,79,83],{"title":72,"path":73,"stem":74},"Authentication","\u002Fdocs\u002Fgetting-started\u002Fauthentication","docs\u002Fgetting-started\u002Fauthentication",{"title":76,"path":77,"stem":78},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002Fgetting-started\u002Fintroduction",{"title":80,"path":81,"stem":82},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002Fgetting-started\u002Fquickstart",{"title":84,"path":85,"stem":86},"Write Operations","\u002Fdocs\u002Fgetting-started\u002Fwrite-operations","docs\u002Fgetting-started\u002Fwrite-operations",{"title":88,"path":89,"stem":90,"children":91,"page":65},"Guides","\u002Fdocs\u002Fguides","docs\u002Fguides",[92,96,100,104,108,112,116,120],{"title":93,"path":94,"stem":95},"Admin Interface","\u002Fdocs\u002Fguides\u002Fadmin-interface","docs\u002Fguides\u002Fadmin-interface",{"title":97,"path":98,"stem":99},"ButterCMS Migration","\u002Fdocs\u002Fguides\u002Fbuttercms-migration","docs\u002Fguides\u002Fbuttercms-migration",{"title":101,"path":102,"stem":103},"Migrations","\u002Fdocs\u002Fguides\u002Fmigrations","docs\u002Fguides\u002Fmigrations",{"title":105,"path":106,"stem":107},"Page Management","\u002Fdocs\u002Fguides\u002Fpage-management","docs\u002Fguides\u002Fpage-management",{"title":109,"path":110,"stem":111},"Public API Usage","\u002Fdocs\u002Fguides\u002Fpublic-api-usage","docs\u002Fguides\u002Fpublic-api-usage",{"title":113,"path":114,"stem":115},"Schema Builder","\u002Fdocs\u002Fguides\u002Fschema-builder","docs\u002Fguides\u002Fschema-builder",{"title":117,"path":118,"stem":119},"User Management","\u002Fdocs\u002Fguides\u002Fuser-management","docs\u002Fguides\u002Fuser-management",{"title":121,"path":122,"stem":123},"Rich Text Editor","\u002Fdocs\u002Fguides\u002Fwysiwyg-editor","docs\u002Fguides\u002Fwysiwyg-editor",{"title":125,"path":126,"stem":127,"children":128,"page":65},"Sdk","\u002Fdocs\u002Fsdk","docs\u002Fsdk",[129,132,136,140,144],{"title":38,"path":130,"stem":131},"\u002Fdocs\u002Fsdk\u002Freadme","docs\u002Fsdk\u002FREADME",{"title":133,"path":134,"stem":135},"Astro","\u002Fdocs\u002Fsdk\u002Fastro","docs\u002Fsdk\u002Fastro",{"title":137,"path":138,"stem":139},"Next.js","\u002Fdocs\u002Fsdk\u002Fnextjs","docs\u002Fsdk\u002Fnextjs",{"title":141,"path":142,"stem":143},"Nuxt","\u002Fdocs\u002Fsdk\u002Fnuxt","docs\u002Fsdk\u002Fnuxt",{"title":145,"path":146,"stem":147,"children":148,"page":65},"Reference","\u002Fdocs\u002Fsdk\u002Freference","docs\u002Fsdk\u002Freference",[149,153,222,235,380],{"title":150,"path":151,"stem":152},"@tentocms\u002Fclient","\u002Fdocs\u002Fsdk\u002Freference\u002Freadme","docs\u002Fsdk\u002Freference\u002FREADME",{"title":154,"path":155,"stem":156,"children":157,"page":65},"Classes","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses","docs\u002Fsdk\u002Freference\u002Fclasses",[158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218],{"title":159,"path":160,"stem":161},"Class: BlogCategoriesResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fblogcategoriesresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FBlogCategoriesResource",{"title":163,"path":164,"stem":165},"Class: BlogPostsResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fblogpostsresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FBlogPostsResource",{"title":167,"path":168,"stem":169},"Class: BlogResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fblogresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FBlogResource",{"title":171,"path":172,"stem":173},"Class: BlogTagsResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fblogtagsresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FBlogTagsResource",{"title":175,"path":176,"stem":177},"Class: CollectionsResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fcollectionsresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FCollectionsResource",{"title":179,"path":180,"stem":181},"Class: CollectionsWriteResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fcollectionswriteresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FCollectionsWriteResource",{"title":183,"path":184,"stem":185},"Class: MediaResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fmediaresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FMediaResource",{"title":187,"path":188,"stem":189},"Class: MediaWriteResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fmediawriteresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FMediaWriteResource",{"title":191,"path":192,"stem":193},"Class: PagesResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fpagesresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FPagesResource",{"title":195,"path":196,"stem":197},"Class: PagesWriteResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fpageswriteresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FPagesWriteResource",{"title":199,"path":200,"stem":201},"Class: TentoAuthenticationError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentoauthenticationerror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoAuthenticationError",{"title":203,"path":204,"stem":205},"Class: TentoClient","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentoclient","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoClient",{"title":207,"path":208,"stem":209},"Class: TentoError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentoerror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoError",{"title":211,"path":212,"stem":213},"Class: TentoNetworkError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentonetworkerror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoNetworkError",{"title":215,"path":216,"stem":217},"Class: TentoNotFoundError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentonotfounderror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoNotFoundError",{"title":219,"path":220,"stem":221},"Class: TentoRateLimitError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentoratelimiterror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoRateLimitError",{"title":223,"path":224,"stem":225,"children":226,"page":65},"Functions","\u002Fdocs\u002Fsdk\u002Freference\u002Ffunctions","docs\u002Fsdk\u002Freference\u002Ffunctions",[227,231],{"title":228,"path":229,"stem":230},"Function: getUrl()","\u002Fdocs\u002Fsdk\u002Freference\u002Ffunctions\u002Fgeturl","docs\u002Fsdk\u002Freference\u002Ffunctions\u002FgetUrl",{"title":232,"path":233,"stem":234},"Function: mockMedia()","\u002Fdocs\u002Fsdk\u002Freference\u002Ffunctions\u002Fmockmedia","docs\u002Fsdk\u002Freference\u002Ffunctions\u002FmockMedia",{"title":236,"path":237,"stem":238,"children":239,"page":65},"Interfaces","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces","docs\u002Fsdk\u002Freference\u002Finterfaces",[240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,364,368,372,376],{"title":241,"path":242,"stem":243},"Interface: BlogAuthor","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogauthor","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogAuthor",{"title":245,"path":246,"stem":247},"Interface: BlogCategory","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogcategory","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogCategory",{"title":249,"path":250,"stem":251},"Interface: BlogPost","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogpost","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogPost",{"title":253,"path":254,"stem":255},"Interface: BlogPostListOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogpostlistoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogPostListOptions",{"title":257,"path":258,"stem":259},"Interface: BlogTag","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogtag","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogTag",{"title":261,"path":262,"stem":263},"Interface: CollectionItemResponse\u003CT>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcollectionitemresponse","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCollectionItemResponse",{"title":265,"path":266,"stem":267},"Interface: CollectionListOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcollectionlistoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCollectionListOptions",{"title":269,"path":270,"stem":271},"Interface: CollectionListResponse\u003CT>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcollectionlistresponse","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCollectionListResponse",{"title":273,"path":274,"stem":275},"Interface: CollectionTypeMeta","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcollectiontypemeta","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCollectionTypeMeta",{"title":277,"path":278,"stem":279},"Interface: CreateCollectionItemInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcreatecollectioniteminput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCreateCollectionItemInput",{"title":281,"path":282,"stem":283},"Interface: CreatePageInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcreatepageinput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCreatePageInput",{"title":285,"path":286,"stem":287},"Interface: DryRunResult","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fdryrunresult","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FDryRunResult",{"title":289,"path":290,"stem":291},"Interface: FilterCondition","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Ffiltercondition","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FFilterCondition",{"title":293,"path":294,"stem":295},"Interface: ItemResponse\u003CT>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fitemresponse","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FItemResponse",{"title":297,"path":298,"stem":299},"Interface: ListResponse\u003CT>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Flistresponse","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FListResponse",{"title":301,"path":302,"stem":303},"Interface: Media","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fmedia","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FMedia",{"title":305,"path":306,"stem":307},"Interface: MediaItem","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fmediaitem","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FMediaItem",{"title":309,"path":310,"stem":311},"Interface: MediaOption","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fmediaoption","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FMediaOption",{"title":313,"path":314,"stem":315},"Interface: MediaTransformOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fmediatransformoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FMediaTransformOptions",{"title":317,"path":318,"stem":319},"Interface: Page\u003CTContent>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpage","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPage",{"title":321,"path":322,"stem":323},"Interface: PageGetOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpagegetoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPageGetOptions",{"title":325,"path":326,"stem":327},"Interface: PageListOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpagelistoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPageListOptions",{"title":329,"path":330,"stem":331},"Interface: PageWithRedirect\u003CTContent>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpagewithredirect","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPageWithRedirect",{"title":333,"path":334,"stem":335},"Interface: PaginationMeta","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpaginationmeta","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPaginationMeta",{"title":337,"path":338,"stem":339},"Interface: PreviewOption","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpreviewoption","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPreviewOption",{"title":341,"path":342,"stem":343},"Interface: RedirectInfo","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fredirectinfo","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FRedirectInfo",{"title":345,"path":346,"stem":347},"Interface: RefTypesOption","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Freftypesoption","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FRefTypesOption",{"title":349,"path":350,"stem":351},"Interface: SeoMetadata","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fseometadata","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FSeoMetadata",{"title":353,"path":354,"stem":355},"Interface: TentoClientConfig","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Ftentoclientconfig","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FTentoClientConfig",{"title":357,"path":358,"stem":359},"Interface: TentoMedia","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Ftentomedia","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FTentoMedia",{"title":361,"path":362,"stem":363},"Interface: UpdateCollectionItemInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fupdatecollectioniteminput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FUpdateCollectionItemInput",{"title":365,"path":366,"stem":367},"Interface: UpdatePageInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fupdatepageinput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FUpdatePageInput",{"title":369,"path":370,"stem":371},"Interface: UploadMediaInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fuploadmediainput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FUploadMediaInput",{"title":373,"path":374,"stem":375},"Interface: WriteCollectionItem","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fwritecollectionitem","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FWriteCollectionItem",{"title":377,"path":378,"stem":379},"Interface: WritePage","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fwritepage","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FWritePage",{"title":381,"path":382,"stem":383,"children":384,"page":65},"Type Aliases","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases","docs\u002Fsdk\u002Freference\u002Ftype-aliases",[385,389,393,397,401],{"title":386,"path":387,"stem":388},"Type Alias: BlogPostListItem","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Fblogpostlistitem","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FBlogPostListItem",{"title":390,"path":391,"stem":392},"Type Alias: BlogPostListResponse","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Fblogpostlistresponse","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FBlogPostListResponse",{"title":394,"path":395,"stem":396},"Type Alias: CollectionItem\u003CTContent>","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Fcollectionitem","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FCollectionItem",{"title":398,"path":399,"stem":400},"Type Alias: FilterOperator","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Ffilteroperator","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FFilterOperator",{"title":402,"path":403,"stem":404},"Type Alias: MediaMode","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Fmediamode","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FMediaMode",{"title":406,"path":407,"stem":408,"children":409,"page":65},"Typegen","\u002Fdocs\u002Ftypegen","docs\u002Ftypegen",[410,413,416],{"title":133,"path":411,"stem":412},"\u002Fdocs\u002Ftypegen\u002Fastro","docs\u002Ftypegen\u002Fastro",{"title":137,"path":414,"stem":415},"\u002Fdocs\u002Ftypegen\u002Fnextjs","docs\u002Ftypegen\u002Fnextjs",{"title":141,"path":417,"stem":418},"\u002Fdocs\u002Ftypegen\u002Fnuxt","docs\u002Ftypegen\u002Fnuxt",[420,450,460,478,556],{"title":5,"path":6,"stem":7,"children":421,"page":65},[422,424,426,428,430,432,434,436,438,440,442,444,446,448],{"title":10,"path":11,"stem":12,"icon":423},"i-lucide-sparkles",{"title":14,"path":15,"stem":16,"icon":425},"i-lucide-newspaper",{"title":18,"path":19,"stem":20,"icon":427},"i-lucide-terminal",{"title":22,"path":23,"stem":24,"icon":429},"i-lucide-layers",{"title":26,"path":27,"stem":28,"icon":431},"i-lucide-type",{"title":30,"path":31,"stem":32,"icon":433},"i-lucide-triangle-alert",{"title":34,"path":35,"stem":36,"icon":435},"i-lucide-image",{"title":38,"path":39,"stem":40,"icon":437},"i-lucide-map",{"title":42,"path":43,"stem":44,"icon":439},"i-lucide-file-text",{"title":46,"path":47,"stem":48,"icon":441},"i-lucide-sliders-horizontal",{"title":50,"path":51,"stem":52,"icon":443},"i-lucide-braces",{"title":54,"path":55,"stem":56,"icon":445},"i-lucide-wrench",{"title":58,"path":59,"stem":60,"icon":447},"i-lucide-shield-check",{"title":62,"path":63,"stem":64,"icon":449},"i-lucide-webhook",{"title":67,"path":68,"stem":69,"children":451,"page":65},[452,454,456,458],{"title":72,"path":73,"stem":74,"icon":453},"i-lucide-key-round",{"title":76,"path":77,"stem":78,"icon":455},"i-lucide-compass",{"title":80,"path":81,"stem":82,"icon":457},"i-lucide-rocket",{"title":84,"path":85,"stem":86,"icon":459},"i-lucide-pencil",{"title":88,"path":89,"stem":90,"children":461,"page":65},[462,464,466,468,470,472,474,476],{"title":93,"path":94,"stem":95,"icon":463},"i-lucide-layout-dashboard",{"title":97,"path":98,"stem":99,"icon":465},"i-lucide-package",{"title":101,"path":102,"stem":103,"icon":467},"i-lucide-git-branch",{"title":105,"path":106,"stem":107,"icon":469},"i-lucide-files",{"title":109,"path":110,"stem":111,"icon":471},"i-lucide-plug-zap",{"title":113,"path":114,"stem":115,"icon":473},"i-lucide-wand",{"title":117,"path":118,"stem":119,"icon":475},"i-lucide-users",{"title":121,"path":122,"stem":123,"icon":477},"i-lucide-pilcrow",{"title":125,"path":126,"stem":127,"children":479,"page":65},[480,481,482,484,486],{"title":38,"path":130,"stem":131,"icon":465},{"title":133,"path":134,"stem":135,"icon":457},{"title":137,"path":138,"stem":139,"icon":483},"i-lucide-triangle",{"title":141,"path":142,"stem":143,"icon":485},"i-lucide-hexagon",{"title":145,"path":146,"stem":147,"children":487,"page":65},[488,490,508,512,549],{"title":150,"path":151,"stem":152,"icon":489},null,{"title":154,"path":155,"stem":156,"children":491,"page":65},[492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507],{"title":159,"path":160,"stem":161,"icon":489},{"title":163,"path":164,"stem":165,"icon":489},{"title":167,"path":168,"stem":169,"icon":489},{"title":171,"path":172,"stem":173,"icon":489},{"title":175,"path":176,"stem":177,"icon":489},{"title":179,"path":180,"stem":181,"icon":489},{"title":183,"path":184,"stem":185,"icon":489},{"title":187,"path":188,"stem":189,"icon":489},{"title":191,"path":192,"stem":193,"icon":489},{"title":195,"path":196,"stem":197,"icon":489},{"title":199,"path":200,"stem":201,"icon":489},{"title":203,"path":204,"stem":205,"icon":489},{"title":207,"path":208,"stem":209,"icon":489},{"title":211,"path":212,"stem":213,"icon":489},{"title":215,"path":216,"stem":217,"icon":489},{"title":219,"path":220,"stem":221,"icon":489},{"title":223,"path":224,"stem":225,"children":509,"page":65},[510,511],{"title":228,"path":229,"stem":230,"icon":489},{"title":232,"path":233,"stem":234,"icon":489},{"title":236,"path":237,"stem":238,"children":513,"page":65},[514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548],{"title":241,"path":242,"stem":243,"icon":489},{"title":245,"path":246,"stem":247,"icon":489},{"title":249,"path":250,"stem":251,"icon":489},{"title":253,"path":254,"stem":255,"icon":489},{"title":257,"path":258,"stem":259,"icon":489},{"title":261,"path":262,"stem":263,"icon":489},{"title":265,"path":266,"stem":267,"icon":489},{"title":269,"path":270,"stem":271,"icon":489},{"title":273,"path":274,"stem":275,"icon":489},{"title":277,"path":278,"stem":279,"icon":489},{"title":281,"path":282,"stem":283,"icon":489},{"title":285,"path":286,"stem":287,"icon":489},{"title":289,"path":290,"stem":291,"icon":489},{"title":293,"path":294,"stem":295,"icon":489},{"title":297,"path":298,"stem":299,"icon":489},{"title":301,"path":302,"stem":303,"icon":489},{"title":305,"path":306,"stem":307,"icon":489},{"title":309,"path":310,"stem":311,"icon":489},{"title":313,"path":314,"stem":315,"icon":489},{"title":317,"path":318,"stem":319,"icon":489},{"title":321,"path":322,"stem":323,"icon":489},{"title":325,"path":326,"stem":327,"icon":489},{"title":329,"path":330,"stem":331,"icon":489},{"title":333,"path":334,"stem":335,"icon":489},{"title":337,"path":338,"stem":339,"icon":489},{"title":341,"path":342,"stem":343,"icon":489},{"title":345,"path":346,"stem":347,"icon":489},{"title":349,"path":350,"stem":351,"icon":489},{"title":353,"path":354,"stem":355,"icon":489},{"title":357,"path":358,"stem":359,"icon":489},{"title":361,"path":362,"stem":363,"icon":489},{"title":365,"path":366,"stem":367,"icon":489},{"title":369,"path":370,"stem":371,"icon":489},{"title":373,"path":374,"stem":375,"icon":489},{"title":377,"path":378,"stem":379,"icon":489},{"title":381,"path":382,"stem":383,"children":550,"page":65},[551,552,553,554,555],{"title":386,"path":387,"stem":388,"icon":489},{"title":390,"path":391,"stem":392,"icon":489},{"title":394,"path":395,"stem":396,"icon":489},{"title":398,"path":399,"stem":400,"icon":489},{"title":402,"path":403,"stem":404,"icon":489},{"title":406,"path":407,"stem":408,"children":557,"page":65},[558,559,560],{"title":133,"path":411,"stem":412,"icon":457},{"title":137,"path":414,"stem":415,"icon":483},{"title":141,"path":417,"stem":418,"icon":485},{"id":562,"title":117,"body":563,"description":1725,"extension":1726,"icon":475,"links":489,"meta":1727,"navigation":1728,"path":118,"seo":1729,"stem":119,"__hash__":1730},"docs\u002Fdocs\u002Fguides\u002Fuser-management.md",{"type":564,"value":565,"toc":1679},"minimark",[566,570,574,577,582,625,628,632,692,694,698,702,734,739,742,753,759,763,766,777,783,787,790,801,805,828,832,835,846,849,860,862,866,870,899,904,908,911,936,941,943,947,950,954,968,971,975,978,993,998,1000,1004,1008,1054,1058,1061,1072,1075,1077,1081,1094,1098,1127,1131,1197,1204,1206,1210,1233,1237,1303,1307,1370,1374,1484,1486,1490,1494,1514,1518,1548,1552,1572,1574,1577,1581,1584,1590,1594,1597,1602,1606,1609,1615,1626,1630,1633,1638,1640,1644,1647],[567,568,569],"p",{},"This guide covers user management, authentication flows, and password management in TentoCMS.",[571,572,38],"h2",{"id":573},"overview",[567,575,576],{},"TentoCMS uses a global user model with per-project role assignments. Users exist at the system level and can be granted access to one or more projects (grouped under organisations), each with a specific role.",[578,579,581],"h3",{"id":580},"key-concepts","Key Concepts",[583,584,585,593,599,605],"ul",{},[586,587,588,592],"li",{},[589,590,591],"strong",{},"Global Users",": Users are created once and can access multiple projects",[586,594,595,598],{},[589,596,597],{},"Project Access",": Each user-project relationship includes a role assignment",[586,600,601,604],{},[589,602,603],{},"Session-Based Auth",": Sessions stored in D1 for strong consistency",[586,606,607,610,611,615,616,615,619,615,622],{},[589,608,609],{},"Role Hierarchy",": ",[612,613,614],"code",{},"editor"," \u003C ",[612,617,618],{},"publisher",[612,620,621],{},"developer",[612,623,624],{},"admin",[626,627],"hr",{},[571,629,631],{"id":630},"user-roles-permissions","User Roles & Permissions",[633,634,635,648],"table",{},[636,637,638],"thead",{},[639,640,641,645],"tr",{},[642,643,644],"th",{},"Role",[642,646,647],{},"Permissions",[649,650,651,662,672,682],"tbody",{},[639,652,653,659],{},[654,655,656],"td",{},[589,657,658],{},"Editor",[654,660,661],{},"Create\u002Fedit drafts, upload media, preview content, clone content",[639,663,664,669],{},[654,665,666],{},[589,667,668],{},"Publisher",[654,670,671],{},"Editor + publish, unpublish, schedule, revert versions",[639,673,674,679],{},[654,675,676],{},[589,677,678],{},"Developer",[654,680,681],{},"Publisher + manage page types, components, collections, webhooks",[639,683,684,689],{},[654,685,686],{},[589,687,688],{},"Admin",[654,690,691],{},"Full access including user management, project settings, audit logs, and live (production) API keys",[626,693],{},[571,695,697],{"id":696},"user-invitation-flow","User Invitation Flow",[578,699,701],{"id":700},"for-administrators","For Administrators",[703,704,705,711,717,720,723,729],"ol",{},[586,706,707,708],{},"Navigate to ",[589,709,710],{},"Settings > Users",[586,712,713,714],{},"Click ",[589,715,716],{},"Invite User",[586,718,719],{},"Enter the user's email and name",[586,721,722],{},"Select a role for this project",[586,724,725,728],{},[589,726,727],{},"If you have admin access to multiple projects",": Select which projects to add the user to",[586,730,713,731],{},[589,732,733],{},"Create User",[735,736,738],"h4",{"id":737},"multi-project-invitation","Multi-Project Invitation",[567,740,741],{},"If you are an admin in multiple projects, the invite form will show a project selection section. This allows you to:",[583,743,744,747,750],{},[586,745,746],{},"Add a new or existing user to multiple projects at once",[586,748,749],{},"Assign the same role across all selected projects",[586,751,752],{},"For new users: only one setup link is generated (they set one password for all projects)",[567,754,755,758],{},[589,756,757],{},"Note",": Users have a single global password that works across all projects they belong to.",[735,760,762],{"id":761},"new-user","New User",[567,764,765],{},"If the email doesn't exist in the system:",[583,767,768,771,774],{},[586,769,770],{},"A new user record is created",[586,772,773],{},"A password setup token is generated (valid for 1 hour)",[586,775,776],{},"A modal displays the setup URL and shows which projects the user was added to",[567,778,779,782],{},[589,780,781],{},"Important",": Copy the setup URL and share it with the user manually. Email notifications are not yet implemented.",[735,784,786],{"id":785},"existing-user","Existing User",[567,788,789],{},"If the email already exists:",[583,791,792,795,798],{},[586,793,794],{},"The user is added to your project(s) with the specified role",[586,796,797],{},"No password setup is needed (they use their existing password)",[586,799,800],{},"A toast notification confirms the addition",[578,802,804],{"id":803},"for-new-users","For New Users",[703,806,807,810,817,820,825],{},[586,808,809],{},"Receive the setup URL from your administrator",[586,811,812,813,816],{},"Visit the URL (e.g., ",[612,814,815],{},"https:\u002F\u002Fadmin.example.com\u002Fauth\u002Fsetup-password?token=xxx",")",[586,818,819],{},"Enter and confirm your new password",[586,821,713,822],{},[589,823,824],{},"Set Password",[586,826,827],{},"Navigate to the login page and sign in",[735,829,831],{"id":830},"password-requirements","Password Requirements",[567,833,834],{},"Following NIST SP 800-63B guidelines, TentoCMS uses a length-based password policy:",[583,836,837,840,843],{},[586,838,839],{},"Minimum 12 characters",[586,841,842],{},"No composition rules (uppercase, numbers, symbols not required)",[586,844,845],{},"All characters allowed including spaces (for passphrases)",[567,847,848],{},"This approach provides better security than complexity rules because:",[583,850,851,854,857],{},[586,852,853],{},"Length provides more entropy than forced character classes",[586,855,856],{},"Complexity rules lead to predictable patterns (\"Password1!\")",[586,858,859],{},"Passphrases like \"correct horse battery staple\" are both secure and memorable",[626,861],{},[571,863,865],{"id":864},"password-recovery","Password Recovery",[578,867,869],{"id":868},"user-initiated-forgot-password","User-Initiated (Forgot Password)",[703,871,872,875,880,883,888,891,894,896],{},[586,873,874],{},"Go to the login page",[586,876,713,877],{},[589,878,879],{},"Forgot password?",[586,881,882],{},"Enter your email address",[586,884,713,885],{},[589,886,887],{},"Send Reset Link",[586,889,890],{},"Check your email for the reset link (or contact admin for the link)",[586,892,893],{},"Visit the reset link",[586,895,819],{},[586,897,898],{},"Sign in with your new password",[567,900,901,903],{},[589,902,757],{},": The system always shows a success message to prevent email enumeration attacks. If you don't receive an email, contact your administrator.",[578,905,907],{"id":906},"admin-initiated-reset-password","Admin-Initiated (Reset Password)",[567,909,910],{},"Administrators can reset a user's password:",[703,912,913,917,920,930,933],{},[586,914,707,915],{},[589,916,710],{},[586,918,919],{},"Click on the user's name to view details",[586,921,922,923,926,927],{},"In the ",[589,924,925],{},"Account"," section, click ",[589,928,929],{},"Reset Password",[586,931,932],{},"A modal displays the new setup URL",[586,934,935],{},"Share the URL with the user",[567,937,938,940],{},[589,939,781],{},": This invalidates the user's current password immediately. They must use the new setup link to regain access.",[626,942],{},[571,944,946],{"id":945},"multi-project-login","Multi-Project Login",[567,948,949],{},"There's no dedicated organisation\u002Fproject selection page. When a user with access to multiple organisations or projects logs in, TentoCMS automatically picks the first available organisation and, within it, the first available project, then takes them straight to the dashboard.",[578,951,953],{"id":952},"login-flow","Login Flow",[703,955,956,962,965],{},[586,957,958,959],{},"Enter email and password at ",[612,960,961],{},"\u002Flogin",[586,963,964],{},"The app auto-selects the user's first available organisation and project",[586,966,967],{},"Redirected directly to the dashboard for that org\u002Fproject",[567,969,970],{},"To work in a different organisation or project, switch after logging in (see below).",[578,972,974],{"id":973},"switching-organisations-projects","Switching Organisations & Projects",[567,976,977],{},"Users with access to multiple organisations or projects can switch without re-authenticating:",[703,979,980,987,990],{},[586,981,982,983,986],{},"Click the scope switcher card at the top of the ",[589,984,985],{},"sidebar"," (shows the current organisation and project)",[586,988,989],{},"Select a different organisation or project from the dropdown",[586,991,992],{},"You're taken to the new organisation\u002Fproject context — no full page reload is needed",[567,994,995,997],{},[589,996,757],{},": Your role may differ between projects.",[626,999],{},[571,1001,1003],{"id":1002},"session-management","Session Management",[578,1005,1007],{"id":1006},"session-details","Session Details",[583,1009,1010,1016,1022,1028],{},[586,1011,1012,1015],{},[589,1013,1014],{},"Storage",": D1 database (for strong consistency)",[586,1017,1018,1021],{},[589,1019,1020],{},"Duration",": 7 days",[586,1023,1024,1027],{},[589,1025,1026],{},"Refresh",": Automatic sliding window (refreshed when \u003C 1 day remaining)",[586,1029,1030,1033,1034,1037,1038,1041,1042,1045,1046,1049,1050,1053],{},[589,1031,1032],{},"Cookie",": HTTP-only, secure, and ",[612,1035,1036],{},"SameSite=Strict"," when a ",[612,1039,1040],{},"COOKIE_DOMAIN"," is configured (production's custom domain) or ",[612,1043,1044],{},"SameSite=None"," when it isn't (e.g. staging's ",[612,1047,1048],{},"*.workers.dev","\u002F",[612,1051,1052],{},"*.pages.dev"," origins, which are cross-site relative to each other)",[578,1055,1057],{"id":1056},"why-d1-instead-of-kv","Why D1 Instead of KV?",[567,1059,1060],{},"Cloudflare KV has eventual consistency (up to 60 seconds propagation). This causes race conditions where:",[703,1062,1063,1066,1069],{},[586,1064,1065],{},"User logs in (session written to KV in region A)",[586,1067,1068],{},"User immediately navigates (request hits region B)",[586,1070,1071],{},"Session doesn't exist yet in region B → user appears logged out",[567,1073,1074],{},"D1 provides strong consistency required for authentication.",[626,1076],{},[571,1078,1080],{"id":1079},"api-keys","API Keys",[567,1082,1083,1084,1089,1090,1093],{},"API keys authenticate requests to the ",[1085,1086,1088],"a",{"href":1087},"..\u002Fapi\u002Foverview","Public REST API",". They are managed in the admin UI under ",[589,1091,1092],{},"Settings → API Keys",".",[578,1095,1097],{"id":1096},"creating-an-api-key","Creating an API key",[703,1099,1100,1109,1118,1121],{},[586,1101,1102,1103,1105,1106,1108],{},"Sign in with an ",[589,1104,624],{}," account (creating live\u002Fproduction keys requires the ",[589,1107,624],{}," role).",[586,1110,1111,1112,1114,1115,1093],{},"Go to ",[589,1113,1092],{}," and click ",[589,1116,1117],{},"Create API Key",[586,1119,1120],{},"Give the key a name, choose its access level, and optionally set an expiry date.",[586,1122,1123,1126],{},[589,1124,1125],{},"Copy the key immediately"," — the full key is shown only once and cannot be retrieved later.",[578,1128,1130],{"id":1129},"key-types-access-levels","Key types & access levels",[633,1132,1133,1149],{},[636,1134,1135],{},[639,1136,1137,1140,1143,1146],{},[642,1138,1139],{},"Type \u002F level",[642,1141,1142],{},"Prefix",[642,1144,1145],{},"Access",[642,1147,1148],{},"Who can create",[649,1150,1151,1166,1181],{},[639,1152,1153,1156,1161,1164],{},[654,1154,1155],{},"Production, public",[654,1157,1158],{},[612,1159,1160],{},"tento_pk_",[654,1162,1163],{},"Read-only (safe for client-side use)",[654,1165,688],{},[639,1167,1168,1171,1176,1179],{},[654,1169,1170],{},"Production, secret",[654,1172,1173],{},[612,1174,1175],{},"tento_sk_",[654,1177,1178],{},"Read + write (server-side only; requires at least one permission)",[654,1180,688],{},[639,1182,1183,1186,1191,1194],{},[654,1184,1185],{},"Preview",[654,1187,1188],{},[612,1189,1190],{},"preview_",[654,1192,1193],{},"Fetch draft content in preview mode",[654,1195,1196],{},"Publisher or higher",[567,1198,1199,1200,1093],{},"Store keys as environment variables — never commit them to version control. For rate limits and error codes, see ",[1085,1201,1203],{"href":1202},"..\u002Fapi\u002Flimits-and-errors","Limits & Errors",[626,1205],{},[571,1207,1209],{"id":1208},"api-endpoints","API Endpoints",[1211,1212,1213],"blockquote",{},[567,1214,1215,1217,1218,1221,1222,1225,1226,1229,1230,1093],{},[589,1216,757],{},": The paths below still use ",[612,1219,1220],{},"tenant"," in their route names (",[612,1223,1224],{},"\u002Fswitch-tenant",", ",[612,1227,1228],{},"\u002Fadmin\u002Ftenant-users",") — this is legacy naming from before the organisation\u002Fproject model landed and hasn't been renamed. Functionally, they operate on the current ",[589,1231,1232],{},"project",[578,1234,1236],{"id":1235},"public-endpoints-no-auth-required","Public Endpoints (No Auth Required)",[633,1238,1239,1252],{},[636,1240,1241],{},[639,1242,1243,1246,1249],{},[642,1244,1245],{},"Endpoint",[642,1247,1248],{},"Method",[642,1250,1251],{},"Description",[649,1253,1254,1267,1279,1291],{},[639,1255,1256,1261,1264],{},[654,1257,1258],{},[612,1259,1260],{},"\u002Fapi\u002Fv1\u002Fauth\u002Flogin",[654,1262,1263],{},"POST",[654,1265,1266],{},"Authenticate with email\u002Fpassword",[639,1268,1269,1274,1276],{},[654,1270,1271],{},[612,1272,1273],{},"\u002Fapi\u002Fv1\u002Fauth\u002Fsetup-password",[654,1275,1263],{},[654,1277,1278],{},"Set password with setup token",[639,1280,1281,1286,1288],{},[654,1282,1283],{},[612,1284,1285],{},"\u002Fapi\u002Fv1\u002Fauth\u002Fforgot-password",[654,1287,1263],{},[654,1289,1290],{},"Request password reset",[639,1292,1293,1298,1300],{},[654,1294,1295],{},[612,1296,1297],{},"\u002Fapi\u002Fv1\u002Fauth\u002Freset-password",[654,1299,1263],{},[654,1301,1302],{},"Reset password with token",[578,1304,1306],{"id":1305},"authenticated-endpoints","Authenticated Endpoints",[633,1308,1309,1319],{},[636,1310,1311],{},[639,1312,1313,1315,1317],{},[642,1314,1245],{},[642,1316,1248],{},[642,1318,1251],{},[649,1320,1321,1334,1346,1358],{},[639,1322,1323,1328,1331],{},[654,1324,1325],{},[612,1326,1327],{},"\u002Fapi\u002Fv1\u002Fauth\u002Fme",[654,1329,1330],{},"GET",[654,1332,1333],{},"Get current user and organisation\u002Fproject context",[639,1335,1336,1341,1343],{},[654,1337,1338],{},[612,1339,1340],{},"\u002Fapi\u002Fv1\u002Fauth\u002Flogout",[654,1342,1263],{},[654,1344,1345],{},"End session",[639,1347,1348,1353,1355],{},[654,1349,1350],{},[612,1351,1352],{},"\u002Fapi\u002Fv1\u002Fauth\u002Fswitch-tenant",[654,1354,1263],{},[654,1356,1357],{},"Switch active project",[639,1359,1360,1365,1367],{},[654,1361,1362],{},[612,1363,1364],{},"\u002Fapi\u002Fv1\u002Fauth\u002Fpassword",[654,1366,1263],{},[654,1368,1369],{},"Change password (requires current password)",[578,1371,1373],{"id":1372},"admin-endpoints-admin-role-required","Admin Endpoints (Admin Role Required)",[633,1375,1376,1386],{},[636,1377,1378],{},[639,1379,1380,1382,1384],{},[642,1381,1245],{},[642,1383,1248],{},[642,1385,1251],{},[649,1387,1388,1400,1412,1424,1436,1448,1460,1472],{},[639,1389,1390,1395,1397],{},[654,1391,1392],{},[612,1393,1394],{},"\u002Fapi\u002Fv1\u002Fadmin\u002Ftenant-users",[654,1396,1330],{},[654,1398,1399],{},"List users in the current project",[639,1401,1402,1407,1409],{},[654,1403,1404],{},[612,1405,1406],{},"\u002Fapi\u002Fv1\u002Fadmin\u002Ftenant-users\u002F:id",[654,1408,1330],{},[654,1410,1411],{},"Get user details",[639,1413,1414,1419,1421],{},[654,1415,1416],{},[612,1417,1418],{},"\u002Fapi\u002Fv1\u002Fadmin\u002Ftenant-users\u002Fadmin-tenants",[654,1420,1330],{},[654,1422,1423],{},"Get projects where current user is admin",[639,1425,1426,1431,1433],{},[654,1427,1428],{},[612,1429,1430],{},"\u002Fapi\u002Fv1\u002Fadmin\u002Ftenant-users\u002Finvite",[654,1432,1263],{},[654,1434,1435],{},"Invite user to current project",[639,1437,1438,1443,1445],{},[654,1439,1440],{},[612,1441,1442],{},"\u002Fapi\u002Fv1\u002Fadmin\u002Ftenant-users\u002Finvite-multi",[654,1444,1263],{},[654,1446,1447],{},"Invite user to multiple projects",[639,1449,1450,1454,1457],{},[654,1451,1452],{},[612,1453,1406],{},[654,1455,1456],{},"PUT",[654,1458,1459],{},"Update user role",[639,1461,1462,1466,1469],{},[654,1463,1464],{},[612,1465,1406],{},[654,1467,1468],{},"DELETE",[654,1470,1471],{},"Remove user from project",[639,1473,1474,1479,1481],{},[654,1475,1476],{},[612,1477,1478],{},"\u002Fapi\u002Fv1\u002Fadmin\u002Ftenant-users\u002F:id\u002Freset-password",[654,1480,1263],{},[654,1482,1483],{},"Generate password reset token",[626,1485],{},[571,1487,1489],{"id":1488},"security-considerations","Security Considerations",[578,1491,1493],{"id":1492},"password-security","Password Security",[583,1495,1496,1502,1508],{},[586,1497,1498,1501],{},[589,1499,1500],{},"Hashing",": PBKDF2-SHA256 at the maximum iteration count the Cloudflare Workers platform allows",[586,1503,1504,1507],{},[589,1505,1506],{},"Salt",": 128-bit random salt per password",[586,1509,1510,1513],{},[589,1511,1512],{},"Verification",": Timing-safe comparison to prevent timing attacks",[578,1515,1517],{"id":1516},"rate-limiting","Rate Limiting",[583,1519,1520,1526,1540],{},[586,1521,1522,1525],{},[589,1523,1524],{},"Login attempts",": 3 per IP and 5 per email per 30 minutes, with exponential lockout (5 min → 15 min → 1 hour → 24 hours) on repeated failures",[586,1527,1528,1531,1532,1535,1536,1539],{},[589,1529,1530],{},"Exceeded limit",": Returns 429 (",[612,1533,1534],{},"RATE_LIMITED",") with a ",[612,1537,1538],{},"retryAfter"," value (seconds) in the error body",[586,1541,1542,1545,1546],{},[589,1543,1544],{},"API rate limits",": see ",[1085,1547,1203],{"href":1202},[578,1549,1551],{"id":1550},"token-security","Token Security",[583,1553,1554,1560,1566],{},[586,1555,1556,1559],{},[589,1557,1558],{},"Setup\u002FReset tokens",": 32 random bytes, hex-encoded to a 64-character string",[586,1561,1562,1565],{},[589,1563,1564],{},"Expiry",": 1 hour",[586,1567,1568,1571],{},[589,1569,1570],{},"Single use",": Cleared after successful password set",[626,1573],{},[571,1575,54],{"id":1576},"troubleshooting",[578,1578,1580],{"id":1579},"invalid-or-expired-setup-link","\"Invalid or expired setup link\"",[567,1582,1583],{},"The password setup token has expired or already been used.",[567,1585,1586,1589],{},[589,1587,1588],{},"Solution",": Ask your administrator to generate a new password reset link.",[578,1591,1593],{"id":1592},"this-link-is-missing-required-information","\"This link is missing required information\"",[567,1595,1596],{},"The URL is incomplete or the token parameter is missing.",[567,1598,1599,1601],{},[589,1600,1588],{},": Ensure you're using the complete URL provided by your administrator.",[578,1603,1605],{"id":1604},"user-appears-logged-out-after-login","User appears logged out after login",[567,1607,1608],{},"This can happen if there's a cookie issue or session problem.",[567,1610,1611,1614],{},[589,1612,1613],{},"Solutions",":",[703,1616,1617,1620,1623],{},[586,1618,1619],{},"Clear browser cookies and try again",[586,1621,1622],{},"Ensure cookies are enabled",[586,1624,1625],{},"Try a different browser",[578,1627,1629],{"id":1628},"cannot-access-certain-pages","Cannot access certain pages",[567,1631,1632],{},"Your role may not have permission for that feature.",[567,1634,1635,1637],{},[589,1636,1588],{},": Contact your administrator to request appropriate role assignment.",[626,1639],{},[571,1641,1643],{"id":1642},"future-enhancements","Future Enhancements",[567,1645,1646],{},"The following features are planned for future releases:",[583,1648,1649,1655,1661,1667,1673],{},[586,1650,1651,1654],{},[589,1652,1653],{},"Email notifications",": Automatic sending of invitation and reset emails",[586,1656,1657,1660],{},[589,1658,1659],{},"OAuth\u002FSSO",": Google, GitHub, SAML authentication",[586,1662,1663,1666],{},[589,1664,1665],{},"Self-service password reset",": Email-based recovery without admin intervention",[586,1668,1669,1672],{},[589,1670,1671],{},"User activity logging",": Last login tracking, session history",[586,1674,1675,1678],{},[589,1676,1677],{},"Bulk user import",": CSV upload for multiple users",{"title":1680,"searchDepth":1681,"depth":1681,"links":1682},"",2,[1683,1687,1688,1692,1696,1700,1704,1708,1713,1718,1724],{"id":573,"depth":1681,"text":38,"children":1684},[1685],{"id":580,"depth":1686,"text":581},3,{"id":630,"depth":1681,"text":631},{"id":696,"depth":1681,"text":697,"children":1689},[1690,1691],{"id":700,"depth":1686,"text":701},{"id":803,"depth":1686,"text":804},{"id":864,"depth":1681,"text":865,"children":1693},[1694,1695],{"id":868,"depth":1686,"text":869},{"id":906,"depth":1686,"text":907},{"id":945,"depth":1681,"text":946,"children":1697},[1698,1699],{"id":952,"depth":1686,"text":953},{"id":973,"depth":1686,"text":974},{"id":1002,"depth":1681,"text":1003,"children":1701},[1702,1703],{"id":1006,"depth":1686,"text":1007},{"id":1056,"depth":1686,"text":1057},{"id":1079,"depth":1681,"text":1080,"children":1705},[1706,1707],{"id":1096,"depth":1686,"text":1097},{"id":1129,"depth":1686,"text":1130},{"id":1208,"depth":1681,"text":1209,"children":1709},[1710,1711,1712],{"id":1235,"depth":1686,"text":1236},{"id":1305,"depth":1686,"text":1306},{"id":1372,"depth":1686,"text":1373},{"id":1488,"depth":1681,"text":1489,"children":1714},[1715,1716,1717],{"id":1492,"depth":1686,"text":1493},{"id":1516,"depth":1686,"text":1517},{"id":1550,"depth":1686,"text":1551},{"id":1576,"depth":1681,"text":54,"children":1719},[1720,1721,1722,1723],{"id":1579,"depth":1686,"text":1580},{"id":1592,"depth":1686,"text":1593},{"id":1604,"depth":1686,"text":1605},{"id":1628,"depth":1686,"text":1629},{"id":1642,"depth":1681,"text":1643},"User management, authentication flows and password management.","md",{},true,{"title":117,"description":1725},"b7rwAY6CXi0G6kIoSmzm4og1hOpFPS0gPv0rko2y-yo",[1732,1734],{"title":113,"path":114,"stem":115,"description":1733,"children":-1},"Using the Schema Builder to create and manage page type and component schemas.",{"title":121,"path":122,"stem":123,"description":1735,"children":-1},"The WYSIWYG editor for writing and formatting content.",1787919217895]