[{"data":1,"prerenderedAt":2393},["ShallowReactive",2],{"navigation_docs":3,"docs-navigation-with-icons":419,"-docs-api-limits-and-errors":561,"-docs-api-limits-and-errors-surround":2388},[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":30,"body":563,"description":2382,"extension":2383,"icon":433,"links":489,"meta":2384,"navigation":2385,"path":31,"seo":2386,"stem":32,"__hash__":2387},"docs\u002Fdocs\u002Fapi\u002Flimits-and-errors.md",{"type":564,"value":565,"toc":2367},"minimark",[566,580,583,588,595,769,786,789,824,829,836,946,949,1002,1008,1011,1014,1021,1070,1073,1075,1079,1198,1211,1213,1217,1268,1291,1348,1358,1360,1364,1367,1427,1431,1492,1499,1552,1563,1739,1745,1844,1875,1879,2037,2041,2130,2134,2211,2221,2225,2331,2363],[567,568,569,570,574,575,579],"p",{},"This is the single source of truth for TentoCMS API rate limits, payload\u002Fsize limits, and error codes. Other docs link here rather than restating these values — ",[571,572,573],"strong",{},"enforced in CI"," by ",[576,577,578],"code",{},"scripts\u002Fdocs\u002Fcanonical-facts-lint.sh",", which fails the build if a registered figure is restated elsewhere.",[581,582],"hr",{},[584,585,587],"h2",{"id":586},"rate-limits","Rate Limits",[567,589,590,591,594],{},"TentoCMS applies rate limits ",[571,592,593],{},"in the Worker"," (a Durable Object, always on), keyed per API key for public traffic. A coarser per-IP ceiling at the Cloudflare WAF sits above the in-worker limits as an anti-DDoS backstop — for a single, well-behaved API key you'll only ever meet the per-key limits below.",[596,597,598,620],"table",{},[599,600,601],"thead",{},[602,603,604,608,611,614,617],"tr",{},[605,606,607],"th",{},"Surface",[605,609,610],{},"Path(s)",[605,612,613],{},"Limit",[605,615,616],{},"Scope",[605,618,619],{},"Layer",[621,622,623,656,688,705,723],"tbody",{},[602,624,625,629,647,650,653],{},[626,627,628],"td",{},"Public reads",[626,630,631,634,635,634,638,634,641,634,644],{},[576,632,633],{},"GET \u002Fapi\u002Fv1\u002Fpages",", ",[576,636,637],{},"\u002Fcollections",[576,639,640],{},"\u002Fblog",[576,642,643],{},"\u002Fmedia",[576,645,646],{},"\u002Fschemas",[626,648,649],{},"1200 req\u002Fmin",[626,651,652],{},"per API key",[626,654,655],{},"Worker¹",[602,657,658,661,680,683,685],{},[626,659,660],{},"Public writes",[626,662,663,666,667,666,670,673,674,634,677],{},[576,664,665],{},"POST","\u002F",[576,668,669],{},"PUT",[576,671,672],{},"DELETE"," ",[576,675,676],{},"\u002Fapi\u002Fv1\u002Fpages",[576,678,679],{},"\u002Fapi\u002Fv1\u002Fcollections",[626,681,682],{},"30 req\u002Fmin",[626,684,652],{},[626,686,687],{},"Worker",[602,689,690,693,698,701,703],{},[626,691,692],{},"Media upload",[626,694,695],{},[576,696,697],{},"POST \u002Fapi\u002Fv1\u002Fmedia",[626,699,700],{},"10 req\u002Fmin",[626,702,652],{},[626,704,687],{},[602,706,707,710,715,718,721],{},[626,708,709],{},"Admin API",[626,711,712],{},[576,713,714],{},"\u002Fapi\u002Fv1\u002Fadmin\u002F*",[626,716,717],{},"300 req\u002Fmin",[626,719,720],{},"per IP",[626,722,687],{},[602,724,725,728,742,763,766],{},[626,726,727],{},"Login & password endpoints",[626,729,730,634,733,634,736,634,739],{},[576,731,732],{},"POST \u002Fapi\u002Fv1\u002Fauth\u002Flogin",[576,734,735],{},"POST \u002Fapi\u002Fv1\u002Fauth\u002Fsetup-password",[576,737,738],{},"POST \u002Fapi\u002Fv1\u002Fauth\u002Fforgot-password",[576,740,741],{},"POST \u002Fapi\u002Fv1\u002Fauth\u002Freset-password",[626,743,744,747,748,634,751,754,755,758,759,762],{},[571,745,746],{},"Three independent layers, all apply",": (1) a Durable-Object request-rate limiter, 10 req\u002Fmin per IP, checked on every request regardless of outcome (",[576,749,750],{},"authRateLimiter()",[576,752,753],{},"apps\u002Fapi\u002Fsrc\u002Fmiddleware\u002FrateLimiter.ts","); (2) for ",[576,756,757],{},"\u002Fauth\u002Flogin"," only, an account-lockout counter of 3 failed attempts\u002FIP + 5 failed attempts\u002Femail per 30 min²; ",[571,760,761],{},"and"," (3) an edge WAF rule, 20 req\u002Fmin per IP, blocking for 5 minutes³",[626,764,765],{},"per IP (layers 1 & 3); per IP & email (layer 2)",[626,767,768],{},"Worker + edge",[567,770,771,772,775,776,779,780,785],{},"¹ Counted ",[571,773,774],{},"per cache miss",": reads served from the edge cache never reach the Worker, so they don't consume your budget. A coarse per-IP WAF ceiling (2000 req\u002Fmin sustained, 400 req\u002F10s burst) sits above the 1200\u002Fmin-per-key read limit as an anti-DDoS backstop. It's set above the per-key limit, so a single API key hits the 1200\u002Fmin limit first — and only that limit returns the ",[576,777,778],{},"RATE_LIMITED"," envelope below; the WAF only matters when many keys share one egress IP (e.g. CI runners or corporate NAT). See ",[781,782,784],"a",{"href":783},"#static-site-generation--bulk-reads","Static-site generation & bulk reads"," below.",[567,787,788],{},"² After repeated failures, the account-lockout layer applies an exponential lockout (5 min → 15 min → 1 hour → 24 hours). This is separate from, and stacked behind, the flat 10 req\u002Fmin-per-IP Durable Object limiter — hitting either one independently returns 429.",[567,790,791,792,795,796,798,799,802,803,806,807,810,811,815,816,819,820,823],{},"³ Added 2026-08-07. Its ceiling is set deliberately ",[571,793,794],{},"above"," the Durable Object limiter, so in normal operation the Worker answers first and you get the ",[576,797,778],{}," envelope below, with ",[576,800,801],{},"Retry-After",". The edge rule is the backstop for traffic that ignores it. The difference matters if you reach it: the WAF blocks at the edge for ",[571,804,805],{},"5 minutes",", returns Cloudflare's own 429 rather than our JSON envelope, and counts per IP rather than per account — so on a shared egress IP (CI runners, corporate NAT) one client's volume can block the others. ",[571,808,809],{},"Back off when you receive a 429; do not retry immediately"," — retries still reach the edge and count towards this ceiling even while the Worker is rejecting them, which is the fastest way to turn a one-minute throttle into a five-minute block. Treat a 429 ",[812,813,814],"em",{},"without"," our ",[576,817,818],{},"error.code"," as an edge block that will not clear early. The rule covers these four credential endpoints only: session endpoints such as ",[576,821,822],{},"\u002Fapi\u002Fv1\u002Fauth\u002Fme"," are excluded, so an edge block here does not invalidate an existing session.",[825,826,828],"h3",{"id":827},"rate-limit-responses","Rate-limit responses",[567,830,831,832,835],{},"When an in-worker limit is exceeded, the API returns ",[571,833,834],{},"HTTP 429"," with:",[837,838,843],"pre",{"className":839,"code":840,"language":841,"meta":842,"style":842},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Please try again later.\",\n    \"retryAfter\": 42\n  }\n}\n","json","",[576,844,845,854,873,897,918,934,940],{"__ignoreMap":842},[846,847,850],"span",{"class":848,"line":849},"line",1,[846,851,853],{"class":852},"sMK4o","{\n",[846,855,857,860,864,867,870],{"class":848,"line":856},2,[846,858,859],{"class":852},"  \"",[846,861,863],{"class":862},"spNyl","error",[846,865,866],{"class":852},"\"",[846,868,869],{"class":852},":",[846,871,872],{"class":852}," {\n",[846,874,876,879,882,884,886,889,892,894],{"class":848,"line":875},3,[846,877,878],{"class":852},"    \"",[846,880,576],{"class":881},"sBMFI",[846,883,866],{"class":852},[846,885,869],{"class":852},[846,887,888],{"class":852}," \"",[846,890,778],{"class":891},"sfazB",[846,893,866],{"class":852},[846,895,896],{"class":852},",\n",[846,898,900,902,905,907,909,911,914,916],{"class":848,"line":899},4,[846,901,878],{"class":852},[846,903,904],{"class":881},"message",[846,906,866],{"class":852},[846,908,869],{"class":852},[846,910,888],{"class":852},[846,912,913],{"class":891},"Too many requests. Please try again later.",[846,915,866],{"class":852},[846,917,896],{"class":852},[846,919,921,923,926,928,930],{"class":848,"line":920},5,[846,922,878],{"class":852},[846,924,925],{"class":881},"retryAfter",[846,927,866],{"class":852},[846,929,869],{"class":852},[846,931,933],{"class":932},"sbssI"," 42\n",[846,935,937],{"class":848,"line":936},6,[846,938,939],{"class":852},"  }\n",[846,941,943],{"class":848,"line":942},7,[846,944,945],{"class":852},"}\n",[567,947,948],{},"Rate-limited responses may include these headers:",[596,950,951,961],{},[599,952,953],{},[602,954,955,958],{},[605,956,957],{},"Header",[605,959,960],{},"Meaning",[621,962,963,972,982,992],{},[602,964,965,969],{},[626,966,967],{},[576,968,801],{},[626,970,971],{},"Seconds to wait before retrying",[602,973,974,979],{},[626,975,976],{},[576,977,978],{},"X-RateLimit-Limit",[626,980,981],{},"Requests allowed in the window",[602,983,984,989],{},[626,985,986],{},[576,987,988],{},"X-RateLimit-Remaining",[626,990,991],{},"Requests remaining in the current window",[602,993,994,999],{},[626,995,996],{},[576,997,998],{},"X-RateLimit-Reset",[626,1000,1001],{},"When the window resets",[567,1003,1004,1005,1007],{},"Handle 429 with exponential backoff, honouring ",[576,1006,801],{}," when present.",[825,1009,784],{"id":1010},"static-site-generation-bulk-reads",[567,1012,1013],{},"The 1200 req\u002Fmin-per-key read limit is set generously so a typical static-site build (Astro, Next.js, Nuxt, etc.) can fetch all of a project's published content in a single pass. Each page or collection item you fetch is one uncached request, so a site with more than ~1200 pages\u002Fitems, or a build that fetches with high concurrency, can exceed the limit within a build.",[567,1015,1016,1017,1020],{},"If your builds hit ",[576,1018,1019],{},"429 RATE_LIMITED",", options in order of preference:",[1022,1023,1024,1048,1054,1064],"ol",{},[1025,1026,1027,1030,1031,1034,1035,1038,1039,1041,1042,1044,1045,1047],"li",{},[571,1028,1029],{},"Catch and back off."," The official client throws ",[576,1032,1033],{},"TentoRateLimitError"," on a ",[576,1036,1037],{},"429",", exposing ",[576,1040,925],{}," (seconds, from the ",[576,1043,801],{}," header). Catch it, wait ",[576,1046,925],{},", and retry — rather than letting the build fail. Building your own client? Do the same, using exponential backoff.",[1025,1049,1050,1053],{},[571,1051,1052],{},"Reduce fetch concurrency"," in your build so requests spread across the minute instead of bursting (e.g. lower your generator's parallelism \u002F request-batch size).",[1025,1055,1056,1059,1060,1063],{},[571,1057,1058],{},"Fetch in bulk, not per-item."," Use the list endpoints with ",[576,1061,1062],{},"limit"," (max 100 per page) and paginate, rather than one request per item, to cut total request count dramatically.",[1025,1065,1066,1069],{},[571,1067,1068],{},"Lower your generation frequency"," if you rebuild on a schedule — a very high rebuild cadence multiplies read volume.",[567,1071,1072],{},"If you have a legitimate need that exceeds these limits (a very large catalogue, or many builds sharing one egress IP such as a CI runner), contact your TentoCMS administrator — limits can be reviewed per project.",[581,1074],{},[584,1076,1078],{"id":1077},"payload-size-limits","Payload & Size Limits",[596,1080,1081,1093],{},[599,1082,1083],{},[602,1084,1085,1087,1090],{},[605,1086,613],{},[605,1088,1089],{},"Value",[605,1091,1092],{},"On exceed",[621,1094,1095,1114,1130,1143,1154],{},[602,1096,1097,1104,1109],{},[626,1098,1099,1100,1103],{},"Request content size (",[576,1101,1102],{},"fields","\u002Fcontent JSON on page & collection writes)",[626,1105,1106],{},[571,1107,1108],{},"1 MB",[626,1110,1111],{},[576,1112,1113],{},"413 PAYLOAD_TOO_LARGE",[602,1115,1116,1119,1124],{},[626,1117,1118],{},"Media upload — images",[626,1120,1121],{},[571,1122,1123],{},"10 MB",[626,1125,1126,1129],{},[576,1127,1128],{},"400 INVALID_FILE_CONTENT"," \u002F validation error",[602,1131,1132,1135,1140],{},[626,1133,1134],{},"Media upload — documents (PDF)",[626,1136,1137],{},[571,1138,1139],{},"50 MB",[626,1141,1142],{},"validation error",[602,1144,1145,1148,1152],{},[626,1146,1147],{},"Media upload — video (MP4\u002FWebM)",[626,1149,1150],{},[571,1151,1139],{},[626,1153,1142],{},[602,1155,1156,1162,1172],{},[626,1157,1158,1159,1161],{},"List ",[576,1160,1062],{}," query param",[626,1163,1164,1165,1168,1169],{},"default ",[571,1166,1167],{},"20",", max ",[571,1170,1171],{},"100",[626,1173,1174,1177,1178,1181,1182,1177,1185,1188,1189,1192,1193,1197],{},[576,1175,1176],{},"400 INVALID_PAGINATION"," on ",[576,1179,1180],{},"GET \u002Fpages"," (",[576,1183,1184],{},"INVALID_QUERY",[576,1186,1187],{},"GET \u002Fblog","; ",[576,1190,1191],{},"GET \u002Fcollections\u002F:type"," has no equivalent code — see ",[781,1194,1196],{"href":1195},"#the-raw-zod-validator-shape","below",")",[567,1199,1200,1201,634,1204,634,1207,1210],{},"Allowed media upload types are a fixed set (common image types, ",[576,1202,1203],{},"application\u002Fpdf",[576,1205,1206],{},"video\u002Fmp4",[576,1208,1209],{},"video\u002Fwebm","). Other types — including ZIP archives — are rejected.",[581,1212],{},[584,1214,1216],{"id":1215},"idempotency-public-write-endpoints","Idempotency (public write endpoints)",[567,1218,1219,1220,1222,1223,1181,1226,634,1228,634,1230,1232,1233,666,1236,1239,1240,1181,1247,1250,1251,666,1254,1257,1258,666,1261,666,1264,1267],{},"Every write request on ",[576,1221,676],{}," and ",[576,1224,1225],{},"\u002Fapi\u002Fv1\u002Fcollections\u002F:type",[576,1227,665],{},[576,1229,669],{},[576,1231,672],{},", plus the ",[576,1234,1235],{},"\u002Fpublish",[576,1237,1238],{},"\u002Funpublish"," actions) ",[571,1241,1242,1243,1246],{},"requires an ",[576,1244,1245],{},"Idempotency-Key"," header",[576,1248,1249],{},"apps\u002Fapi\u002Fsrc\u002Fmiddleware\u002Fidempotency.ts",", applied in ",[576,1252,1253],{},"pages-write.ts",[576,1255,1256],{},"collections-write.ts","). ",[576,1259,1260],{},"GET",[576,1262,1263],{},"HEAD",[576,1265,1266],{},"OPTIONS"," requests are exempt.",[567,1269,1270,1275,1276,1279,1280,1282,1283,1286,1287,1290],{},[571,1271,1272,1274],{},[576,1273,697],{}," (media upload) is the one exception"," — it deliberately does ",[571,1277,1278],{},"not"," require or check an ",[576,1281,1245],{},", because its ",[576,1284,1285],{},"multipart\u002Fform-data"," body can't be reliably hashed as text for the replay-detection logic below (see the comment in ",[576,1288,1289],{},"apps\u002Fapi\u002Fsrc\u002Froutes\u002Fpublic\u002Fmedia-write.ts",").",[1292,1293,1294,1304,1312,1325,1336],"ul",{},[1025,1295,1296,1297,1300,1301],{},"Missing header → ",[576,1298,1299],{},"400 BAD_REQUEST",": ",[576,1302,1303],{},"\"Idempotency-Key header is required for write operations\"",[1025,1305,1306,1307,1300,1309],{},"Header longer than 256 characters → ",[576,1308,1299],{},[576,1310,1311],{},"\"Idempotency-Key must be a non-empty string with max 256 characters\"",[1025,1313,1314,1315,1318,1319,1300,1322],{},"Replaying the same key with the ",[571,1316,1317],{},"same"," request body while the original is still processing → ",[576,1320,1321],{},"409 CONFLICT",[576,1323,1324],{},"\"Request with this idempotency key is currently being processed\"",[1025,1326,1327,1328,1331,1332,1335],{},"Replaying the same key with the same request body ",[571,1329,1330],{},"after"," the original completed → the original response is replayed verbatim, with an added ",[576,1333,1334],{},"X-Idempotency-Replay: true"," header (no re-execution)",[1025,1337,1338,1339,1342,1343,1300,1345],{},"Replaying the same key with a ",[571,1340,1341],{},"different"," request body → ",[576,1344,1321],{},[576,1346,1347],{},"\"Idempotency key already used with different request body\"",[567,1349,1350,1351,1181,1354,1357],{},"Idempotency keys are scoped per project and expire after ",[576,1352,1353],{},"IDEMPOTENCY_TTL_HOURS",[576,1355,1356],{},"@tentocms\u002Fshared","). Pick a key that's unique per logical operation (e.g. a UUID you generate client-side per create\u002Fupdate attempt) and reuse it only when retrying that exact same operation.",[581,1359],{},[584,1361,1363],{"id":1362},"error-codes","Error Codes",[567,1365,1366],{},"Most errors use the envelope:",[837,1368,1370],{"className":839,"code":1369,"language":841,"meta":842,"style":842},"{ \"error\": { \"code\": \"ERROR_CODE\", \"message\": \"Human-readable description\" } }\n",[576,1371,1372],{"__ignoreMap":842},[846,1373,1374,1377,1379,1381,1383,1385,1388,1390,1392,1394,1396,1398,1401,1403,1406,1408,1410,1412,1414,1416,1419,1421,1424],{"class":848,"line":849},[846,1375,1376],{"class":852},"{",[846,1378,888],{"class":852},[846,1380,863],{"class":862},[846,1382,866],{"class":852},[846,1384,869],{"class":852},[846,1386,1387],{"class":852}," {",[846,1389,888],{"class":852},[846,1391,576],{"class":881},[846,1393,866],{"class":852},[846,1395,869],{"class":852},[846,1397,888],{"class":852},[846,1399,1400],{"class":891},"ERROR_CODE",[846,1402,866],{"class":852},[846,1404,1405],{"class":852},",",[846,1407,888],{"class":852},[846,1409,904],{"class":881},[846,1411,866],{"class":852},[846,1413,869],{"class":852},[846,1415,888],{"class":852},[846,1417,1418],{"class":891},"Human-readable description",[846,1420,866],{"class":852},[846,1422,1423],{"class":852}," }",[846,1425,1426],{"class":852}," }\n",[825,1428,1430],{"id":1429},"the-raw-zod-validator-shape","The raw Zod-validator shape",[567,1432,1433,1436,1437,1440,1441,1444,1445,1448,1449,1451,1452,1455,1456,1459,1460,666,1463,1466,1467,1469,1470,1473,1474,1477,1478,666,1481,666,1483,1485,1486,666,1489,1290],{},[571,1434,1435],{},"This envelope is not universal."," Several routes validate their request body\u002Fquery with ",[576,1438,1439],{},"zValidator(...)"," from ",[576,1442,1443],{},"@hono\u002Fzod-validator"," and pass no custom error hook. On those routes a validation failure skips the envelope above entirely and returns the library's raw default shape instead: ",[576,1446,1447],{},"{success:false, error:\u003CZodError>}",". There is no ",[576,1450,818],{},". Zod v4's ",[576,1453,1454],{},"ZodError.issues"," array is a non-enumerable property, so it never survives ",[576,1457,1458],{},"JSON.stringify()"," — only ",[576,1461,1462],{},"error.name",[576,1464,1465],{},"error.message"," do, and ",[576,1468,1465],{}," is itself a JSON-encoded ",[571,1471,1472],{},"string"," you must ",[576,1475,1476],{},"JSON.parse()"," to read the structured per-field issues (",[576,1479,1480],{},"path",[576,1482,576],{},[576,1484,904],{},", plus check-specific fields like ",[576,1487,1488],{},"expected",[576,1490,1491],{},"origin",[567,1493,1494,1495,1498],{},"Confirmed affected routes (not exhaustive — check for a third ",[576,1496,1497],{},"zValidator"," argument to be sure of any given route):",[1292,1500,1501,1522],{},[1025,1502,1503,1504,666,1506,1177,1508,1222,1510,1181,1512,634,1515,1517,1518,1521],{},"The public write API: ",[576,1505,665],{},[576,1507,669],{},[576,1509,676],{},[576,1511,1225],{},[576,1513,1514],{},"apps\u002Fapi\u002Fsrc\u002Froutes\u002Fpublic\u002Fpages-write.ts",[576,1516,1256],{},") — malformed bodies here get the raw shape, not ",[576,1519,1520],{},"VALIDATION_ERROR",".",[1025,1523,1524,1527,1528,666,1531,666,1533,1536,1537,1540,1541,1222,1543,1545,1546,666,1549,1551],{},[576,1525,1526],{},"GET \u002Fapi\u002Fv1\u002Fcollections\u002F:type","'s ",[576,1529,1530],{},"page",[576,1532,1062],{},[576,1534,1535],{},"sort"," query validation (",[576,1538,1539],{},"apps\u002Fapi\u002Fsrc\u002Froutes\u002Fpublic\u002Fcollections.ts",") — unlike ",[576,1542,1180],{},[576,1544,1187],{},", which validate by hand and return proper ",[576,1547,1548],{},"INVALID_PAGINATION",[576,1550,1184],{}," envelopes (see the table above).",[567,1553,1554,1555,1558,1559,1562],{},"Example: ",[576,1556,1557],{},"POST \u002Fapi\u002Fv1\u002Fpages"," with ",[576,1560,1561],{},"slug"," omitted from the body:",[837,1564,1566],{"className":839,"code":1565,"language":841,"meta":842,"style":842},"{\n  \"success\": false,\n  \"error\": {\n    \"name\": \"ZodError\",\n    \"message\": \"[\\n  {\\n    \\\"expected\\\": \\\"string\\\",\\n    \\\"code\\\": \\\"invalid_type\\\",\\n    \\\"path\\\": [\\n      \\\"slug\\\"\\n    ],\\n    \\\"message\\\": \\\"Invalid input: expected string, received undefined\\\"\\n  }\\n]\"\n  }\n}\n",[576,1567,1568,1572,1586,1598,1618,1731,1735],{"__ignoreMap":842},[846,1569,1570],{"class":848,"line":849},[846,1571,853],{"class":852},[846,1573,1574,1576,1579,1581,1583],{"class":848,"line":856},[846,1575,859],{"class":852},[846,1577,1578],{"class":862},"success",[846,1580,866],{"class":852},[846,1582,869],{"class":852},[846,1584,1585],{"class":852}," false,\n",[846,1587,1588,1590,1592,1594,1596],{"class":848,"line":875},[846,1589,859],{"class":852},[846,1591,863],{"class":862},[846,1593,866],{"class":852},[846,1595,869],{"class":852},[846,1597,872],{"class":852},[846,1599,1600,1602,1605,1607,1609,1611,1614,1616],{"class":848,"line":899},[846,1601,878],{"class":852},[846,1603,1604],{"class":881},"name",[846,1606,866],{"class":852},[846,1608,869],{"class":852},[846,1610,888],{"class":852},[846,1612,1613],{"class":891},"ZodError",[846,1615,866],{"class":852},[846,1617,896],{"class":852},[846,1619,1620,1622,1624,1626,1628,1630,1633,1637,1640,1642,1645,1647,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670,1672,1675,1677,1679,1681,1683,1685,1687,1690,1692,1695,1697,1700,1703,1705,1707,1709,1711,1713,1715,1718,1720,1723,1725,1728],{"class":848,"line":920},[846,1621,878],{"class":852},[846,1623,904],{"class":881},[846,1625,866],{"class":852},[846,1627,869],{"class":852},[846,1629,888],{"class":852},[846,1631,1632],{"class":891},"[",[846,1634,1636],{"class":1635},"sTEyZ","\\n",[846,1638,1639],{"class":891},"  {",[846,1641,1636],{"class":1635},[846,1643,1644],{"class":1635},"    \\\"",[846,1646,1488],{"class":891},[846,1648,1649],{"class":1635},"\\\"",[846,1651,1300],{"class":891},[846,1653,1649],{"class":1635},[846,1655,1472],{"class":891},[846,1657,1649],{"class":1635},[846,1659,1405],{"class":891},[846,1661,1636],{"class":1635},[846,1663,1644],{"class":1635},[846,1665,576],{"class":891},[846,1667,1649],{"class":1635},[846,1669,1300],{"class":891},[846,1671,1649],{"class":1635},[846,1673,1674],{"class":891},"invalid_type",[846,1676,1649],{"class":1635},[846,1678,1405],{"class":891},[846,1680,1636],{"class":1635},[846,1682,1644],{"class":1635},[846,1684,1480],{"class":891},[846,1686,1649],{"class":1635},[846,1688,1689],{"class":891},": [",[846,1691,1636],{"class":1635},[846,1693,1694],{"class":1635},"      \\\"",[846,1696,1561],{"class":891},[846,1698,1699],{"class":1635},"\\\"\\n",[846,1701,1702],{"class":891},"    ],",[846,1704,1636],{"class":1635},[846,1706,1644],{"class":1635},[846,1708,904],{"class":891},[846,1710,1649],{"class":1635},[846,1712,1300],{"class":891},[846,1714,1649],{"class":1635},[846,1716,1717],{"class":891},"Invalid input: expected string, received undefined",[846,1719,1699],{"class":1635},[846,1721,1722],{"class":891},"  }",[846,1724,1636],{"class":1635},[846,1726,1727],{"class":891},"]",[846,1729,1730],{"class":852},"\"\n",[846,1732,1733],{"class":848,"line":936},[846,1734,939],{"class":852},[846,1736,1737],{"class":848,"line":942},[846,1738,945],{"class":852},[567,1740,1741,1742,1744],{},"Parsed, ",[576,1743,1465],{}," is:",[837,1746,1748],{"className":839,"code":1747,"language":841,"meta":842,"style":842},"[\n  {\n    \"expected\": \"string\",\n    \"code\": \"invalid_type\",\n    \"path\": [\"slug\"],\n    \"message\": \"Invalid input: expected string, received undefined\"\n  }\n]\n",[576,1749,1750,1755,1760,1778,1796,1818,1834,1838],{"__ignoreMap":842},[846,1751,1752],{"class":848,"line":849},[846,1753,1754],{"class":852},"[\n",[846,1756,1757],{"class":848,"line":856},[846,1758,1759],{"class":852},"  {\n",[846,1761,1762,1764,1766,1768,1770,1772,1774,1776],{"class":848,"line":875},[846,1763,878],{"class":852},[846,1765,1488],{"class":862},[846,1767,866],{"class":852},[846,1769,869],{"class":852},[846,1771,888],{"class":852},[846,1773,1472],{"class":891},[846,1775,866],{"class":852},[846,1777,896],{"class":852},[846,1779,1780,1782,1784,1786,1788,1790,1792,1794],{"class":848,"line":899},[846,1781,878],{"class":852},[846,1783,576],{"class":862},[846,1785,866],{"class":852},[846,1787,869],{"class":852},[846,1789,888],{"class":852},[846,1791,1674],{"class":891},[846,1793,866],{"class":852},[846,1795,896],{"class":852},[846,1797,1798,1800,1802,1804,1806,1809,1811,1813,1815],{"class":848,"line":920},[846,1799,878],{"class":852},[846,1801,1480],{"class":862},[846,1803,866],{"class":852},[846,1805,869],{"class":852},[846,1807,1808],{"class":852}," [",[846,1810,866],{"class":852},[846,1812,1561],{"class":891},[846,1814,866],{"class":852},[846,1816,1817],{"class":852},"],\n",[846,1819,1820,1822,1824,1826,1828,1830,1832],{"class":848,"line":936},[846,1821,878],{"class":852},[846,1823,904],{"class":862},[846,1825,866],{"class":852},[846,1827,869],{"class":852},[846,1829,888],{"class":852},[846,1831,1717],{"class":891},[846,1833,1730],{"class":852},[846,1835,1836],{"class":848,"line":942},[846,1837,939],{"class":852},[846,1839,1841],{"class":848,"line":1840},8,[846,1842,1843],{"class":852},"]\n",[567,1845,1846,1848,1849,1852,1853,1856,1857,1859,1860,1863,1864,1866,1867,666,1870,666,1872,1874],{},[576,1847,1520],{}," is a real code, but it's only emitted by routes that manually call ",[576,1850,1851],{},".safeParse()"," and build the envelope themselves — e.g. media folder-name validation (",[576,1854,1855],{},"apps\u002Fapi\u002Fsrc\u002Froutes\u002Fmedia.ts","), tenant-user invites, admin search — never by a ",[576,1858,1439],{},"-based route with no hook. For page\u002Fcollection\u002Fblog content writes and list-query validation specifically (the routes covered by this document and by ",[576,1861,1862],{},"docs\u002Fadmin-api\u002F{pages,blog}.md","), ",[576,1865,1520],{}," is a documentation error wherever it appears: the real behavior on those specific routes is either the raw shape above, or a specific named code like ",[576,1868,1869],{},"INVALID_CONTENT",[576,1871,1548],{},[576,1873,1184],{}," (all manually-coded envelopes).",[825,1876,1878],{"id":1877},"common-all-endpoints","Common (all endpoints)",[596,1880,1881,1893],{},[599,1882,1883],{},[602,1884,1885,1888,1891],{},[605,1886,1887],{},"Code",[605,1889,1890],{},"HTTP",[605,1892,960],{},[621,1894,1895,1908,1921,1934,1955,1975,1987,1998,2011,2024],{},[602,1896,1897,1902,1905],{},[626,1898,1899],{},[576,1900,1901],{},"UNAUTHORIZED",[626,1903,1904],{},"401",[626,1906,1907],{},"Missing\u002Finvalid\u002Fexpired API key or session",[602,1909,1910,1915,1918],{},[626,1911,1912],{},[576,1913,1914],{},"FORBIDDEN",[626,1916,1917],{},"403",[626,1919,1920],{},"Authenticated but lacking the required role\u002Fpermission",[602,1922,1923,1928,1931],{},[626,1924,1925],{},[576,1926,1927],{},"NOT_FOUND",[626,1929,1930],{},"404",[626,1932,1933],{},"Resource does not exist or is not published",[602,1935,1936,1940,1943],{},[626,1937,1938],{},[576,1939,1520],{},[626,1941,1942],{},"400",[626,1944,1945,1946,1177,1948,1950,1951,1954],{},"Request body\u002Fparams failed schema validation, on routes that validate manually (e.g. media folder names, tenant-user invites, admin search) — ",[571,1947,1278],{},[576,1949,1439],{},"-based routes with no custom hook, which return the ",[781,1952,1953],{"href":1195},"raw shape"," instead",[602,1956,1957,1962,1964],{},[626,1958,1959],{},[576,1960,1961],{},"BAD_REQUEST",[626,1963,1942],{},[626,1965,1966,1967,1969,1970,1974],{},"Missing or malformed ",[576,1968,1245],{}," header on a public write endpoint — see ",[781,1971,1973],{"href":1972},"#idempotency-public-write-endpoints","Idempotency"," above",[602,1976,1977,1982,1984],{},[626,1978,1979],{},[576,1980,1981],{},"INVALID_JSON",[626,1983,1942],{},[626,1985,1986],{},"Request body is not valid JSON",[602,1988,1989,1993,1995],{},[626,1990,1991],{},[576,1992,778],{},[626,1994,1037],{},[626,1996,1997],{},"Rate limit exceeded (see above)",[602,1999,2000,2005,2008],{},[626,2001,2002],{},[576,2003,2004],{},"PAYLOAD_TOO_LARGE",[626,2006,2007],{},"413",[626,2009,2010],{},"Content exceeds the 1 MB size cap",[602,2012,2013,2018,2021],{},[626,2014,2015],{},[576,2016,2017],{},"CONFLICT",[626,2019,2020],{},"409",[626,2022,2023],{},"State conflict (e.g. duplicate slug, version mismatch)",[602,2025,2026,2031,2034],{},[626,2027,2028],{},[576,2029,2030],{},"INTERNAL_ERROR",[626,2032,2033],{},"500",[626,2035,2036],{},"Unexpected server error",[825,2038,2040],{"id":2039},"query-pagination-public-read-endpoints","Query & pagination (public read endpoints)",[596,2042,2043,2053],{},[599,2044,2045],{},[602,2046,2047,2049,2051],{},[605,2048,1887],{},[605,2050,1890],{},[605,2052,960],{},[621,2054,2055,2086,2098,2114],{},[602,2056,2057,2061,2063],{},[626,2058,2059],{},[576,2060,1548],{},[626,2062,1942],{},[626,2064,2065,2067,2068,2070,2071,2073,2074,2076,2077,2079,2080,2082,2083,1197],{},[576,2066,1062],{}," > 100 or ",[576,2069,1530],{}," \u003C 1 — ",[576,2072,1180],{}," only (",[576,2075,1187],{}," uses ",[576,2078,1184],{}," for the same condition; ",[576,2081,1191],{}," has no code at all and returns the ",[781,2084,2085],{"href":1195},"raw Zod-validator shape",[602,2087,2088,2093,2095],{},[626,2089,2090],{},[576,2091,2092],{},"INVALID_SORT_FIELDS",[626,2094,1942],{},[626,2096,2097],{},"Sort field not in the allowed list",[602,2099,2100,2105,2107],{},[626,2101,2102],{},[576,2103,2104],{},"INVALID_FILTER_FIELD",[626,2106,1942],{},[626,2108,2109,2110,2113],{},"Core filter field not allowed (use the ",[576,2111,2112],{},"fields."," prefix for content fields)",[602,2115,2116,2121,2123],{},[626,2117,2118],{},[576,2119,2120],{},"INVALID_JSON_FIELD_PATH",[626,2122,1942],{},[626,2124,2125,2126,2129],{},"Malformed JSON field path in a ",[576,2127,2128],{},"filter[...]"," expression",[825,2131,2133],{"id":2132},"schema-validation-page-types-components","Schema validation (page types & components)",[596,2135,2136,2146],{},[599,2137,2138],{},[602,2139,2140,2142,2144],{},[605,2141,1887],{},[605,2143,1890],{},[605,2145,960],{},[621,2147,2148,2160,2172,2188],{},[602,2149,2150,2155,2157],{},[626,2151,2152],{},[576,2153,2154],{},"INVALID_PAGE_TYPE",[626,2156,1942],{},[626,2158,2159],{},"Referenced page type is invalid\u002Funknown",[602,2161,2162,2167,2169],{},[626,2163,2164],{},[576,2165,2166],{},"UNSUPPORTED_OPTION",[626,2168,1942],{},[626,2170,2171],{},"Field option not supported for that field type",[602,2173,2174,2179,2181],{},[626,2175,2176],{},[576,2177,2178],{},"MISSING_REPEATER_FIELDS",[626,2180,1942],{},[626,2182,2183,2184,2187],{},"A ",[576,2185,2186],{},"repeater"," field is missing its sub-field definitions",[602,2189,2190,2195,2197],{},[626,2191,2192],{},[576,2193,2194],{},"DISALLOWED_REPEATER_FIELD_TYPE",[626,2196,1942],{},[626,2198,2183,2199,2201,2202,634,2205,2208,2209,1197],{},[576,2200,2186],{}," contains a disallowed sub-field type (",[576,2203,2204],{},"componentPicker",[576,2206,2207],{},"nestedComponent",", or nested ",[576,2210,2186],{},[567,2212,2213,2214,1222,2217,2220],{},"See ",[781,2215,26],{"href":2216},".\u002Ffield-types",[781,2218,58],{"href":2219},".\u002Fvalidation"," for the full field-type catalogue and schema rules.",[825,2222,2224],{"id":2223},"content-operations","Content operations",[596,2226,2227,2237],{},[599,2228,2229],{},[602,2230,2231,2233,2235],{},[605,2232,1887],{},[605,2234,1890],{},[605,2236,960],{},[621,2238,2239,2268,2280,2296,2319],{},[602,2240,2241,2246,2248],{},[626,2242,2243],{},[576,2244,2245],{},"DUPLICATE_SLUG",[626,2247,2020],{},[626,2249,2250,2251,1181,2254,2257,2258,666,2261,2264,2265,2267],{},"Slug already exists for that page type — ",[571,2252,2253],{},"admin API only",[576,2255,2256],{},"apps\u002Fapi\u002Fsrc\u002Froutes\u002F{pages,admin\u002Fblog}.ts","). The public write API (",[576,2259,2260],{},"PageWriteService",[576,2262,2263],{},"CollectionWriteService",") returns ",[576,2266,2017],{}," for the same condition instead — see below.",[602,2269,2270,2275,2277],{},[626,2271,2272],{},[576,2273,2274],{},"HAS_REFERENCES",[626,2276,2020],{},[626,2278,2279],{},"Cannot delete — other content references this item",[602,2281,2282,2287,2289],{},[626,2283,2284],{},[576,2285,2286],{},"INVALID_STATUS",[626,2288,1942],{},[626,2290,2291,2292,2295],{},"Operation not valid from the resource's current status (e.g. starting a non-",[576,2293,2294],{},"pending"," migration)",[602,2297,2298,2303,2305],{},[626,2299,2300],{},[576,2301,2302],{},"INVALID_VERSION",[626,2304,1942],{},[626,2306,2307,2308,2311,2312,2315,2316,2318],{},"The ",[576,2309,2310],{},":versionNumber"," path segment on a version-history\u002Frestore\u002Frevert endpoint isn't an integer (",[576,2313,2314],{},"apps\u002Fapi\u002Fsrc\u002Froutes\u002F{pages,collection-items}.ts",") — ",[571,2317,1278],{}," an optimistic-lock mismatch",[602,2320,2321,2326,2328],{},[626,2322,2323],{},[576,2324,2325],{},"INVALID_PREVIEW_KEY",[626,2327,1904],{},[626,2329,2330],{},"Preview key missing or invalid",[567,2332,2333,673,2336,666,2338,2340,2341,666,2343,1177,2345,1222,2347,2349,2350,2352,2353,2356,2357,2359,2360,2362],{},[571,2334,2335],{},"Public write API note:",[576,2337,2260],{},[576,2339,2263],{}," (backing ",[576,2342,665],{},[576,2344,669],{},[576,2346,676],{},[576,2348,1225],{},") use the single ",[576,2351,2017],{}," code (409) for ",[571,2354,2355],{},"both"," a slug conflict and an optimistic-lock version mismatch — they never return ",[576,2358,2245],{}," or ",[576,2361,2302],{},". Those two codes belong to the separate admin schema-management\u002Fcontent endpoints described above.",[2364,2365,2366],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":842,"searchDepth":856,"depth":856,"links":2368},[2369,2373,2374,2375],{"id":586,"depth":856,"text":587,"children":2370},[2371,2372],{"id":827,"depth":875,"text":828},{"id":1010,"depth":875,"text":784},{"id":1077,"depth":856,"text":1078},{"id":1215,"depth":856,"text":1216},{"id":1362,"depth":856,"text":1363,"children":2376},[2377,2378,2379,2380,2381],{"id":1429,"depth":875,"text":1430},{"id":1877,"depth":875,"text":1878},{"id":2039,"depth":875,"text":2040},{"id":2132,"depth":875,"text":2133},{"id":2223,"depth":875,"text":2224},"The single source of truth for rate limits, payload limits, idempotency and error codes.","md",{},true,{"title":30,"description":2382},"h3IFHbmQrX2JDU6etym-r9OFZGIop-gObHFShALji4E",[2389,2391],{"title":26,"path":27,"stem":28,"description":2390,"children":-1},"All 16 field types across 4 categories, with their options and use cases.",{"title":34,"path":35,"stem":36,"description":2392,"children":-1},"Serving media files and the image transformation parameters.",1787919217322]