[{"data":1,"prerenderedAt":3891},["ShallowReactive",2],{"navigation_docs":3,"-docs-products-apps-billing-events":984},[4,8,44,50,86,583,625,918],{"title":5,"path":6,"stem":7},"Home","\u002Fdocs","docs\u002Findex",{"title":9,"path":10,"stem":11,"children":12},"API usage","\u002Fdocs\u002Fapi-usage","docs\u002Fapi-usage\u002Findex",[13,14,20,26,32,38],{"title":9,"path":10,"stem":11},{"title":15,"path":16,"stem":17,"children":18},"Errors","\u002Fdocs\u002Fapi-usage\u002Ferrors","docs\u002Fapi-usage\u002Ferrors\u002Findex",[19],{"title":15,"path":16,"stem":17},{"title":21,"path":22,"stem":23,"children":24},"Retries & idempotency","\u002Fdocs\u002Fapi-usage\u002Fidempotency","docs\u002Fapi-usage\u002Fidempotency\u002Findex",[25],{"title":21,"path":22,"stem":23},{"title":27,"path":28,"stem":29,"children":30},"Pagination & filtering","\u002Fdocs\u002Fapi-usage\u002Fpagination","docs\u002Fapi-usage\u002Fpagination\u002Findex",[31],{"title":27,"path":28,"stem":29},{"title":33,"path":34,"stem":35,"children":36},"Rate limits","\u002Fdocs\u002Fapi-usage\u002Frate-limits","docs\u002Fapi-usage\u002Frate-limits\u002Findex",[37],{"title":33,"path":34,"stem":35},{"title":39,"path":40,"stem":41,"children":42},"Versioning & stability","\u002Fdocs\u002Fapi-usage\u002Fversioning","docs\u002Fapi-usage\u002Fversioning\u002Findex",[43],{"title":39,"path":40,"stem":41},{"title":45,"path":46,"stem":47,"children":48},"What's new","\u002Fdocs\u002Fchangelog","docs\u002Fchangelog\u002Findex",[49],{"title":45,"path":46,"stem":47},{"title":51,"path":52,"stem":53,"children":54},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started\u002Findex",[55,56,62,68,74,80],{"title":51,"path":52,"stem":53},{"title":57,"path":58,"stem":59,"children":60},"Architecture Overview","\u002Fdocs\u002Fgetting-started\u002Farchitecture","docs\u002Fgetting-started\u002Farchitecture\u002Findex",[61],{"title":57,"path":58,"stem":59},{"title":63,"path":64,"stem":65,"children":66},"Glossary","\u002Fdocs\u002Fgetting-started\u002Fglossary","docs\u002Fgetting-started\u002Fglossary\u002Findex",[67],{"title":63,"path":64,"stem":65},{"title":69,"path":70,"stem":71,"children":72},"Platform Overview","\u002Fdocs\u002Fgetting-started\u002Fplatform-overview","docs\u002Fgetting-started\u002Fplatform-overview\u002Findex",[73],{"title":69,"path":70,"stem":71},{"title":75,"path":76,"stem":77,"children":78},"Prerequisites","\u002Fdocs\u002Fgetting-started\u002Fprerequisites","docs\u002Fgetting-started\u002Fprerequisites\u002Findex",[79],{"title":75,"path":76,"stem":77},{"title":81,"path":82,"stem":83,"children":84},"Your First App in 15 Minutes","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002Fgetting-started\u002Fquick-start\u002Findex",[85],{"title":81,"path":82,"stem":83},{"title":87,"path":88,"stem":89,"children":90},"Products","\u002Fdocs\u002Fproducts","docs\u002Fproducts\u002Findex",[91,92,98,170,200,218,254,320,517,565],{"title":87,"path":88,"stem":89},{"title":93,"path":94,"stem":95,"children":96},"AI Studio","\u002Fdocs\u002Fproducts\u002Fai","docs\u002Fproducts\u002Fai\u002Findex",[97],{"title":93,"path":94,"stem":95},{"title":99,"path":100,"stem":101,"children":102},"App Studio","\u002Fdocs\u002Fproducts\u002Fapps","docs\u002Fproducts\u002Fapps\u002Findex",[103,104,110,116,122,128,134,140,146,152,158,164],{"title":99,"path":100,"stem":101},{"title":105,"path":106,"stem":107,"children":108},"App Model","\u002Fdocs\u002Fproducts\u002Fapps\u002Fapp-model","docs\u002Fproducts\u002Fapps\u002Fapp-model\u002Findex",[109],{"title":105,"path":106,"stem":107},{"title":111,"path":112,"stem":113,"children":114},"Auto-generated data APIs","\u002Fdocs\u002Fproducts\u002Fapps\u002Fauto-generated-data-apis","docs\u002Fproducts\u002Fapps\u002Fauto-generated-data-apis\u002Findex",[115],{"title":111,"path":112,"stem":113},{"title":117,"path":118,"stem":119,"children":120},"Billing & Events","\u002Fdocs\u002Fproducts\u002Fapps\u002Fbilling-events","docs\u002Fproducts\u002Fapps\u002Fbilling-events\u002Findex",[121],{"title":117,"path":118,"stem":119},{"title":123,"path":124,"stem":125,"children":126},"Cockpit Integration","\u002Fdocs\u002Fproducts\u002Fapps\u002Fcockpit-integration","docs\u002Fproducts\u002Fapps\u002Fcockpit-integration\u002Findex",[127],{"title":123,"path":124,"stem":125},{"title":129,"path":130,"stem":131,"children":132},"App Model Concept","\u002Fdocs\u002Fproducts\u002Fapps\u002Fconcept","docs\u002Fproducts\u002Fapps\u002Fconcept\u002Findex",[133],{"title":129,"path":130,"stem":131},{"title":135,"path":136,"stem":137,"children":138},"App Lifecycle","\u002Fdocs\u002Fproducts\u002Fapps\u002Flifecycle","docs\u002Fproducts\u002Fapps\u002Flifecycle\u002Findex",[139],{"title":135,"path":136,"stem":137},{"title":141,"path":142,"stem":143,"children":144},"Manifest Reference","\u002Fdocs\u002Fproducts\u002Fapps\u002Fmanifest-reference","docs\u002Fproducts\u002Fapps\u002Fmanifest-reference\u002Findex",[145],{"title":141,"path":142,"stem":143},{"title":147,"path":148,"stem":149,"children":150},"Market Concept","\u002Fdocs\u002Fproducts\u002Fapps\u002Fmarket-concept","docs\u002Fproducts\u002Fapps\u002Fmarket-concept\u002Findex",[151],{"title":147,"path":148,"stem":149},{"title":153,"path":154,"stem":155,"children":156},"Policies","\u002Fdocs\u002Fproducts\u002Fapps\u002Fpolicies","docs\u002Fproducts\u002Fapps\u002Fpolicies\u002Findex",[157],{"title":153,"path":154,"stem":155},{"title":159,"path":160,"stem":161,"children":162},"Schema migrations","\u002Fdocs\u002Fproducts\u002Fapps\u002Fschema-migrator","docs\u002Fproducts\u002Fapps\u002Fschema-migrator\u002Findex",[163],{"title":159,"path":160,"stem":161},{"title":165,"path":166,"stem":167,"children":168},"Schema Reference","\u002Fdocs\u002Fproducts\u002Fapps\u002Fschema-reference","docs\u002Fproducts\u002Fapps\u002Fschema-reference\u002Findex",[169],{"title":165,"path":166,"stem":167},{"title":171,"path":172,"stem":173,"children":174},"Authentication","\u002Fdocs\u002Fproducts\u002Fauth","docs\u002Fproducts\u002Fauth\u002Findex",[175,176,182,188,194],{"title":171,"path":172,"stem":173},{"title":177,"path":178,"stem":179,"children":180},"API keys","\u002Fdocs\u002Fproducts\u002Fauth\u002Fapi-keys","docs\u002Fproducts\u002Fauth\u002Fapi-keys\u002Findex",[181],{"title":177,"path":178,"stem":179},{"title":183,"path":184,"stem":185,"children":186},"Multi-factor authentication","\u002Fdocs\u002Fproducts\u002Fauth\u002Fmfa","docs\u002Fproducts\u002Fauth\u002Fmfa\u002Findex",[187],{"title":183,"path":184,"stem":185},{"title":189,"path":190,"stem":191,"children":192},"Social sign-in","\u002Fdocs\u002Fproducts\u002Fauth\u002Foauth2","docs\u002Fproducts\u002Fauth\u002Foauth2\u002Findex",[193],{"title":189,"path":190,"stem":191},{"title":195,"path":196,"stem":197,"children":198},"Sessions","\u002Fdocs\u002Fproducts\u002Fauth\u002Fsessions","docs\u002Fproducts\u002Fauth\u002Fsessions\u002Findex",[199],{"title":195,"path":196,"stem":197},{"title":201,"path":202,"stem":203,"children":204},"Events","\u002Fdocs\u002Fproducts\u002Fevents","docs\u002Fproducts\u002Fevents\u002Findex",[205,206,212],{"title":201,"path":202,"stem":203},{"title":207,"path":208,"stem":209,"children":210},"Consuming events","\u002Fdocs\u002Fproducts\u002Fevents\u002Fconsuming-events","docs\u002Fproducts\u002Fevents\u002Fconsuming-events\u002Findex",[211],{"title":207,"path":208,"stem":209},{"title":213,"path":214,"stem":215,"children":216},"Event types","\u002Fdocs\u002Fproducts\u002Fevents\u002Fevent-types","docs\u002Fproducts\u002Fevents\u002Fevent-types\u002Findex",[217],{"title":213,"path":214,"stem":215},{"title":219,"path":220,"stem":221,"children":222},"Integration Studio","\u002Fdocs\u002Fproducts\u002Fintegration-studio","docs\u002Fproducts\u002Fintegration-studio\u002Findex",[223,224,230,236,242,248],{"title":219,"path":220,"stem":221},{"title":225,"path":226,"stem":227,"children":228},"Expression Syntax","\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Fexpression-syntax","docs\u002Fproducts\u002Fintegration-studio\u002Fexpression-syntax\u002Findex",[229],{"title":225,"path":226,"stem":227},{"title":231,"path":232,"stem":233,"children":234},"Node Types","\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Fnode-types","docs\u002Fproducts\u002Fintegration-studio\u002Fnode-types\u002Findex",[235],{"title":231,"path":232,"stem":233},{"title":237,"path":238,"stem":239,"children":240},"Dual-engine architecture","\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Foverview","docs\u002Fproducts\u002Fintegration-studio\u002Foverview\u002Findex",[241],{"title":237,"path":238,"stem":239},{"title":243,"path":244,"stem":245,"children":246},"Triggers","\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Ftriggers","docs\u002Fproducts\u002Fintegration-studio\u002Ftriggers\u002Findex",[247],{"title":243,"path":244,"stem":245},{"title":249,"path":250,"stem":251,"children":252},"Workflow Builder","\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Fworkflow-builder","docs\u002Fproducts\u002Fintegration-studio\u002Fworkflow-builder\u002Findex",[253],{"title":249,"path":250,"stem":251},{"title":255,"path":256,"stem":257,"children":258},"Network","\u002Fdocs\u002Fproducts\u002Fnetwork","docs\u002Fproducts\u002Fnetwork\u002Findex",[259,260,266,272,278,284,290,296,302,308,314],{"title":255,"path":256,"stem":257},{"title":261,"path":262,"stem":263,"children":264},"Caching","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fcaching","docs\u002Fproducts\u002Fnetwork\u002Fcaching\u002Findex",[265],{"title":261,"path":262,"stem":263},{"title":267,"path":268,"stem":269,"children":270},"Content delivery (CDN)","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fcdn","docs\u002Fproducts\u002Fnetwork\u002Fcdn\u002Findex",[271],{"title":267,"path":268,"stem":269},{"title":273,"path":274,"stem":275,"children":276},"Compression","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fcompression","docs\u002Fproducts\u002Fnetwork\u002Fcompression\u002Findex",[277],{"title":273,"path":274,"stem":275},{"title":279,"path":280,"stem":281,"children":282},"DDoS mitigation","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fddos","docs\u002Fproducts\u002Fnetwork\u002Fddos\u002Findex",[283],{"title":279,"path":280,"stem":281},{"title":285,"path":286,"stem":287,"children":288},"revenexx DNS service","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fdns","docs\u002Fproducts\u002Fnetwork\u002Fdns\u002Findex",[289],{"title":285,"path":286,"stem":287},{"title":291,"path":292,"stem":293,"children":294},"Edges","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fedges","docs\u002Fproducts\u002Fnetwork\u002Fedges\u002Findex",[295],{"title":291,"path":292,"stem":293},{"title":297,"path":298,"stem":299,"children":300},"Endpoints","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fendpoints","docs\u002Fproducts\u002Fnetwork\u002Fendpoints\u002Findex",[301],{"title":297,"path":298,"stem":299},{"title":303,"path":304,"stem":305,"children":306},"Regions","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fregions","docs\u002Fproducts\u002Fnetwork\u002Fregions\u002Findex",[307],{"title":303,"path":304,"stem":305},{"title":309,"path":310,"stem":311,"children":312},"Transport Layer Security (TLS)","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Ftls","docs\u002Fproducts\u002Fnetwork\u002Ftls\u002Findex",[313],{"title":309,"path":310,"stem":311},{"title":315,"path":316,"stem":317,"children":318},"Web application firewall (WAF)","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fwaf","docs\u002Fproducts\u002Fnetwork\u002Fwaf\u002Findex",[319],{"title":315,"path":316,"stem":317},{"title":321,"path":322,"stem":323,"children":324},"Experience Studio","\u002Fdocs\u002Fproducts\u002Fsites","docs\u002Fproducts\u002Fsites\u002Findex",[325,326,332,337,343,349,355,361,367,373,379,385,391,397,403,409,487,505,511],{"title":321,"path":322,"stem":323},{"title":327,"path":328,"stem":329,"children":330},"Storefront Architecture","\u002Fdocs\u002Fproducts\u002Fsites\u002Farchitecture","docs\u002Fproducts\u002Fsites\u002Farchitecture\u002Findex",[331],{"title":327,"path":328,"stem":329},{"title":171,"path":333,"stem":334,"children":335},"\u002Fdocs\u002Fproducts\u002Fsites\u002Fauthentication","docs\u002Fproducts\u002Fsites\u002Fauthentication\u002Findex",[336],{"title":171,"path":333,"stem":334},{"title":338,"path":339,"stem":340,"children":341},"Blökkli Blocks","\u002Fdocs\u002Fproducts\u002Fsites\u002Fblokki-blocks","docs\u002Fproducts\u002Fsites\u002Fblokki-blocks\u002Findex",[342],{"title":338,"path":339,"stem":340},{"title":344,"path":345,"stem":346,"children":347},"Checkout","\u002Fdocs\u002Fproducts\u002Fsites\u002Fcheckout","docs\u002Fproducts\u002Fsites\u002Fcheckout\u002Findex",[348],{"title":344,"path":345,"stem":346},{"title":350,"path":351,"stem":352,"children":353},"Deploy from CLI","\u002Fdocs\u002Fproducts\u002Fsites\u002Fdeploy-from-cli","docs\u002Fproducts\u002Fsites\u002Fdeploy-from-cli\u002Findex",[354],{"title":350,"path":351,"stem":352},{"title":356,"path":357,"stem":358,"children":359},"Deploy from Git","\u002Fdocs\u002Fproducts\u002Fsites\u002Fdeploy-from-git","docs\u002Fproducts\u002Fsites\u002Fdeploy-from-git\u002Findex",[360],{"title":356,"path":357,"stem":358},{"title":362,"path":363,"stem":364,"children":365},"Deploy manually","\u002Fdocs\u002Fproducts\u002Fsites\u002Fdeploy-manually","docs\u002Fproducts\u002Fsites\u002Fdeploy-manually\u002Findex",[366],{"title":362,"path":363,"stem":364},{"title":368,"path":369,"stem":370,"children":371},"Deployments","\u002Fdocs\u002Fproducts\u002Fsites\u002Fdeployments","docs\u002Fproducts\u002Fsites\u002Fdeployments\u002Findex",[372],{"title":368,"path":369,"stem":370},{"title":374,"path":375,"stem":376,"children":377},"Develop revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fdevelop","docs\u002Fproducts\u002Fsites\u002Fdevelop\u002Findex",[378],{"title":374,"path":375,"stem":376},{"title":380,"path":381,"stem":382,"children":383},"Domains","\u002Fdocs\u002Fproducts\u002Fsites\u002Fdomains","docs\u002Fproducts\u002Fsites\u002Fdomains\u002Findex",[384],{"title":380,"path":381,"stem":382},{"title":386,"path":387,"stem":388,"children":389},"Frameworks","\u002Fdocs\u002Fproducts\u002Fsites\u002Fframeworks","docs\u002Fproducts\u002Fsites\u002Fframeworks\u002Findex",[390],{"title":386,"path":387,"stem":388},{"title":392,"path":393,"stem":394,"children":395},"Instant rollbacks","\u002Fdocs\u002Fproducts\u002Fsites\u002Finstant-rollbacks","docs\u002Fproducts\u002Fsites\u002Finstant-rollbacks\u002Findex",[396],{"title":392,"path":393,"stem":394},{"title":398,"path":399,"stem":400,"children":401},"Logs","\u002Fdocs\u002Fproducts\u002Fsites\u002Flogs","docs\u002Fproducts\u002Fsites\u002Flogs\u002Findex",[402],{"title":398,"path":399,"stem":400},{"title":404,"path":405,"stem":406,"children":407},"Previews","\u002Fdocs\u002Fproducts\u002Fsites\u002Fpreviews","docs\u002Fproducts\u002Fsites\u002Fpreviews\u002Findex",[408],{"title":404,"path":405,"stem":406},{"title":410,"path":411,"stem":412,"children":413},"Start with Sites","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Findex",[414,415,421,427,433,439,445,451,457,463,469,475,481],{"title":410,"path":411,"stem":412},{"title":416,"path":417,"stem":418,"children":419},"Deploy an Angular app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fangular","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fangular\u002Findex",[420],{"title":416,"path":417,"stem":418},{"title":422,"path":423,"stem":424,"children":425},"Deploy a Astro app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fastro","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fastro\u002Findex",[426],{"title":422,"path":423,"stem":424},{"title":428,"path":429,"stem":430,"children":431},"Deploy a Flutter Web app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fflutter","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fflutter\u002Findex",[432],{"title":428,"path":429,"stem":430},{"title":434,"path":435,"stem":436,"children":437},"Deploy a Next.js app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fnextjs","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fnextjs\u002Findex",[438],{"title":434,"path":435,"stem":436},{"title":440,"path":441,"stem":442,"children":443},"Deploy a Nuxt app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fnuxt","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fnuxt\u002Findex",[444],{"title":440,"path":441,"stem":442},{"title":446,"path":447,"stem":448,"children":449},"Deploy a React Native app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Freact-native","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Freact-native\u002Findex",[450],{"title":446,"path":447,"stem":448},{"title":452,"path":453,"stem":454,"children":455},"Deploy a React app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Freact","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Freact\u002Findex",[456],{"title":452,"path":453,"stem":454},{"title":458,"path":459,"stem":460,"children":461},"Deploy a Remix app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fremix","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fremix\u002Findex",[462],{"title":458,"path":459,"stem":460},{"title":464,"path":465,"stem":466,"children":467},"Deploy a SvelteKit app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fsveltekit","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fsveltekit\u002Findex",[468],{"title":464,"path":465,"stem":466},{"title":470,"path":471,"stem":472,"children":473},"Deploy a TanStack Start app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Ftanstack-start","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Ftanstack-start\u002Findex",[474],{"title":470,"path":471,"stem":472},{"title":476,"path":477,"stem":478,"children":479},"Deploy a Vanilla JS app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fvanilla","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fvanilla\u002Findex",[480],{"title":476,"path":477,"stem":478},{"title":482,"path":483,"stem":484,"children":485},"Deploy a Vue.js app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fvue","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fvue\u002Findex",[486],{"title":482,"path":483,"stem":484},{"title":488,"path":489,"stem":490,"children":491},"Rendering","\u002Fdocs\u002Fproducts\u002Fsites\u002Frendering","docs\u002Fproducts\u002Fsites\u002Frendering\u002Findex",[492,493,499],{"title":488,"path":489,"stem":490},{"title":494,"path":495,"stem":496,"children":497},"Server Side Rendering","\u002Fdocs\u002Fproducts\u002Fsites\u002Frendering\u002Fssr","docs\u002Fproducts\u002Fsites\u002Frendering\u002Fssr\u002Findex",[498],{"title":494,"path":495,"stem":496},{"title":500,"path":501,"stem":502,"children":503},"Static","\u002Fdocs\u002Fproducts\u002Fsites\u002Frendering\u002Fstatic","docs\u002Fproducts\u002Fsites\u002Frendering\u002Fstatic\u002Findex",[504],{"title":500,"path":501,"stem":502},{"title":506,"path":507,"stem":508,"children":509},"Templates","\u002Fdocs\u002Fproducts\u002Fsites\u002Ftemplates","docs\u002Fproducts\u002Fsites\u002Ftemplates\u002Findex",[510],{"title":506,"path":507,"stem":508},{"title":512,"path":513,"stem":514,"children":515},"Theming","\u002Fdocs\u002Fproducts\u002Fsites\u002Ftheming","docs\u002Fproducts\u002Fsites\u002Ftheming\u002Findex",[516],{"title":512,"path":513,"stem":514},{"title":518,"path":519,"stem":520,"children":521},"Storage","\u002Fdocs\u002Fproducts\u002Fstorage","docs\u002Fproducts\u002Fstorage\u002Findex",[522,523,529,535,541,547,553,559],{"title":518,"path":519,"stem":520},{"title":524,"path":525,"stem":526,"children":527},"Folders","\u002Fdocs\u002Fproducts\u002Fstorage\u002Fbuckets","docs\u002Fproducts\u002Fstorage\u002Fbuckets\u002Findex",[528],{"title":524,"path":525,"stem":526},{"title":530,"path":531,"stem":532,"children":533},"Signed URLs and access","\u002Fdocs\u002Fproducts\u002Fstorage\u002Ffile-tokens","docs\u002Fproducts\u002Fstorage\u002Ffile-tokens\u002Findex",[534],{"title":530,"path":531,"stem":532},{"title":536,"path":537,"stem":538,"children":539},"Serve and transform images","\u002Fdocs\u002Fproducts\u002Fstorage\u002Fimages","docs\u002Fproducts\u002Fstorage\u002Fimages\u002Findex",[540],{"title":536,"path":537,"stem":538},{"title":542,"path":543,"stem":544,"children":545},"3D assets","\u002Fdocs\u002Fproducts\u002Fstorage\u002Fmodel-viewer","docs\u002Fproducts\u002Fstorage\u002Fmodel-viewer\u002Findex",[546],{"title":542,"path":543,"stem":544},{"title":548,"path":549,"stem":550,"children":551},"Access control and visibility","\u002Fdocs\u002Fproducts\u002Fstorage\u002Fpermissions","docs\u002Fproducts\u002Fstorage\u002Fpermissions\u002Findex",[552],{"title":548,"path":549,"stem":550},{"title":554,"path":555,"stem":556,"children":557},"Quick start","\u002Fdocs\u002Fproducts\u002Fstorage\u002Fquick-start","docs\u002Fproducts\u002Fstorage\u002Fquick-start\u002Findex",[558],{"title":554,"path":555,"stem":556},{"title":560,"path":561,"stem":562,"children":563},"Upload and manage files","\u002Fdocs\u002Fproducts\u002Fstorage\u002Fupload-download","docs\u002Fproducts\u002Fstorage\u002Fupload-download\u002Findex",[564],{"title":560,"path":561,"stem":562},{"title":566,"path":567,"stem":568,"children":569},"Webhooks","\u002Fdocs\u002Fproducts\u002Fwebhooks","docs\u002Fproducts\u002Fwebhooks\u002Findex",[570,571,577],{"title":566,"path":567,"stem":568},{"title":572,"path":573,"stem":574,"children":575},"Delivery","\u002Fdocs\u002Fproducts\u002Fwebhooks\u002Fdelivery","docs\u002Fproducts\u002Fwebhooks\u002Fdelivery\u002Findex",[576],{"title":572,"path":573,"stem":574},{"title":578,"path":579,"stem":580,"children":581},"Security","\u002Fdocs\u002Fproducts\u002Fwebhooks\u002Fsecurity","docs\u002Fproducts\u002Fwebhooks\u002Fsecurity\u002Findex",[582],{"title":578,"path":579,"stem":580},{"title":584,"path":585,"stem":586,"children":587},"SDKs","\u002Fdocs\u002Fsdks","docs\u002Fsdks\u002Findex",[588,589,595,601,607,613,619],{"title":584,"path":585,"stem":586},{"title":590,"path":591,"stem":592,"children":593},"App SDK","\u002Fdocs\u002Fsdks\u002Fapp-sdk","docs\u002Fsdks\u002Fapp-sdk\u002Findex",[594],{"title":590,"path":591,"stem":592},{"title":596,"path":597,"stem":598,"children":599},"CLI","\u002Fdocs\u002Fsdks\u002Fcli","docs\u002Fsdks\u002Fcli\u002Findex",[600],{"title":596,"path":597,"stem":598},{"title":602,"path":603,"stem":604,"children":605},"Integration Node SDK","\u002Fdocs\u002Fsdks\u002Fintegration-nodes","docs\u002Fsdks\u002Fintegration-nodes\u002Findex",[606],{"title":602,"path":603,"stem":604},{"title":608,"path":609,"stem":610,"children":611},"Node SDK","\u002Fdocs\u002Fsdks\u002Fnode","docs\u002Fsdks\u002Fnode\u002Findex",[612],{"title":608,"path":609,"stem":610},{"title":614,"path":615,"stem":616,"children":617},"PHP SDK","\u002Fdocs\u002Fsdks\u002Fphp","docs\u002Fsdks\u002Fphp\u002Findex",[618],{"title":614,"path":615,"stem":616},{"title":620,"path":621,"stem":622,"children":623},"Web \u002F JavaScript SDK","\u002Fdocs\u002Fsdks\u002Fweb","docs\u002Fsdks\u002Fweb\u002Findex",[624],{"title":620,"path":621,"stem":622},{"title":626,"path":627,"stem":628,"children":629},"Tooling","\u002Fdocs\u002Ftooling","docs\u002Ftooling\u002Findex",[630,631,637,864],{"title":626,"path":627,"stem":628},{"title":632,"path":633,"stem":634,"children":635},"Command Center","\u002Fdocs\u002Ftooling\u002Fcommand-center","docs\u002Ftooling\u002Fcommand-center\u002Findex",[636],{"title":632,"path":633,"stem":634},{"title":638,"path":639,"stem":640,"children":641},"Command line","\u002Fdocs\u002Ftooling\u002Fcommand-line","docs\u002Ftooling\u002Fcommand-line\u002Findex",[642,643,649,654,660,666,672,678,684,828,834,840,846,852,858],{"title":638,"path":639,"stem":640},{"title":644,"path":645,"stem":646,"children":647},"Aliases","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Faliases","docs\u002Ftooling\u002Fcommand-line\u002Faliases\u002Findex",[648],{"title":644,"path":645,"stem":646},{"title":171,"path":650,"stem":651,"children":652},"\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fauthentication","docs\u002Ftooling\u002Fcommand-line\u002Fauthentication\u002Findex",[653],{"title":171,"path":650,"stem":651},{"title":655,"path":656,"stem":657,"children":658},"Commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fcommands","docs\u002Ftooling\u002Fcommand-line\u002Fcommands\u002Findex",[659],{"title":655,"path":656,"stem":657},{"title":661,"path":662,"stem":663,"children":664},"Installation","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Finstallation","docs\u002Ftooling\u002Fcommand-line\u002Finstallation\u002Findex",[665],{"title":661,"path":662,"stem":663},{"title":667,"path":668,"stem":669,"children":670},"Interactive use","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Finteractive","docs\u002Ftooling\u002Fcommand-line\u002Finteractive\u002Findex",[671],{"title":667,"path":668,"stem":669},{"title":673,"path":674,"stem":675,"children":676},"Non-interactive use","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fnon-interactive","docs\u002Ftooling\u002Fcommand-line\u002Fnon-interactive\u002Findex",[677],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681,"children":682},"Project configuration","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fproject-configuration","docs\u002Ftooling\u002Fcommand-line\u002Fproject-configuration\u002Findex",[683],{"title":679,"path":680,"stem":681},{"title":685,"path":686,"stem":687,"children":688},"Command reference","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Findex",[689,690,696,702,708,714,720,726,732,738,744,750,756,762,768,774,780,786,792,798,804,810,816,822],{"title":685,"path":686,"stem":687},{"title":691,"path":692,"stem":693,"children":694},"About commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fabout","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fabout\u002Findex",[695],{"title":691,"path":692,"stem":693},{"title":697,"path":698,"stem":699,"children":700},"Apps commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fapps","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fapps\u002Findex",[701],{"title":697,"path":698,"stem":699},{"title":703,"path":704,"stem":705,"children":706},"Carts commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fcarts","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fcarts\u002Findex",[707],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711,"children":712},"Channels commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fchannels","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fchannels\u002Findex",[713],{"title":709,"path":710,"stem":711},{"title":715,"path":716,"stem":717,"children":718},"Create commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fcreate","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fcreate\u002Findex",[719],{"title":715,"path":716,"stem":717},{"title":721,"path":722,"stem":723,"children":724},"Customers commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fcustomers","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fcustomers\u002Findex",[725],{"title":721,"path":722,"stem":723},{"title":727,"path":728,"stem":729,"children":730},"Deploy commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fdeploy","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fdeploy\u002Findex",[731],{"title":727,"path":728,"stem":729},{"title":733,"path":734,"stem":735,"children":736},"Forms commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fforms","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fforms\u002Findex",[737],{"title":733,"path":734,"stem":735},{"title":739,"path":740,"stem":741,"children":742},"Inventories commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Finventories","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Finventories\u002Findex",[743],{"title":739,"path":740,"stem":741},{"title":745,"path":746,"stem":747,"children":748},"Markets commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fmarkets","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fmarkets\u002Findex",[749],{"title":745,"path":746,"stem":747},{"title":751,"path":752,"stem":753,"children":754},"Order lists commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Forderlists","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Forderlists\u002Findex",[755],{"title":751,"path":752,"stem":753},{"title":757,"path":758,"stem":759,"children":760},"Orders commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Forders","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Forders\u002Findex",[761],{"title":757,"path":758,"stem":759},{"title":763,"path":764,"stem":765,"children":766},"Pages commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fpages","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fpages\u002Findex",[767],{"title":763,"path":764,"stem":765},{"title":769,"path":770,"stem":771,"children":772},"Payments commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fpayments","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fpayments\u002Findex",[773],{"title":769,"path":770,"stem":771},{"title":775,"path":776,"stem":777,"children":778},"Prices commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fprices","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fprices\u002Findex",[779],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783,"children":784},"Products commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fproducts","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fproducts\u002Findex",[785],{"title":781,"path":782,"stem":783},{"title":787,"path":788,"stem":789,"children":790},"Search commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fsearch","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fsearch\u002Findex",[791],{"title":787,"path":788,"stem":789},{"title":793,"path":794,"stem":795,"children":796},"Settings commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fsettings","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fsettings\u002Findex",[797],{"title":793,"path":794,"stem":795},{"title":799,"path":800,"stem":801,"children":802},"Shipping commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fshipping","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fshipping\u002Findex",[803],{"title":799,"path":800,"stem":801},{"title":805,"path":806,"stem":807,"children":808},"Sites commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fsites","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fsites\u002Findex",[809],{"title":805,"path":806,"stem":807},{"title":811,"path":812,"stem":813,"children":814},"Skills commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fskills","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fskills\u002Findex",[815],{"title":811,"path":812,"stem":813},{"title":817,"path":818,"stem":819,"children":820},"Storage commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fstorage","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fstorage\u002Findex",[821],{"title":817,"path":818,"stem":819},{"title":823,"path":824,"stem":825,"children":826},"Tokens commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Ftokens","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Ftokens\u002Findex",[827],{"title":823,"path":824,"stem":825},{"title":829,"path":830,"stem":831,"children":832},"Interactive shell (REPL)","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Frepl","docs\u002Ftooling\u002Fcommand-line\u002Frepl\u002Findex",[833],{"title":829,"path":830,"stem":831},{"title":835,"path":836,"stem":837,"children":838},"Scaffolding","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fscaffolding","docs\u002Ftooling\u002Fcommand-line\u002Fscaffolding\u002Findex",[839],{"title":835,"path":836,"stem":837},{"title":841,"path":842,"stem":843,"children":844},"Scripting & output","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fscripting","docs\u002Ftooling\u002Fcommand-line\u002Fscripting\u002Findex",[845],{"title":841,"path":842,"stem":843},{"title":847,"path":848,"stem":849,"children":850},"Skills","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fskills","docs\u002Ftooling\u002Fcommand-line\u002Fskills\u002Findex",[851],{"title":847,"path":848,"stem":849},{"title":853,"path":854,"stem":855,"children":856},"Full-screen app (TUI)","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Ftui","docs\u002Ftooling\u002Fcommand-line\u002Ftui\u002Findex",[857],{"title":853,"path":854,"stem":855},{"title":859,"path":860,"stem":861,"children":862},"Type generation","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Ftype-generation","docs\u002Ftooling\u002Fcommand-line\u002Ftype-generation\u002Findex",[863],{"title":859,"path":860,"stem":861},{"title":865,"path":866,"stem":867,"children":868},"Model Context Protocol","\u002Fdocs\u002Ftooling\u002Fmcp","docs\u002Ftooling\u002Fmcp\u002Findex",[869,870,876,882,888,894,900,906,912],{"title":865,"path":866,"stem":867},{"title":871,"path":872,"stem":873,"children":874},"revenexx docs MCP in Google Antigravity","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fantigravity","docs\u002Ftooling\u002Fmcp\u002Fantigravity\u002Findex",[875],{"title":871,"path":872,"stem":873},{"title":877,"path":878,"stem":879,"children":880},"revenexx docs MCP in Claude Code","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fclaude-code","docs\u002Ftooling\u002Fmcp\u002Fclaude-code\u002Findex",[881],{"title":877,"path":878,"stem":879},{"title":883,"path":884,"stem":885,"children":886},"revenexx docs MCP in Claude Desktop","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fclaude-desktop","docs\u002Ftooling\u002Fmcp\u002Fclaude-desktop\u002Findex",[887],{"title":883,"path":884,"stem":885},{"title":889,"path":890,"stem":891,"children":892},"revenexx docs MCP in Cursor","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fcursor","docs\u002Ftooling\u002Fmcp\u002Fcursor\u002Findex",[893],{"title":889,"path":890,"stem":891},{"title":895,"path":896,"stem":897,"children":898},"revenexx docs MCP in OpenCode","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fopencode","docs\u002Ftooling\u002Fmcp\u002Fopencode\u002Findex",[899],{"title":895,"path":896,"stem":897},{"title":901,"path":902,"stem":903,"children":904},"revenexx docs MCP in VS Code","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fvscode","docs\u002Ftooling\u002Fmcp\u002Fvscode\u002Findex",[905],{"title":901,"path":902,"stem":903},{"title":907,"path":908,"stem":909,"children":910},"revenexx docs MCP in Windsurf","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fwindsurf","docs\u002Ftooling\u002Fmcp\u002Fwindsurf\u002Findex",[911],{"title":907,"path":908,"stem":909},{"title":913,"path":914,"stem":915,"children":916},"revenexx docs MCP in Zenflow","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fzenflow","docs\u002Ftooling\u002Fmcp\u002Fzenflow\u002Findex",[917],{"title":913,"path":914,"stem":915},{"title":919,"path":920,"stem":921,"children":922},"Tutorials","\u002Fdocs\u002Ftutorials","docs\u002Ftutorials\u002Findex",[923,924,948,954],{"title":919,"path":920,"stem":921},{"title":925,"path":926,"stem":927,"children":928},"Build a revenexx App","\u002Fdocs\u002Ftutorials\u002Fapps","docs\u002Ftutorials\u002Fapps\u002Findex",[929,930,936,942],{"title":925,"path":926,"stem":927},{"title":931,"path":932,"stem":933,"children":934},"Add a data model","\u002Fdocs\u002Ftutorials\u002Fapps\u002Fadd-a-data-model","docs\u002Ftutorials\u002Fapps\u002Fadd-a-data-model\u002Findex",[935],{"title":931,"path":932,"stem":933},{"title":937,"path":938,"stem":939,"children":940},"Build your first app","\u002Fdocs\u002Ftutorials\u002Fapps\u002Fbuild-your-first-app","docs\u002Ftutorials\u002Fapps\u002Fbuild-your-first-app\u002Findex",[941],{"title":937,"path":938,"stem":939},{"title":943,"path":944,"stem":945,"children":946},"Deploy with the CLI","\u002Fdocs\u002Ftutorials\u002Fapps\u002Fdeploy-with-the-cli","docs\u002Ftutorials\u002Fapps\u002Fdeploy-with-the-cli\u002Findex",[947],{"title":943,"path":944,"stem":945},{"title":949,"path":950,"stem":951,"children":952},"Examples","\u002Fdocs\u002Ftutorials\u002Fexamples","docs\u002Ftutorials\u002Fexamples\u002Findex",[953],{"title":949,"path":950,"stem":951},{"title":955,"path":956,"stem":957,"children":958},"Build a storefront Theme","\u002Fdocs\u002Ftutorials\u002Fthemes","docs\u002Ftutorials\u002Fthemes\u002Findex",[959,960,966,972,978],{"title":955,"path":956,"stem":957},{"title":961,"path":962,"stem":963,"children":964},"Build your first Theme","\u002Fdocs\u002Ftutorials\u002Fthemes\u002Fbuild-your-first-theme","docs\u002Ftutorials\u002Fthemes\u002Fbuild-your-first-theme\u002Findex",[965],{"title":961,"path":962,"stem":963},{"title":967,"path":968,"stem":969,"children":970},"Customize blocks","\u002Fdocs\u002Ftutorials\u002Fthemes\u002Fcustomize-blocks","docs\u002Ftutorials\u002Fthemes\u002Fcustomize-blocks\u002Findex",[971],{"title":967,"path":968,"stem":969},{"title":973,"path":974,"stem":975,"children":976},"Deploy your storefront","\u002Fdocs\u002Ftutorials\u002Fthemes\u002Fdeploy-your-storefront","docs\u002Ftutorials\u002Fthemes\u002Fdeploy-your-storefront\u002Findex",[977],{"title":973,"path":974,"stem":975},{"title":979,"path":980,"stem":981,"children":982},"Theme tokens and styling","\u002Fdocs\u002Ftutorials\u002Fthemes\u002Ftheme-tokens-and-styling","docs\u002Ftutorials\u002Fthemes\u002Ftheme-tokens-and-styling\u002Findex",[983],{"title":979,"path":980,"stem":981},{"id":985,"title":117,"body":986,"description":3883,"extension":3884,"landing":3885,"links":3885,"meta":3886,"navigation":2079,"path":118,"seo":3888,"sitemap":3889,"stem":119,"__hash__":3890},"docs\u002Fdocs\u002Fproducts\u002Fapps\u002Fbilling-events\u002Findex.md",{"type":987,"value":988,"toc":3855},"minimark",[989,998,1009,1014,1017,1039,1042,1047,1054,1059,1065,1070,1076,1212,1215,1219,1222,1714,1719,1737,1741,1744,1813,1816,1820,1946,1950,1953,2020,2023,2134,2138,2141,2145,2148,2370,2375,2426,2430,2433,2726,2731,2781,2785,2804,2808,2811,2933,2937,2940,3089,3093,3096,3232,3236,3243,3278,3282,3286,3410,3414,3519,3523,3603,3607,3689,3693,3774,3780,3784,3787,3794,3796,3818,3822,3851],[990,991,992,993,997],"p",{},"This page is for ",[994,995,996],"strong",{},"app developers"," and covers two related-but-separate topics: how your app gets paid (if it does) when distributed through the App Marketplace, and how your app communicates with other apps once it's installed.",[990,999,1000,1003,1004,1008],{},[994,1001,1002],{},"Billing"," is about distribution. If you're shipping a free internal tool, you can mostly skip the first half — declare ",[1005,1006,1007],"code",{},"type: \"free\""," and move on. If you're publishing a paid public app, the billing and plan model below is what you need.",[990,1010,1011,1013],{},[994,1012,201],{}," is about runtime architecture. Apps publish events when interesting things happen (\"order created\", \"customer activated\"). Other apps subscribe to those events to react. This is how the platform stays loosely coupled — if Apps had to know about each other through direct API calls, every new app would have to be wired into every existing one. The event bus makes the integration N+1 instead of N², and it makes the order of installation irrelevant.",[990,1015,1016],{},"A useful rule of thumb for when to use events vs. direct calls vs. workflows:",[1018,1019,1020,1027,1033],"ul",{},[1021,1022,1023,1026],"li",{},[994,1024,1025],{},"Direct API call"," when the caller needs an answer right now (e.g., \"is this product in stock?\"). Synchronous.",[1021,1028,1029,1032],{},[994,1030,1031],{},"Event"," when something happened and other apps should react without the publisher caring who. Asynchronous, loosely coupled, fire-and-forget from the publisher's view.",[1021,1034,1035,1038],{},[994,1036,1037],{},"Integration Studio workflow"," when the reaction involves external systems (ERP, CRM, etc.) or needs durable execution with retries. Async with persistence.",[990,1040,1041],{},"The rest of this page covers each topic in detail.",[1043,1044,1046],"h2",{"id":1045},"app-marketplace-billing-billingjson","App Marketplace Billing (billing.json)",[990,1048,1049,1050,1053],{},"The ",[1005,1051,1052],{},"billing.json"," file defines how your app is priced and distributed in the App Marketplace.",[1055,1056,1058],"h3",{"id":1057},"three-billing-models","Three Billing Models",[990,1060,1049,1061,1064],{},[1005,1062,1063],{},"type"," field picks one of three models, and they line up with three distribution stories: give the app away, sell it on a subscription, or fold it into a larger package the customer already pays for.",[1066,1067,1069],"h4",{"id":1068},"_1-free","1. Free",[990,1071,1072,1073,1075],{},"A free app costs the tenant nothing, carries no usage limits, and still appears in the Marketplace for anyone to install. The declaration is almost empty — a ",[1005,1074,1063],{}," and a support contact:",[1077,1078,1083],"pre",{"className":1079,"code":1080,"language":1081,"meta":1082,"style":1082},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"$schema\": \"https:\u002F\u002Frevenexx.com\u002Fschemas\u002Fbilling.schema.json\",\n  \"type\": \"free\",\n  \"support\": {\n    \"email\": \"support@example.com\",\n    \"url\": \"https:\u002F\u002Fdocs.example.com\"\n  }\n}\n","json","",[1005,1084,1085,1094,1122,1142,1157,1180,1200,1206],{"__ignoreMap":1082},[1086,1087,1090],"span",{"class":1088,"line":1089},"line",1,[1086,1091,1093],{"class":1092},"sMK4o","{\n",[1086,1095,1097,1100,1104,1107,1110,1113,1117,1119],{"class":1088,"line":1096},2,[1086,1098,1099],{"class":1092},"  \"",[1086,1101,1103],{"class":1102},"spNyl","$schema",[1086,1105,1106],{"class":1092},"\"",[1086,1108,1109],{"class":1092},":",[1086,1111,1112],{"class":1092}," \"",[1086,1114,1116],{"class":1115},"sfazB","https:\u002F\u002Frevenexx.com\u002Fschemas\u002Fbilling.schema.json",[1086,1118,1106],{"class":1092},[1086,1120,1121],{"class":1092},",\n",[1086,1123,1125,1127,1129,1131,1133,1135,1138,1140],{"class":1088,"line":1124},3,[1086,1126,1099],{"class":1092},[1086,1128,1063],{"class":1102},[1086,1130,1106],{"class":1092},[1086,1132,1109],{"class":1092},[1086,1134,1112],{"class":1092},[1086,1136,1137],{"class":1115},"free",[1086,1139,1106],{"class":1092},[1086,1141,1121],{"class":1092},[1086,1143,1145,1147,1150,1152,1154],{"class":1088,"line":1144},4,[1086,1146,1099],{"class":1092},[1086,1148,1149],{"class":1102},"support",[1086,1151,1106],{"class":1092},[1086,1153,1109],{"class":1092},[1086,1155,1156],{"class":1092}," {\n",[1086,1158,1160,1163,1167,1169,1171,1173,1176,1178],{"class":1088,"line":1159},5,[1086,1161,1162],{"class":1092},"    \"",[1086,1164,1166],{"class":1165},"sBMFI","email",[1086,1168,1106],{"class":1092},[1086,1170,1109],{"class":1092},[1086,1172,1112],{"class":1092},[1086,1174,1175],{"class":1115},"support@example.com",[1086,1177,1106],{"class":1092},[1086,1179,1121],{"class":1092},[1086,1181,1183,1185,1188,1190,1192,1194,1197],{"class":1088,"line":1182},6,[1086,1184,1162],{"class":1092},[1086,1186,1187],{"class":1165},"url",[1086,1189,1106],{"class":1092},[1086,1191,1109],{"class":1092},[1086,1193,1112],{"class":1092},[1086,1195,1196],{"class":1115},"https:\u002F\u002Fdocs.example.com",[1086,1198,1199],{"class":1092},"\"\n",[1086,1201,1203],{"class":1088,"line":1202},7,[1086,1204,1205],{"class":1092},"  }\n",[1086,1207,1209],{"class":1088,"line":1208},8,[1086,1210,1211],{"class":1092},"}\n",[990,1213,1214],{},"This is the model for internal tools and anything you're shipping at no charge; there's nothing more to configure.",[1066,1216,1218],{"id":1217},"_2-paid-subscription-plans","2. Paid (Subscription Plans)",[990,1220,1221],{},"A paid app is sold through one or more subscription plans, with the platform's billing handling the actual money. You describe the plans — typically a cheaper entry tier and a fuller one — and each plan carries its price, the features it advertises, and any usage limits. The example below offers a capped \"Starter\" alongside an unlimited \"Professional\":",[1077,1223,1225],{"className":1079,"code":1224,"language":1081,"meta":1082,"style":1082},"{\n  \"type\": \"paid\",\n  \"support\": {\n    \"email\": \"support@example.com\",\n    \"url\": \"https:\u002F\u002Fdocs.example.com\"\n  },\n  \"plans\": [\n    {\n      \"id\": \"orders-starter\",\n      \"name\": \"Starter\",\n      \"description\": \"Up to 500 orders\u002Fmonth\",\n      \"currency\": \"EUR\",\n      \"price\": { \"monthly\": 49, \"yearly\": 468 },\n      \"features\": [\"Order management\", \"Basic reporting\"],\n      \"limits\": { \"orders_per_month\": 500 }\n    },\n    {\n      \"id\": \"orders-professional\",\n      \"name\": \"Professional\",\n      \"description\": \"Unlimited orders + ERP integration\",\n      \"currency\": \"EUR\",\n      \"price\": { \"monthly\": 149, \"yearly\": 1428 },\n      \"features\": [\"Unlimited orders\", \"Advanced reporting\", \"ERP sync\"],\n      \"limits\": {}\n    }\n  ]\n}\n",[1005,1226,1227,1231,1250,1262,1280,1296,1301,1315,1320,1342,1363,1384,1405,1451,1485,1514,1520,1525,1545,1565,1585,1604,1643,1683,1697,1703,1709],{"__ignoreMap":1082},[1086,1228,1229],{"class":1088,"line":1089},[1086,1230,1093],{"class":1092},[1086,1232,1233,1235,1237,1239,1241,1243,1246,1248],{"class":1088,"line":1096},[1086,1234,1099],{"class":1092},[1086,1236,1063],{"class":1102},[1086,1238,1106],{"class":1092},[1086,1240,1109],{"class":1092},[1086,1242,1112],{"class":1092},[1086,1244,1245],{"class":1115},"paid",[1086,1247,1106],{"class":1092},[1086,1249,1121],{"class":1092},[1086,1251,1252,1254,1256,1258,1260],{"class":1088,"line":1124},[1086,1253,1099],{"class":1092},[1086,1255,1149],{"class":1102},[1086,1257,1106],{"class":1092},[1086,1259,1109],{"class":1092},[1086,1261,1156],{"class":1092},[1086,1263,1264,1266,1268,1270,1272,1274,1276,1278],{"class":1088,"line":1144},[1086,1265,1162],{"class":1092},[1086,1267,1166],{"class":1165},[1086,1269,1106],{"class":1092},[1086,1271,1109],{"class":1092},[1086,1273,1112],{"class":1092},[1086,1275,1175],{"class":1115},[1086,1277,1106],{"class":1092},[1086,1279,1121],{"class":1092},[1086,1281,1282,1284,1286,1288,1290,1292,1294],{"class":1088,"line":1159},[1086,1283,1162],{"class":1092},[1086,1285,1187],{"class":1165},[1086,1287,1106],{"class":1092},[1086,1289,1109],{"class":1092},[1086,1291,1112],{"class":1092},[1086,1293,1196],{"class":1115},[1086,1295,1199],{"class":1092},[1086,1297,1298],{"class":1088,"line":1182},[1086,1299,1300],{"class":1092},"  },\n",[1086,1302,1303,1305,1308,1310,1312],{"class":1088,"line":1202},[1086,1304,1099],{"class":1092},[1086,1306,1307],{"class":1102},"plans",[1086,1309,1106],{"class":1092},[1086,1311,1109],{"class":1092},[1086,1313,1314],{"class":1092}," [\n",[1086,1316,1317],{"class":1088,"line":1208},[1086,1318,1319],{"class":1092},"    {\n",[1086,1321,1323,1326,1329,1331,1333,1335,1338,1340],{"class":1088,"line":1322},9,[1086,1324,1325],{"class":1092},"      \"",[1086,1327,1328],{"class":1165},"id",[1086,1330,1106],{"class":1092},[1086,1332,1109],{"class":1092},[1086,1334,1112],{"class":1092},[1086,1336,1337],{"class":1115},"orders-starter",[1086,1339,1106],{"class":1092},[1086,1341,1121],{"class":1092},[1086,1343,1345,1347,1350,1352,1354,1356,1359,1361],{"class":1088,"line":1344},10,[1086,1346,1325],{"class":1092},[1086,1348,1349],{"class":1165},"name",[1086,1351,1106],{"class":1092},[1086,1353,1109],{"class":1092},[1086,1355,1112],{"class":1092},[1086,1357,1358],{"class":1115},"Starter",[1086,1360,1106],{"class":1092},[1086,1362,1121],{"class":1092},[1086,1364,1366,1368,1371,1373,1375,1377,1380,1382],{"class":1088,"line":1365},11,[1086,1367,1325],{"class":1092},[1086,1369,1370],{"class":1165},"description",[1086,1372,1106],{"class":1092},[1086,1374,1109],{"class":1092},[1086,1376,1112],{"class":1092},[1086,1378,1379],{"class":1115},"Up to 500 orders\u002Fmonth",[1086,1381,1106],{"class":1092},[1086,1383,1121],{"class":1092},[1086,1385,1387,1389,1392,1394,1396,1398,1401,1403],{"class":1088,"line":1386},12,[1086,1388,1325],{"class":1092},[1086,1390,1391],{"class":1165},"currency",[1086,1393,1106],{"class":1092},[1086,1395,1109],{"class":1092},[1086,1397,1112],{"class":1092},[1086,1399,1400],{"class":1115},"EUR",[1086,1402,1106],{"class":1092},[1086,1404,1121],{"class":1092},[1086,1406,1408,1410,1413,1415,1417,1420,1422,1426,1428,1430,1433,1436,1438,1441,1443,1445,1448],{"class":1088,"line":1407},13,[1086,1409,1325],{"class":1092},[1086,1411,1412],{"class":1165},"price",[1086,1414,1106],{"class":1092},[1086,1416,1109],{"class":1092},[1086,1418,1419],{"class":1092}," {",[1086,1421,1112],{"class":1092},[1086,1423,1425],{"class":1424},"sbssI","monthly",[1086,1427,1106],{"class":1092},[1086,1429,1109],{"class":1092},[1086,1431,1432],{"class":1424}," 49",[1086,1434,1435],{"class":1092},",",[1086,1437,1112],{"class":1092},[1086,1439,1440],{"class":1424},"yearly",[1086,1442,1106],{"class":1092},[1086,1444,1109],{"class":1092},[1086,1446,1447],{"class":1424}," 468",[1086,1449,1450],{"class":1092}," },\n",[1086,1452,1454,1456,1459,1461,1463,1466,1468,1471,1473,1475,1477,1480,1482],{"class":1088,"line":1453},14,[1086,1455,1325],{"class":1092},[1086,1457,1458],{"class":1165},"features",[1086,1460,1106],{"class":1092},[1086,1462,1109],{"class":1092},[1086,1464,1465],{"class":1092}," [",[1086,1467,1106],{"class":1092},[1086,1469,1470],{"class":1115},"Order management",[1086,1472,1106],{"class":1092},[1086,1474,1435],{"class":1092},[1086,1476,1112],{"class":1092},[1086,1478,1479],{"class":1115},"Basic reporting",[1086,1481,1106],{"class":1092},[1086,1483,1484],{"class":1092},"],\n",[1086,1486,1488,1490,1493,1495,1497,1499,1501,1504,1506,1508,1511],{"class":1088,"line":1487},15,[1086,1489,1325],{"class":1092},[1086,1491,1492],{"class":1165},"limits",[1086,1494,1106],{"class":1092},[1086,1496,1109],{"class":1092},[1086,1498,1419],{"class":1092},[1086,1500,1112],{"class":1092},[1086,1502,1503],{"class":1424},"orders_per_month",[1086,1505,1106],{"class":1092},[1086,1507,1109],{"class":1092},[1086,1509,1510],{"class":1424}," 500",[1086,1512,1513],{"class":1092}," }\n",[1086,1515,1517],{"class":1088,"line":1516},16,[1086,1518,1519],{"class":1092},"    },\n",[1086,1521,1523],{"class":1088,"line":1522},17,[1086,1524,1319],{"class":1092},[1086,1526,1528,1530,1532,1534,1536,1538,1541,1543],{"class":1088,"line":1527},18,[1086,1529,1325],{"class":1092},[1086,1531,1328],{"class":1165},[1086,1533,1106],{"class":1092},[1086,1535,1109],{"class":1092},[1086,1537,1112],{"class":1092},[1086,1539,1540],{"class":1115},"orders-professional",[1086,1542,1106],{"class":1092},[1086,1544,1121],{"class":1092},[1086,1546,1548,1550,1552,1554,1556,1558,1561,1563],{"class":1088,"line":1547},19,[1086,1549,1325],{"class":1092},[1086,1551,1349],{"class":1165},[1086,1553,1106],{"class":1092},[1086,1555,1109],{"class":1092},[1086,1557,1112],{"class":1092},[1086,1559,1560],{"class":1115},"Professional",[1086,1562,1106],{"class":1092},[1086,1564,1121],{"class":1092},[1086,1566,1568,1570,1572,1574,1576,1578,1581,1583],{"class":1088,"line":1567},20,[1086,1569,1325],{"class":1092},[1086,1571,1370],{"class":1165},[1086,1573,1106],{"class":1092},[1086,1575,1109],{"class":1092},[1086,1577,1112],{"class":1092},[1086,1579,1580],{"class":1115},"Unlimited orders + ERP integration",[1086,1582,1106],{"class":1092},[1086,1584,1121],{"class":1092},[1086,1586,1588,1590,1592,1594,1596,1598,1600,1602],{"class":1088,"line":1587},21,[1086,1589,1325],{"class":1092},[1086,1591,1391],{"class":1165},[1086,1593,1106],{"class":1092},[1086,1595,1109],{"class":1092},[1086,1597,1112],{"class":1092},[1086,1599,1400],{"class":1115},[1086,1601,1106],{"class":1092},[1086,1603,1121],{"class":1092},[1086,1605,1607,1609,1611,1613,1615,1617,1619,1621,1623,1625,1628,1630,1632,1634,1636,1638,1641],{"class":1088,"line":1606},22,[1086,1608,1325],{"class":1092},[1086,1610,1412],{"class":1165},[1086,1612,1106],{"class":1092},[1086,1614,1109],{"class":1092},[1086,1616,1419],{"class":1092},[1086,1618,1112],{"class":1092},[1086,1620,1425],{"class":1424},[1086,1622,1106],{"class":1092},[1086,1624,1109],{"class":1092},[1086,1626,1627],{"class":1424}," 149",[1086,1629,1435],{"class":1092},[1086,1631,1112],{"class":1092},[1086,1633,1440],{"class":1424},[1086,1635,1106],{"class":1092},[1086,1637,1109],{"class":1092},[1086,1639,1640],{"class":1424}," 1428",[1086,1642,1450],{"class":1092},[1086,1644,1646,1648,1650,1652,1654,1656,1658,1661,1663,1665,1667,1670,1672,1674,1676,1679,1681],{"class":1088,"line":1645},23,[1086,1647,1325],{"class":1092},[1086,1649,1458],{"class":1165},[1086,1651,1106],{"class":1092},[1086,1653,1109],{"class":1092},[1086,1655,1465],{"class":1092},[1086,1657,1106],{"class":1092},[1086,1659,1660],{"class":1115},"Unlimited orders",[1086,1662,1106],{"class":1092},[1086,1664,1435],{"class":1092},[1086,1666,1112],{"class":1092},[1086,1668,1669],{"class":1115},"Advanced reporting",[1086,1671,1106],{"class":1092},[1086,1673,1435],{"class":1092},[1086,1675,1112],{"class":1092},[1086,1677,1678],{"class":1115},"ERP sync",[1086,1680,1106],{"class":1092},[1086,1682,1484],{"class":1092},[1086,1684,1686,1688,1690,1692,1694],{"class":1088,"line":1685},24,[1086,1687,1325],{"class":1092},[1086,1689,1492],{"class":1165},[1086,1691,1106],{"class":1092},[1086,1693,1109],{"class":1092},[1086,1695,1696],{"class":1092}," {}\n",[1086,1698,1700],{"class":1088,"line":1699},25,[1086,1701,1702],{"class":1092},"    }\n",[1086,1704,1706],{"class":1088,"line":1705},26,[1086,1707,1708],{"class":1092},"  ]\n",[1086,1710,1712],{"class":1088,"line":1711},27,[1086,1713,1211],{"class":1092},[990,1715,1716],{},[994,1717,1718],{},"Tenant Flow:",[1720,1721,1722,1725,1728,1731,1734],"ol",{},[1021,1723,1724],{},"Browse app in Marketplace",[1021,1726,1727],{},"See plans and pricing",[1021,1729,1730],{},"Select a plan",[1021,1732,1733],{},"Billing processes payment",[1021,1735,1736],{},"App installed and active",[1066,1738,1740],{"id":1739},"_3-included-bundled-with-subscription","3. Included (Bundled with Subscription)",[990,1742,1743],{},"An included app isn't sold on its own — it comes as part of a larger billing package, the way a \"Professional\" plan might bundle Orders, Inventory, and Checkout together. You name the package it belongs to:",[1077,1745,1747],{"className":1079,"code":1746,"language":1081,"meta":1082,"style":1082},"{\n  \"type\": \"included\",\n  \"package\": \"professional\",\n  \"description\": \"Included with Professional and Enterprise plans\"\n}\n",[1005,1748,1749,1753,1772,1792,1809],{"__ignoreMap":1082},[1086,1750,1751],{"class":1088,"line":1089},[1086,1752,1093],{"class":1092},[1086,1754,1755,1757,1759,1761,1763,1765,1768,1770],{"class":1088,"line":1096},[1086,1756,1099],{"class":1092},[1086,1758,1063],{"class":1102},[1086,1760,1106],{"class":1092},[1086,1762,1109],{"class":1092},[1086,1764,1112],{"class":1092},[1086,1766,1767],{"class":1115},"included",[1086,1769,1106],{"class":1092},[1086,1771,1121],{"class":1092},[1086,1773,1774,1776,1779,1781,1783,1785,1788,1790],{"class":1088,"line":1124},[1086,1775,1099],{"class":1092},[1086,1777,1778],{"class":1102},"package",[1086,1780,1106],{"class":1092},[1086,1782,1109],{"class":1092},[1086,1784,1112],{"class":1092},[1086,1786,1787],{"class":1115},"professional",[1086,1789,1106],{"class":1092},[1086,1791,1121],{"class":1092},[1086,1793,1794,1796,1798,1800,1802,1804,1807],{"class":1088,"line":1144},[1086,1795,1099],{"class":1092},[1086,1797,1370],{"class":1102},[1086,1799,1106],{"class":1092},[1086,1801,1109],{"class":1092},[1086,1803,1112],{"class":1092},[1086,1805,1806],{"class":1115},"Included with Professional and Enterprise plans",[1086,1808,1199],{"class":1092},[1086,1810,1811],{"class":1088,"line":1159},[1086,1812,1211],{"class":1092},[990,1814,1815],{},"There's no separate charge and nothing for the customer to buy: if their plan includes the app, it's auto-installed when they sign up, and any change to their subscription is reflected automatically. This is how core apps reach customers without making each one a separate purchase decision.",[1055,1817,1819],{"id":1818},"plan-fields","Plan Fields",[1821,1822,1823,1839],"table",{},[1824,1825,1826],"thead",{},[1827,1828,1829,1833,1836],"tr",{},[1830,1831,1832],"th",{},"Field",[1830,1834,1835],{},"Type",[1830,1837,1838],{},"Description",[1840,1841,1842,1858,1871,1882,1899,1920,1932],"tbody",{},[1827,1843,1844,1849,1852],{},[1845,1846,1847],"td",{},[1005,1848,1328],{},[1845,1850,1851],{},"string",[1845,1853,1854,1855,1857],{},"Unique plan identifier (e.g., ",[1005,1856,1337],{},")",[1827,1859,1860,1864,1866],{},[1845,1861,1862],{},[1005,1863,1349],{},[1845,1865,1851],{},[1845,1867,1868,1869,1857],{},"Display name (e.g., ",[1005,1870,1358],{},[1827,1872,1873,1877,1879],{},[1845,1874,1875],{},[1005,1876,1370],{},[1845,1878,1851],{},[1845,1880,1881],{},"Short description",[1827,1883,1884,1888,1890],{},[1845,1885,1886],{},[1005,1887,1391],{},[1845,1889,1851],{},[1845,1891,1892,1893,1895,1896,1857],{},"ISO 4217 code (e.g., ",[1005,1894,1400],{},", ",[1005,1897,1898],{},"USD",[1827,1900,1901,1905,1908],{},[1845,1902,1903],{},[1005,1904,1412],{},[1845,1906,1907],{},"object",[1845,1909,1910,1912,1913,1915,1916,1919],{},[1005,1911,1425],{}," and ",[1005,1914,1440],{}," prices in cents (e.g., ",[1005,1917,1918],{},"49"," = €0.49)",[1827,1921,1922,1926,1929],{},[1845,1923,1924],{},[1005,1925,1458],{},[1845,1927,1928],{},"array",[1845,1930,1931],{},"List of included features (display only)",[1827,1933,1934,1938,1940],{},[1845,1935,1936],{},[1005,1937,1492],{},[1845,1939,1907],{},[1845,1941,1942,1943,1857],{},"Usage limits (e.g., ",[1005,1944,1945],{},"orders_per_month: 500",[1055,1947,1949],{"id":1948},"limit-enforcement","Limit Enforcement",[990,1951,1952],{},"Limits are declarative — you define them, the platform can enforce them:",[1077,1954,1956],{"className":1079,"code":1955,"language":1081,"meta":1082,"style":1082},"\"limits\": {\n  \"orders_per_month\": 500,\n  \"concurrent_integrations\": 3,\n  \"storage_gb\": 10\n}\n",[1005,1957,1958,1972,1986,2002,2016],{"__ignoreMap":1082},[1086,1959,1960,1962,1964,1966,1970],{"class":1088,"line":1089},[1086,1961,1106],{"class":1092},[1086,1963,1492],{"class":1115},[1086,1965,1106],{"class":1092},[1086,1967,1969],{"class":1968},"sTEyZ",": ",[1086,1971,1093],{"class":1092},[1086,1973,1974,1976,1978,1980,1982,1984],{"class":1088,"line":1096},[1086,1975,1099],{"class":1092},[1086,1977,1503],{"class":1102},[1086,1979,1106],{"class":1092},[1086,1981,1109],{"class":1092},[1086,1983,1510],{"class":1424},[1086,1985,1121],{"class":1092},[1086,1987,1988,1990,1993,1995,1997,2000],{"class":1088,"line":1124},[1086,1989,1099],{"class":1092},[1086,1991,1992],{"class":1102},"concurrent_integrations",[1086,1994,1106],{"class":1092},[1086,1996,1109],{"class":1092},[1086,1998,1999],{"class":1424}," 3",[1086,2001,1121],{"class":1092},[1086,2003,2004,2006,2009,2011,2013],{"class":1088,"line":1144},[1086,2005,1099],{"class":1092},[1086,2007,2008],{"class":1102},"storage_gb",[1086,2010,1106],{"class":1092},[1086,2012,1109],{"class":1092},[1086,2014,2015],{"class":1424}," 10\n",[1086,2017,2018],{"class":1088,"line":1159},[1086,2019,1211],{"class":1092},[990,2021,2022],{},"Your app can query limits via API:",[1077,2024,2028],{"className":2025,"code":2026,"language":2027,"meta":1082,"style":1082},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const limits = await platform.getLimits('orders')\n\u002F\u002F { orders_per_month: 500, ... }\n\n\u002F\u002F In your app:\nif (orderCount >= limits.orders_per_month) {\n  throw new Error('Monthly limit reached. Upgrade to Professional.')\n}\n","javascript",[1005,2029,2030,2069,2075,2081,2086,2107,2130],{"__ignoreMap":1082},[1086,2031,2032,2035,2038,2041,2045,2048,2051,2055,2058,2061,2064,2066],{"class":1088,"line":1089},[1086,2033,2034],{"class":1102},"const",[1086,2036,2037],{"class":1968}," limits ",[1086,2039,2040],{"class":1092},"=",[1086,2042,2044],{"class":2043},"s7zQu"," await",[1086,2046,2047],{"class":1968}," platform",[1086,2049,2050],{"class":1092},".",[1086,2052,2054],{"class":2053},"s2Zo4","getLimits",[1086,2056,2057],{"class":1968},"(",[1086,2059,2060],{"class":1092},"'",[1086,2062,2063],{"class":1115},"orders",[1086,2065,2060],{"class":1092},[1086,2067,2068],{"class":1968},")\n",[1086,2070,2071],{"class":1088,"line":1096},[1086,2072,2074],{"class":2073},"sHwdD","\u002F\u002F { orders_per_month: 500, ... }\n",[1086,2076,2077],{"class":1088,"line":1124},[1086,2078,2080],{"emptyLinePlaceholder":2079},true,"\n",[1086,2082,2083],{"class":1088,"line":1144},[1086,2084,2085],{"class":2073},"\u002F\u002F In your app:\n",[1086,2087,2088,2091,2094,2097,2100,2102,2105],{"class":1088,"line":1159},[1086,2089,2090],{"class":2043},"if",[1086,2092,2093],{"class":1968}," (orderCount ",[1086,2095,2096],{"class":1092},">=",[1086,2098,2099],{"class":1968}," limits",[1086,2101,2050],{"class":1092},[1086,2103,2104],{"class":1968},"orders_per_month) ",[1086,2106,1093],{"class":1092},[1086,2108,2109,2112,2115,2118,2121,2123,2126,2128],{"class":1088,"line":1182},[1086,2110,2111],{"class":2043},"  throw",[1086,2113,2114],{"class":1092}," new",[1086,2116,2117],{"class":2053}," Error",[1086,2119,2057],{"class":2120},"swJcz",[1086,2122,2060],{"class":1092},[1086,2124,2125],{"class":1115},"Monthly limit reached. Upgrade to Professional.",[1086,2127,2060],{"class":1092},[1086,2129,2068],{"class":2120},[1086,2131,2132],{"class":1088,"line":1202},[1086,2133,1211],{"class":1092},[1043,2135,2137],{"id":2136},"event-driven-architecture","Event-Driven Architecture",[990,2139,2140],{},"Apps communicate asynchronously via events. This provides loose coupling and enables real-time integrations.",[1055,2142,2144],{"id":2143},"publishing-events","Publishing Events",[990,2146,2147],{},"In your app, publish events when important things happen:",[1077,2149,2151],{"className":2025,"code":2150,"language":2027,"meta":1082,"style":1082},"\u002F\u002F When an order is created\nawait platform.events.publish('order.created', {\n  order_id: '123',\n  customer_id: '456',\n  total_amount: 1500.00,\n  created_at: new Date().toISOString()\n})\n\n\u002F\u002F When an order status changes\nawait platform.events.publish('order.status_changed', {\n  order_id: '123',\n  from_status: 'draft',\n  to_status: 'confirmed',\n  timestamp: new Date().toISOString()\n})\n",[1005,2152,2153,2158,2188,2205,2221,2233,2256,2263,2267,2272,2299,2313,2329,2345,2364],{"__ignoreMap":1082},[1086,2154,2155],{"class":1088,"line":1089},[1086,2156,2157],{"class":2073},"\u002F\u002F When an order is created\n",[1086,2159,2160,2163,2165,2167,2170,2172,2175,2177,2179,2182,2184,2186],{"class":1088,"line":1096},[1086,2161,2162],{"class":2043},"await",[1086,2164,2047],{"class":1968},[1086,2166,2050],{"class":1092},[1086,2168,2169],{"class":1968},"events",[1086,2171,2050],{"class":1092},[1086,2173,2174],{"class":2053},"publish",[1086,2176,2057],{"class":1968},[1086,2178,2060],{"class":1092},[1086,2180,2181],{"class":1115},"order.created",[1086,2183,2060],{"class":1092},[1086,2185,1435],{"class":1092},[1086,2187,1156],{"class":1092},[1086,2189,2190,2193,2195,2198,2201,2203],{"class":1088,"line":1124},[1086,2191,2192],{"class":2120},"  order_id",[1086,2194,1109],{"class":1092},[1086,2196,2197],{"class":1092}," '",[1086,2199,2200],{"class":1115},"123",[1086,2202,2060],{"class":1092},[1086,2204,1121],{"class":1092},[1086,2206,2207,2210,2212,2214,2217,2219],{"class":1088,"line":1144},[1086,2208,2209],{"class":2120},"  customer_id",[1086,2211,1109],{"class":1092},[1086,2213,2197],{"class":1092},[1086,2215,2216],{"class":1115},"456",[1086,2218,2060],{"class":1092},[1086,2220,1121],{"class":1092},[1086,2222,2223,2226,2228,2231],{"class":1088,"line":1159},[1086,2224,2225],{"class":2120},"  total_amount",[1086,2227,1109],{"class":1092},[1086,2229,2230],{"class":1424}," 1500.00",[1086,2232,1121],{"class":1092},[1086,2234,2235,2238,2240,2242,2245,2248,2250,2253],{"class":1088,"line":1182},[1086,2236,2237],{"class":2120},"  created_at",[1086,2239,1109],{"class":1092},[1086,2241,2114],{"class":1092},[1086,2243,2244],{"class":2053}," Date",[1086,2246,2247],{"class":1968},"()",[1086,2249,2050],{"class":1092},[1086,2251,2252],{"class":2053},"toISOString",[1086,2254,2255],{"class":1968},"()\n",[1086,2257,2258,2261],{"class":1088,"line":1202},[1086,2259,2260],{"class":1092},"}",[1086,2262,2068],{"class":1968},[1086,2264,2265],{"class":1088,"line":1208},[1086,2266,2080],{"emptyLinePlaceholder":2079},[1086,2268,2269],{"class":1088,"line":1322},[1086,2270,2271],{"class":2073},"\u002F\u002F When an order status changes\n",[1086,2273,2274,2276,2278,2280,2282,2284,2286,2288,2290,2293,2295,2297],{"class":1088,"line":1344},[1086,2275,2162],{"class":2043},[1086,2277,2047],{"class":1968},[1086,2279,2050],{"class":1092},[1086,2281,2169],{"class":1968},[1086,2283,2050],{"class":1092},[1086,2285,2174],{"class":2053},[1086,2287,2057],{"class":1968},[1086,2289,2060],{"class":1092},[1086,2291,2292],{"class":1115},"order.status_changed",[1086,2294,2060],{"class":1092},[1086,2296,1435],{"class":1092},[1086,2298,1156],{"class":1092},[1086,2300,2301,2303,2305,2307,2309,2311],{"class":1088,"line":1365},[1086,2302,2192],{"class":2120},[1086,2304,1109],{"class":1092},[1086,2306,2197],{"class":1092},[1086,2308,2200],{"class":1115},[1086,2310,2060],{"class":1092},[1086,2312,1121],{"class":1092},[1086,2314,2315,2318,2320,2322,2325,2327],{"class":1088,"line":1386},[1086,2316,2317],{"class":2120},"  from_status",[1086,2319,1109],{"class":1092},[1086,2321,2197],{"class":1092},[1086,2323,2324],{"class":1115},"draft",[1086,2326,2060],{"class":1092},[1086,2328,1121],{"class":1092},[1086,2330,2331,2334,2336,2338,2341,2343],{"class":1088,"line":1407},[1086,2332,2333],{"class":2120},"  to_status",[1086,2335,1109],{"class":1092},[1086,2337,2197],{"class":1092},[1086,2339,2340],{"class":1115},"confirmed",[1086,2342,2060],{"class":1092},[1086,2344,1121],{"class":1092},[1086,2346,2347,2350,2352,2354,2356,2358,2360,2362],{"class":1088,"line":1453},[1086,2348,2349],{"class":2120},"  timestamp",[1086,2351,1109],{"class":1092},[1086,2353,2114],{"class":1092},[1086,2355,2244],{"class":2053},[1086,2357,2247],{"class":1968},[1086,2359,2050],{"class":1092},[1086,2361,2252],{"class":2053},[1086,2363,2255],{"class":1968},[1086,2365,2366,2368],{"class":1088,"line":1487},[1086,2367,2260],{"class":1092},[1086,2369,2068],{"class":1968},[990,2371,2372],{},[994,2373,2374],{},"Declare event names in manifest.json:",[1077,2376,2378],{"className":1079,"code":2377,"language":1081,"meta":1082,"style":1082},"\"events\": {\n  \"emits\": [\"order.created\", \"order.status_changed\"]\n}\n",[1005,2379,2380,2392,2422],{"__ignoreMap":1082},[1086,2381,2382,2384,2386,2388,2390],{"class":1088,"line":1089},[1086,2383,1106],{"class":1092},[1086,2385,2169],{"class":1115},[1086,2387,1106],{"class":1092},[1086,2389,1969],{"class":1968},[1086,2391,1093],{"class":1092},[1086,2393,2394,2396,2399,2401,2403,2405,2407,2409,2411,2413,2415,2417,2419],{"class":1088,"line":1096},[1086,2395,1099],{"class":1092},[1086,2397,2398],{"class":1102},"emits",[1086,2400,1106],{"class":1092},[1086,2402,1109],{"class":1092},[1086,2404,1465],{"class":1092},[1086,2406,1106],{"class":1092},[1086,2408,2181],{"class":1115},[1086,2410,1106],{"class":1092},[1086,2412,1435],{"class":1092},[1086,2414,1112],{"class":1092},[1086,2416,2292],{"class":1115},[1086,2418,1106],{"class":1092},[1086,2420,2421],{"class":1092},"]\n",[1086,2423,2424],{"class":1088,"line":1124},[1086,2425,1211],{"class":1092},[1055,2427,2429],{"id":2428},"subscribing-to-events","Subscribing to Events",[990,2431,2432],{},"Other apps (or the same app) can subscribe to events:",[1077,2434,2436],{"className":2025,"code":2435,"language":2027,"meta":1082,"style":1082},"\u002F\u002F Inventory app listens to order creation\nplatform.events.on('order.created', async (event) => {\n  const { order_id, customer_id } = event\n  \n  \u002F\u002F Fetch order details\n  const order = await getOrder(order_id)\n  \n  \u002F\u002F Update inventory\n  for (const item of order.items) {\n    await inventory.reserve(item.product_id, item.quantity)\n  }\n})\n\n\u002F\u002F Payment Gateway app listens to order confirmation\nplatform.events.on('order.status_changed', async (event) => {\n  if (event.to_status === 'confirmed') {\n    \u002F\u002F Trigger payment processing\n    await payment.charge(event.order_id)\n  }\n})\n",[1005,2437,2438,2443,2484,2508,2513,2518,2539,2543,2548,2575,2609,2613,2619,2623,2628,2662,2689,2694,2716,2720],{"__ignoreMap":1082},[1086,2439,2440],{"class":1088,"line":1089},[1086,2441,2442],{"class":2073},"\u002F\u002F Inventory app listens to order creation\n",[1086,2444,2445,2448,2450,2452,2454,2457,2459,2461,2463,2465,2467,2470,2473,2477,2479,2482],{"class":1088,"line":1096},[1086,2446,2447],{"class":1968},"platform",[1086,2449,2050],{"class":1092},[1086,2451,2169],{"class":1968},[1086,2453,2050],{"class":1092},[1086,2455,2456],{"class":2053},"on",[1086,2458,2057],{"class":1968},[1086,2460,2060],{"class":1092},[1086,2462,2181],{"class":1115},[1086,2464,2060],{"class":1092},[1086,2466,1435],{"class":1092},[1086,2468,2469],{"class":1102}," async",[1086,2471,2472],{"class":1092}," (",[1086,2474,2476],{"class":2475},"sHdIc","event",[1086,2478,1857],{"class":1092},[1086,2480,2481],{"class":1102}," =>",[1086,2483,1156],{"class":1092},[1086,2485,2486,2489,2491,2494,2496,2499,2502,2505],{"class":1088,"line":1124},[1086,2487,2488],{"class":1102},"  const",[1086,2490,1419],{"class":1092},[1086,2492,2493],{"class":1968}," order_id",[1086,2495,1435],{"class":1092},[1086,2497,2498],{"class":1968}," customer_id",[1086,2500,2501],{"class":1092}," }",[1086,2503,2504],{"class":1092}," =",[1086,2506,2507],{"class":1968}," event\n",[1086,2509,2510],{"class":1088,"line":1144},[1086,2511,2512],{"class":2120},"  \n",[1086,2514,2515],{"class":1088,"line":1159},[1086,2516,2517],{"class":2073},"  \u002F\u002F Fetch order details\n",[1086,2519,2520,2522,2525,2527,2529,2532,2534,2537],{"class":1088,"line":1182},[1086,2521,2488],{"class":1102},[1086,2523,2524],{"class":1968}," order",[1086,2526,2504],{"class":1092},[1086,2528,2044],{"class":2043},[1086,2530,2531],{"class":2053}," getOrder",[1086,2533,2057],{"class":2120},[1086,2535,2536],{"class":1968},"order_id",[1086,2538,2068],{"class":2120},[1086,2540,2541],{"class":1088,"line":1202},[1086,2542,2512],{"class":2120},[1086,2544,2545],{"class":1088,"line":1208},[1086,2546,2547],{"class":2073},"  \u002F\u002F Update inventory\n",[1086,2549,2550,2553,2555,2557,2560,2563,2565,2567,2570,2573],{"class":1088,"line":1322},[1086,2551,2552],{"class":2043},"  for",[1086,2554,2472],{"class":2120},[1086,2556,2034],{"class":1102},[1086,2558,2559],{"class":1968}," item",[1086,2561,2562],{"class":1092}," of",[1086,2564,2524],{"class":1968},[1086,2566,2050],{"class":1092},[1086,2568,2569],{"class":1968},"items",[1086,2571,2572],{"class":2120},") ",[1086,2574,1093],{"class":1092},[1086,2576,2577,2580,2583,2585,2588,2590,2593,2595,2598,2600,2602,2604,2607],{"class":1088,"line":1344},[1086,2578,2579],{"class":2043},"    await",[1086,2581,2582],{"class":1968}," inventory",[1086,2584,2050],{"class":1092},[1086,2586,2587],{"class":2053},"reserve",[1086,2589,2057],{"class":2120},[1086,2591,2592],{"class":1968},"item",[1086,2594,2050],{"class":1092},[1086,2596,2597],{"class":1968},"product_id",[1086,2599,1435],{"class":1092},[1086,2601,2559],{"class":1968},[1086,2603,2050],{"class":1092},[1086,2605,2606],{"class":1968},"quantity",[1086,2608,2068],{"class":2120},[1086,2610,2611],{"class":1088,"line":1365},[1086,2612,1205],{"class":1092},[1086,2614,2615,2617],{"class":1088,"line":1386},[1086,2616,2260],{"class":1092},[1086,2618,2068],{"class":1968},[1086,2620,2621],{"class":1088,"line":1407},[1086,2622,2080],{"emptyLinePlaceholder":2079},[1086,2624,2625],{"class":1088,"line":1453},[1086,2626,2627],{"class":2073},"\u002F\u002F Payment Gateway app listens to order confirmation\n",[1086,2629,2630,2632,2634,2636,2638,2640,2642,2644,2646,2648,2650,2652,2654,2656,2658,2660],{"class":1088,"line":1487},[1086,2631,2447],{"class":1968},[1086,2633,2050],{"class":1092},[1086,2635,2169],{"class":1968},[1086,2637,2050],{"class":1092},[1086,2639,2456],{"class":2053},[1086,2641,2057],{"class":1968},[1086,2643,2060],{"class":1092},[1086,2645,2292],{"class":1115},[1086,2647,2060],{"class":1092},[1086,2649,1435],{"class":1092},[1086,2651,2469],{"class":1102},[1086,2653,2472],{"class":1092},[1086,2655,2476],{"class":2475},[1086,2657,1857],{"class":1092},[1086,2659,2481],{"class":1102},[1086,2661,1156],{"class":1092},[1086,2663,2664,2667,2669,2671,2673,2676,2679,2681,2683,2685,2687],{"class":1088,"line":1516},[1086,2665,2666],{"class":2043},"  if",[1086,2668,2472],{"class":2120},[1086,2670,2476],{"class":1968},[1086,2672,2050],{"class":1092},[1086,2674,2675],{"class":1968},"to_status",[1086,2677,2678],{"class":1092}," ===",[1086,2680,2197],{"class":1092},[1086,2682,2340],{"class":1115},[1086,2684,2060],{"class":1092},[1086,2686,2572],{"class":2120},[1086,2688,1093],{"class":1092},[1086,2690,2691],{"class":1088,"line":1522},[1086,2692,2693],{"class":2073},"    \u002F\u002F Trigger payment processing\n",[1086,2695,2696,2698,2701,2703,2706,2708,2710,2712,2714],{"class":1088,"line":1527},[1086,2697,2579],{"class":2043},[1086,2699,2700],{"class":1968}," payment",[1086,2702,2050],{"class":1092},[1086,2704,2705],{"class":2053},"charge",[1086,2707,2057],{"class":2120},[1086,2709,2476],{"class":1968},[1086,2711,2050],{"class":1092},[1086,2713,2536],{"class":1968},[1086,2715,2068],{"class":2120},[1086,2717,2718],{"class":1088,"line":1547},[1086,2719,1205],{"class":1092},[1086,2721,2722,2724],{"class":1088,"line":1567},[1086,2723,2260],{"class":1092},[1086,2725,2068],{"class":1968},[990,2727,2728],{},[994,2729,2730],{},"Declare subscriptions in manifest.json:",[1077,2732,2734],{"className":1079,"code":2733,"language":1081,"meta":1082,"style":1082},"\"events\": {\n  \"listens\": [\"order.created\", \"order.status_changed\"]\n}\n",[1005,2735,2736,2748,2777],{"__ignoreMap":1082},[1086,2737,2738,2740,2742,2744,2746],{"class":1088,"line":1089},[1086,2739,1106],{"class":1092},[1086,2741,2169],{"class":1115},[1086,2743,1106],{"class":1092},[1086,2745,1969],{"class":1968},[1086,2747,1093],{"class":1092},[1086,2749,2750,2752,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775],{"class":1088,"line":1096},[1086,2751,1099],{"class":1092},[1086,2753,2754],{"class":1102},"listens",[1086,2756,1106],{"class":1092},[1086,2758,1109],{"class":1092},[1086,2760,1465],{"class":1092},[1086,2762,1106],{"class":1092},[1086,2764,2181],{"class":1115},[1086,2766,1106],{"class":1092},[1086,2768,1435],{"class":1092},[1086,2770,1112],{"class":1092},[1086,2772,2292],{"class":1115},[1086,2774,1106],{"class":1092},[1086,2776,2421],{"class":1092},[1086,2778,2779],{"class":1088,"line":1124},[1086,2780,1211],{"class":1092},[1055,2782,2784],{"id":2783},"event-characteristics","Event Characteristics",[990,2786,2787,2788,2791,2792,2795,2796,2799,2800,2803],{},"A few properties of the event bus shape how you should design around it. Delivery is ",[994,2789,2790],{},"asynchronous"," — the publisher fires an event and moves on, never waiting on its subscribers — but it's also ",[994,2793,2794],{},"guaranteed",": the platform retries a subscriber that fails rather than dropping the event. Everything is scoped by tenant, so an event raised in one tenant can never reach another. Every event is kept in an ",[994,2797,2798],{},"event history"," for debugging and auditing, and anything that still can't be delivered after its retries lands in a ",[994,2801,2802],{},"dead-letter queue"," for a human to inspect rather than vanishing. Taken together, these are why events are safe to build real business logic on, not just notifications.",[1055,2805,2807],{"id":2806},"event-payload","Event Payload",[990,2809,2810],{},"All events include standard fields:",[1077,2812,2814],{"className":2025,"code":2813,"language":2027,"meta":1082,"style":1082},"{\n  id: \"evt_123\",              \u002F\u002F Event ID\n  name: \"order.created\",      \u002F\u002F Event type\n  tenant_id: \"acme-eu\",       \u002F\u002F Which tenant\n  source_app: \"orders\",       \u002F\u002F Which app emitted it\n  timestamp: \"2025-05-26T...\", \u002F\u002F When\n  data: { ... }               \u002F\u002F Your custom data\n}\n",[1005,2815,2816,2820,2839,2857,2876,2894,2912,2929],{"__ignoreMap":1082},[1086,2817,2818],{"class":1088,"line":1089},[1086,2819,1093],{"class":1092},[1086,2821,2822,2825,2827,2829,2832,2834,2836],{"class":1088,"line":1096},[1086,2823,2824],{"class":1165},"  id",[1086,2826,1109],{"class":1092},[1086,2828,1112],{"class":1092},[1086,2830,2831],{"class":1115},"evt_123",[1086,2833,1106],{"class":1092},[1086,2835,1435],{"class":1092},[1086,2837,2838],{"class":2073},"              \u002F\u002F Event ID\n",[1086,2840,2841,2844,2846,2848,2850,2852,2854],{"class":1088,"line":1124},[1086,2842,2843],{"class":1165},"  name",[1086,2845,1109],{"class":1092},[1086,2847,1112],{"class":1092},[1086,2849,2181],{"class":1115},[1086,2851,1106],{"class":1092},[1086,2853,1435],{"class":1092},[1086,2855,2856],{"class":2073},"      \u002F\u002F Event type\n",[1086,2858,2859,2862,2864,2866,2869,2871,2873],{"class":1088,"line":1144},[1086,2860,2861],{"class":1165},"  tenant_id",[1086,2863,1109],{"class":1092},[1086,2865,1112],{"class":1092},[1086,2867,2868],{"class":1115},"acme-eu",[1086,2870,1106],{"class":1092},[1086,2872,1435],{"class":1092},[1086,2874,2875],{"class":2073},"       \u002F\u002F Which tenant\n",[1086,2877,2878,2881,2883,2885,2887,2889,2891],{"class":1088,"line":1159},[1086,2879,2880],{"class":1165},"  source_app",[1086,2882,1109],{"class":1092},[1086,2884,1112],{"class":1092},[1086,2886,2063],{"class":1115},[1086,2888,1106],{"class":1092},[1086,2890,1435],{"class":1092},[1086,2892,2893],{"class":2073},"       \u002F\u002F Which app emitted it\n",[1086,2895,2896,2898,2900,2902,2905,2907,2909],{"class":1088,"line":1182},[1086,2897,2349],{"class":1165},[1086,2899,1109],{"class":1092},[1086,2901,1112],{"class":1092},[1086,2903,2904],{"class":1115},"2025-05-26T...",[1086,2906,1106],{"class":1092},[1086,2908,1435],{"class":1092},[1086,2910,2911],{"class":2073}," \u002F\u002F When\n",[1086,2913,2914,2917,2919,2921,2924,2926],{"class":1088,"line":1202},[1086,2915,2916],{"class":1165},"  data",[1086,2918,1109],{"class":1092},[1086,2920,1419],{"class":1092},[1086,2922,2923],{"class":1092}," ...",[1086,2925,2501],{"class":1092},[1086,2927,2928],{"class":2073},"               \u002F\u002F Your custom data\n",[1086,2930,2931],{"class":1088,"line":1208},[1086,2932,1211],{"class":1092},[1055,2934,2936],{"id":2935},"idempotency","Idempotency",[990,2938,2939],{},"Design subscribers to be idempotent — same event processed twice = same result:",[1077,2941,2943],{"className":2025,"code":2942,"language":2027,"meta":1082,"style":1082},"platform.events.on('order.created', async (event) => {\n  \u002F\u002F Check if we've already processed this event\n  const processed = await inventory.findByEventId(event.id)\n  if (processed) return\n  \n  \u002F\u002F Process the event\n  await inventory.reserve(...)\n  \n  \u002F\u002F Store event ID to prevent reprocessing\n  await inventory.recordProcessedEvent(event.id)\n})\n",[1005,2944,2945,2979,2984,3012,3026,3030,3035,3053,3057,3062,3083],{"__ignoreMap":1082},[1086,2946,2947,2949,2951,2953,2955,2957,2959,2961,2963,2965,2967,2969,2971,2973,2975,2977],{"class":1088,"line":1089},[1086,2948,2447],{"class":1968},[1086,2950,2050],{"class":1092},[1086,2952,2169],{"class":1968},[1086,2954,2050],{"class":1092},[1086,2956,2456],{"class":2053},[1086,2958,2057],{"class":1968},[1086,2960,2060],{"class":1092},[1086,2962,2181],{"class":1115},[1086,2964,2060],{"class":1092},[1086,2966,1435],{"class":1092},[1086,2968,2469],{"class":1102},[1086,2970,2472],{"class":1092},[1086,2972,2476],{"class":2475},[1086,2974,1857],{"class":1092},[1086,2976,2481],{"class":1102},[1086,2978,1156],{"class":1092},[1086,2980,2981],{"class":1088,"line":1096},[1086,2982,2983],{"class":2073},"  \u002F\u002F Check if we've already processed this event\n",[1086,2985,2986,2988,2991,2993,2995,2997,2999,3002,3004,3006,3008,3010],{"class":1088,"line":1124},[1086,2987,2488],{"class":1102},[1086,2989,2990],{"class":1968}," processed",[1086,2992,2504],{"class":1092},[1086,2994,2044],{"class":2043},[1086,2996,2582],{"class":1968},[1086,2998,2050],{"class":1092},[1086,3000,3001],{"class":2053},"findByEventId",[1086,3003,2057],{"class":2120},[1086,3005,2476],{"class":1968},[1086,3007,2050],{"class":1092},[1086,3009,1328],{"class":1968},[1086,3011,2068],{"class":2120},[1086,3013,3014,3016,3018,3021,3023],{"class":1088,"line":1144},[1086,3015,2666],{"class":2043},[1086,3017,2472],{"class":2120},[1086,3019,3020],{"class":1968},"processed",[1086,3022,2572],{"class":2120},[1086,3024,3025],{"class":2043},"return\n",[1086,3027,3028],{"class":1088,"line":1159},[1086,3029,2512],{"class":2120},[1086,3031,3032],{"class":1088,"line":1182},[1086,3033,3034],{"class":2073},"  \u002F\u002F Process the event\n",[1086,3036,3037,3040,3042,3044,3046,3048,3051],{"class":1088,"line":1202},[1086,3038,3039],{"class":2043},"  await",[1086,3041,2582],{"class":1968},[1086,3043,2050],{"class":1092},[1086,3045,2587],{"class":2053},[1086,3047,2057],{"class":2120},[1086,3049,3050],{"class":1092},"...",[1086,3052,2068],{"class":2120},[1086,3054,3055],{"class":1088,"line":1208},[1086,3056,2512],{"class":2120},[1086,3058,3059],{"class":1088,"line":1322},[1086,3060,3061],{"class":2073},"  \u002F\u002F Store event ID to prevent reprocessing\n",[1086,3063,3064,3066,3068,3070,3073,3075,3077,3079,3081],{"class":1088,"line":1344},[1086,3065,3039],{"class":2043},[1086,3067,2582],{"class":1968},[1086,3069,2050],{"class":1092},[1086,3071,3072],{"class":2053},"recordProcessedEvent",[1086,3074,2057],{"class":2120},[1086,3076,2476],{"class":1968},[1086,3078,2050],{"class":1092},[1086,3080,1328],{"class":1968},[1086,3082,2068],{"class":2120},[1086,3084,3085,3087],{"class":1088,"line":1365},[1086,3086,2260],{"class":1092},[1086,3088,2068],{"class":1968},[1055,3090,3092],{"id":3091},"error-handling","Error Handling",[990,3094,3095],{},"If a subscriber fails, the platform retries with exponential backoff:",[1077,3097,3099],{"className":2025,"code":3098,"language":2027,"meta":1082,"style":1082},"platform.events.on('order.created', async (event) => {\n  try {\n    \u002F\u002F Risky operation (e.g., ERP API call)\n    await erp.sync(event)\n  } catch (error) {\n    \u002F\u002F Platform will retry this\n    console.error('ERP sync failed:', error)\n    throw error  \u002F\u002F Tell platform to retry\n  }\n})\n",[1005,3100,3101,3135,3142,3147,3165,3182,3187,3212,3222,3226],{"__ignoreMap":1082},[1086,3102,3103,3105,3107,3109,3111,3113,3115,3117,3119,3121,3123,3125,3127,3129,3131,3133],{"class":1088,"line":1089},[1086,3104,2447],{"class":1968},[1086,3106,2050],{"class":1092},[1086,3108,2169],{"class":1968},[1086,3110,2050],{"class":1092},[1086,3112,2456],{"class":2053},[1086,3114,2057],{"class":1968},[1086,3116,2060],{"class":1092},[1086,3118,2181],{"class":1115},[1086,3120,2060],{"class":1092},[1086,3122,1435],{"class":1092},[1086,3124,2469],{"class":1102},[1086,3126,2472],{"class":1092},[1086,3128,2476],{"class":2475},[1086,3130,1857],{"class":1092},[1086,3132,2481],{"class":1102},[1086,3134,1156],{"class":1092},[1086,3136,3137,3140],{"class":1088,"line":1096},[1086,3138,3139],{"class":2043},"  try",[1086,3141,1156],{"class":1092},[1086,3143,3144],{"class":1088,"line":1124},[1086,3145,3146],{"class":2073},"    \u002F\u002F Risky operation (e.g., ERP API call)\n",[1086,3148,3149,3151,3154,3156,3159,3161,3163],{"class":1088,"line":1144},[1086,3150,2579],{"class":2043},[1086,3152,3153],{"class":1968}," erp",[1086,3155,2050],{"class":1092},[1086,3157,3158],{"class":2053},"sync",[1086,3160,2057],{"class":2120},[1086,3162,2476],{"class":1968},[1086,3164,2068],{"class":2120},[1086,3166,3167,3170,3173,3175,3178,3180],{"class":1088,"line":1159},[1086,3168,3169],{"class":1092},"  }",[1086,3171,3172],{"class":2043}," catch",[1086,3174,2472],{"class":2120},[1086,3176,3177],{"class":1968},"error",[1086,3179,2572],{"class":2120},[1086,3181,1093],{"class":1092},[1086,3183,3184],{"class":1088,"line":1182},[1086,3185,3186],{"class":2073},"    \u002F\u002F Platform will retry this\n",[1086,3188,3189,3192,3194,3196,3198,3200,3203,3205,3207,3210],{"class":1088,"line":1202},[1086,3190,3191],{"class":1968},"    console",[1086,3193,2050],{"class":1092},[1086,3195,3177],{"class":2053},[1086,3197,2057],{"class":2120},[1086,3199,2060],{"class":1092},[1086,3201,3202],{"class":1115},"ERP sync failed:",[1086,3204,2060],{"class":1092},[1086,3206,1435],{"class":1092},[1086,3208,3209],{"class":1968}," error",[1086,3211,2068],{"class":2120},[1086,3213,3214,3217,3219],{"class":1088,"line":1208},[1086,3215,3216],{"class":2043},"    throw",[1086,3218,3209],{"class":1968},[1086,3220,3221],{"class":2073},"  \u002F\u002F Tell platform to retry\n",[1086,3223,3224],{"class":1088,"line":1322},[1086,3225,1205],{"class":1092},[1086,3227,3228,3230],{"class":1088,"line":1344},[1086,3229,2260],{"class":1092},[1086,3231,2068],{"class":1968},[1055,3233,3235],{"id":3234},"event-naming-convention","Event Naming Convention",[990,3237,3238,3239,3242],{},"Use ",[1005,3240,3241],{},"entity.verb"," format:",[1018,3244,3245,3249,3253,3258,3263,3268,3273],{},[1021,3246,3247],{},[1005,3248,2181],{},[1021,3250,3251],{},[1005,3252,2292],{},[1021,3254,3255],{},[1005,3256,3257],{},"order.cancelled",[1021,3259,3260],{},[1005,3261,3262],{},"customer.activated",[1021,3264,3265],{},[1005,3266,3267],{},"customer.deactivated",[1021,3269,3270],{},[1005,3271,3272],{},"app.installed",[1021,3274,3275],{},[1005,3276,3277],{},"app.upgraded",[1043,3279,3281],{"id":3280},"real-world-example-order-workflow","Real-World Example: Order Workflow",[1055,3283,3285],{"id":3284},"_1-customer-creates-order-orders-app","1. Customer creates order (Orders app)",[1077,3287,3289],{"className":2025,"code":3288,"language":2027,"meta":1082,"style":1082},"\u002F\u002F In Orders app\nconst order = await createOrder(customerId, items)\n\n\u002F\u002F Publish event\nawait platform.events.publish('order.created', {\n  order_id: order.id,\n  customer_id: customerId,\n  items: items,\n  total: order.total\n})\n",[1005,3290,3291,3296,3318,3322,3327,3353,3367,3378,3390,3404],{"__ignoreMap":1082},[1086,3292,3293],{"class":1088,"line":1089},[1086,3294,3295],{"class":2073},"\u002F\u002F In Orders app\n",[1086,3297,3298,3300,3303,3305,3307,3310,3313,3315],{"class":1088,"line":1096},[1086,3299,2034],{"class":1102},[1086,3301,3302],{"class":1968}," order ",[1086,3304,2040],{"class":1092},[1086,3306,2044],{"class":2043},[1086,3308,3309],{"class":2053}," createOrder",[1086,3311,3312],{"class":1968},"(customerId",[1086,3314,1435],{"class":1092},[1086,3316,3317],{"class":1968}," items)\n",[1086,3319,3320],{"class":1088,"line":1124},[1086,3321,2080],{"emptyLinePlaceholder":2079},[1086,3323,3324],{"class":1088,"line":1144},[1086,3325,3326],{"class":2073},"\u002F\u002F Publish event\n",[1086,3328,3329,3331,3333,3335,3337,3339,3341,3343,3345,3347,3349,3351],{"class":1088,"line":1159},[1086,3330,2162],{"class":2043},[1086,3332,2047],{"class":1968},[1086,3334,2050],{"class":1092},[1086,3336,2169],{"class":1968},[1086,3338,2050],{"class":1092},[1086,3340,2174],{"class":2053},[1086,3342,2057],{"class":1968},[1086,3344,2060],{"class":1092},[1086,3346,2181],{"class":1115},[1086,3348,2060],{"class":1092},[1086,3350,1435],{"class":1092},[1086,3352,1156],{"class":1092},[1086,3354,3355,3357,3359,3361,3363,3365],{"class":1088,"line":1182},[1086,3356,2192],{"class":2120},[1086,3358,1109],{"class":1092},[1086,3360,2524],{"class":1968},[1086,3362,2050],{"class":1092},[1086,3364,1328],{"class":1968},[1086,3366,1121],{"class":1092},[1086,3368,3369,3371,3373,3376],{"class":1088,"line":1202},[1086,3370,2209],{"class":2120},[1086,3372,1109],{"class":1092},[1086,3374,3375],{"class":1968}," customerId",[1086,3377,1121],{"class":1092},[1086,3379,3380,3383,3385,3388],{"class":1088,"line":1208},[1086,3381,3382],{"class":2120},"  items",[1086,3384,1109],{"class":1092},[1086,3386,3387],{"class":1968}," items",[1086,3389,1121],{"class":1092},[1086,3391,3392,3395,3397,3399,3401],{"class":1088,"line":1322},[1086,3393,3394],{"class":2120},"  total",[1086,3396,1109],{"class":1092},[1086,3398,2524],{"class":1968},[1086,3400,2050],{"class":1092},[1086,3402,3403],{"class":1968},"total\n",[1086,3405,3406,3408],{"class":1088,"line":1344},[1086,3407,2260],{"class":1092},[1086,3409,2068],{"class":1968},[1055,3411,3413],{"id":3412},"_2-inventory-app-listens-and-reserves-stock","2. Inventory app listens and reserves stock",[1077,3415,3417],{"className":2025,"code":3416,"language":2027,"meta":1082,"style":1082},"\u002F\u002F In Inventory app\nplatform.events.on('order.created', async (event) => {\n  for (const item of event.items) {\n    await inventory.reserve(item.product_id, item.quantity)\n  }\n})\n",[1005,3418,3419,3424,3458,3481,3509,3513],{"__ignoreMap":1082},[1086,3420,3421],{"class":1088,"line":1089},[1086,3422,3423],{"class":2073},"\u002F\u002F In Inventory app\n",[1086,3425,3426,3428,3430,3432,3434,3436,3438,3440,3442,3444,3446,3448,3450,3452,3454,3456],{"class":1088,"line":1096},[1086,3427,2447],{"class":1968},[1086,3429,2050],{"class":1092},[1086,3431,2169],{"class":1968},[1086,3433,2050],{"class":1092},[1086,3435,2456],{"class":2053},[1086,3437,2057],{"class":1968},[1086,3439,2060],{"class":1092},[1086,3441,2181],{"class":1115},[1086,3443,2060],{"class":1092},[1086,3445,1435],{"class":1092},[1086,3447,2469],{"class":1102},[1086,3449,2472],{"class":1092},[1086,3451,2476],{"class":2475},[1086,3453,1857],{"class":1092},[1086,3455,2481],{"class":1102},[1086,3457,1156],{"class":1092},[1086,3459,3460,3462,3464,3466,3468,3470,3473,3475,3477,3479],{"class":1088,"line":1124},[1086,3461,2552],{"class":2043},[1086,3463,2472],{"class":2120},[1086,3465,2034],{"class":1102},[1086,3467,2559],{"class":1968},[1086,3469,2562],{"class":1092},[1086,3471,3472],{"class":1968}," event",[1086,3474,2050],{"class":1092},[1086,3476,2569],{"class":1968},[1086,3478,2572],{"class":2120},[1086,3480,1093],{"class":1092},[1086,3482,3483,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507],{"class":1088,"line":1144},[1086,3484,2579],{"class":2043},[1086,3486,2582],{"class":1968},[1086,3488,2050],{"class":1092},[1086,3490,2587],{"class":2053},[1086,3492,2057],{"class":2120},[1086,3494,2592],{"class":1968},[1086,3496,2050],{"class":1092},[1086,3498,2597],{"class":1968},[1086,3500,1435],{"class":1092},[1086,3502,2559],{"class":1968},[1086,3504,2050],{"class":1092},[1086,3506,2606],{"class":1968},[1086,3508,2068],{"class":2120},[1086,3510,3511],{"class":1088,"line":1159},[1086,3512,1205],{"class":1092},[1086,3514,3515,3517],{"class":1088,"line":1182},[1086,3516,2260],{"class":1092},[1086,3518,2068],{"class":1968},[1055,3520,3522],{"id":3521},"_3-payment-gateway-app-sends-invoice","3. Payment Gateway app sends invoice",[1077,3524,3526],{"className":2025,"code":3525,"language":2027,"meta":1082,"style":1082},"\u002F\u002F In Payment Gateway app\nplatform.events.on('order.created', async (event) => {\n  await payment.createInvoice(event.order_id, event.total)\n})\n",[1005,3527,3528,3533,3567,3597],{"__ignoreMap":1082},[1086,3529,3530],{"class":1088,"line":1089},[1086,3531,3532],{"class":2073},"\u002F\u002F In Payment Gateway app\n",[1086,3534,3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565],{"class":1088,"line":1096},[1086,3536,2447],{"class":1968},[1086,3538,2050],{"class":1092},[1086,3540,2169],{"class":1968},[1086,3542,2050],{"class":1092},[1086,3544,2456],{"class":2053},[1086,3546,2057],{"class":1968},[1086,3548,2060],{"class":1092},[1086,3550,2181],{"class":1115},[1086,3552,2060],{"class":1092},[1086,3554,1435],{"class":1092},[1086,3556,2469],{"class":1102},[1086,3558,2472],{"class":1092},[1086,3560,2476],{"class":2475},[1086,3562,1857],{"class":1092},[1086,3564,2481],{"class":1102},[1086,3566,1156],{"class":1092},[1086,3568,3569,3571,3573,3575,3578,3580,3582,3584,3586,3588,3590,3592,3595],{"class":1088,"line":1124},[1086,3570,3039],{"class":2043},[1086,3572,2700],{"class":1968},[1086,3574,2050],{"class":1092},[1086,3576,3577],{"class":2053},"createInvoice",[1086,3579,2057],{"class":2120},[1086,3581,2476],{"class":1968},[1086,3583,2050],{"class":1092},[1086,3585,2536],{"class":1968},[1086,3587,1435],{"class":1092},[1086,3589,3472],{"class":1968},[1086,3591,2050],{"class":1092},[1086,3593,3594],{"class":1968},"total",[1086,3596,2068],{"class":2120},[1086,3598,3599,3601],{"class":1088,"line":1144},[1086,3600,2260],{"class":1092},[1086,3602,2068],{"class":1968},[1055,3604,3606],{"id":3605},"_4-integration-studio-workflow-syncs-to-erp","4. Integration Studio workflow syncs to ERP",[1077,3608,3610],{"className":2025,"code":3609,"language":2027,"meta":1082,"style":1082},"\u002F\u002F In Integration Studio (visual workflow)\nTrigger: order.created\n├─ Step 1: Fetch order details (Orders API)\n├─ Step 2: Transform to SAP format\n├─ Step 3: POST to customer's ERP via HTTP\n└─ Step 4: Publish event erp.order_synced\n",[1005,3611,3612,3617,3631,3648,3658,3673],{"__ignoreMap":1082},[1086,3613,3614],{"class":1088,"line":1089},[1086,3615,3616],{"class":2073},"\u002F\u002F In Integration Studio (visual workflow)\n",[1086,3618,3619,3622,3624,3626,3628],{"class":1088,"line":1096},[1086,3620,3621],{"class":1165},"Trigger",[1086,3623,1109],{"class":1092},[1086,3625,2524],{"class":1968},[1086,3627,2050],{"class":1092},[1086,3629,3630],{"class":1968},"created\n",[1086,3632,3633,3636,3639,3642,3645],{"class":1088,"line":1124},[1086,3634,3635],{"class":1968},"├─ Step ",[1086,3637,3638],{"class":1424},"1",[1086,3640,3641],{"class":1968},": Fetch order ",[1086,3643,3644],{"class":2053},"details",[1086,3646,3647],{"class":1968}," (Orders API)\n",[1086,3649,3650,3652,3655],{"class":1088,"line":1144},[1086,3651,3635],{"class":1968},[1086,3653,3654],{"class":1424},"2",[1086,3656,3657],{"class":1968},": Transform to SAP format\n",[1086,3659,3660,3662,3665,3668,3670],{"class":1088,"line":1159},[1086,3661,3635],{"class":1968},[1086,3663,3664],{"class":1424},"3",[1086,3666,3667],{"class":1968},": POST to customer",[1086,3669,2060],{"class":1092},[1086,3671,3672],{"class":1115},"s ERP via HTTP\n",[1086,3674,3675,3678,3681,3684,3686],{"class":1088,"line":1182},[1086,3676,3677],{"class":1968},"└─ Step ",[1086,3679,3680],{"class":1424},"4",[1086,3682,3683],{"class":1968},": Publish event erp",[1086,3685,2050],{"class":1092},[1086,3687,3688],{"class":1968},"order_synced\n",[1055,3690,3692],{"id":3691},"_5-orders-app-listens-for-completion","5. Orders app listens for completion",[1077,3694,3696],{"className":2025,"code":3695,"language":2027,"meta":1082,"style":1082},"\u002F\u002F In Orders app\nplatform.events.on('erp.order_synced', async (event) => {\n  \u002F\u002F Update order status to \"synced\"\n  await updateOrderStatus(event.order_id, 'erp_synced')\n})\n",[1005,3697,3698,3702,3737,3742,3768],{"__ignoreMap":1082},[1086,3699,3700],{"class":1088,"line":1089},[1086,3701,3295],{"class":2073},[1086,3703,3704,3706,3708,3710,3712,3714,3716,3718,3721,3723,3725,3727,3729,3731,3733,3735],{"class":1088,"line":1096},[1086,3705,2447],{"class":1968},[1086,3707,2050],{"class":1092},[1086,3709,2169],{"class":1968},[1086,3711,2050],{"class":1092},[1086,3713,2456],{"class":2053},[1086,3715,2057],{"class":1968},[1086,3717,2060],{"class":1092},[1086,3719,3720],{"class":1115},"erp.order_synced",[1086,3722,2060],{"class":1092},[1086,3724,1435],{"class":1092},[1086,3726,2469],{"class":1102},[1086,3728,2472],{"class":1092},[1086,3730,2476],{"class":2475},[1086,3732,1857],{"class":1092},[1086,3734,2481],{"class":1102},[1086,3736,1156],{"class":1092},[1086,3738,3739],{"class":1088,"line":1124},[1086,3740,3741],{"class":2073},"  \u002F\u002F Update order status to \"synced\"\n",[1086,3743,3744,3746,3749,3751,3753,3755,3757,3759,3761,3764,3766],{"class":1088,"line":1144},[1086,3745,3039],{"class":2043},[1086,3747,3748],{"class":2053}," updateOrderStatus",[1086,3750,2057],{"class":2120},[1086,3752,2476],{"class":1968},[1086,3754,2050],{"class":1092},[1086,3756,2536],{"class":1968},[1086,3758,1435],{"class":1092},[1086,3760,2197],{"class":1092},[1086,3762,3763],{"class":1115},"erp_synced",[1086,3765,2060],{"class":1092},[1086,3767,2068],{"class":2120},[1086,3769,3770,3772],{"class":1088,"line":1159},[1086,3771,2260],{"class":1092},[1086,3773,2068],{"class":1968},[990,3775,3776,3779],{},[994,3777,3778],{},"Result",": Entire workflow orchestrated via event-driven architecture, no hardcoded API dependencies.",[1043,3781,3783],{"id":3782},"best-practices","Best Practices",[1055,3785,1002],{"id":3786},"billing",[990,3788,3789,3790,3793],{},"Good billing is mostly about being clear and uncomplicated. List every feature a plan includes in ",[1005,3791,3792],{},"plans[].features"," and state its limits plainly in the description — a customer should never discover a cap after they've paid for it. Keep the plan structure simple; a couple of well-differentiated tiers beat a confusing matrix, and the same feature shouldn't cost different amounts in different plans. Price the monthly plans competitively and offer a modest yearly discount (10–15% is typical) to reward the longer commitment.",[1055,3795,201],{"id":2169},[990,3797,3798,3799,3801,3802,3805,3806,3808,3809,3812,3813,3817],{},"Designing with events well comes down to two habits. The first is ",[994,3800,2935],{},": because delivery is guaranteed through retries, a subscriber will occasionally see the same event twice, so it must produce the same result the second time — check whether you've already handled an event's ID before acting on it. The second is ",[994,3803,3804],{},"using events for what they're for",": publish one for every meaningful business action, name them consistently as ",[1005,3807,3241],{},", and include enough data in the payload that a subscriber rarely has to call back for more. Conversely, don't reach for events when you need a synchronous answer — that's what direct API calls are for — and never put sensitive data in a payload or forget to declare an event in ",[1005,3810,3811],{},"manifest.json",", or it won't flow at all. Above all, assume subscribers run ",[3814,3815,3816],"em",{},"eventually",", not instantly, and design for that delay rather than against it.",[1043,3819,3821],{"id":3820},"next-steps","Next Steps",[1018,3823,3824,3834,3843],{},[1021,3825,3826,3833],{},[994,3827,3828],{},[3829,3830,3832],"a",{"href":3831},"\u002Fdocs\u002Fproducts\u002Fapps\u002Fconcept\u002F","Concept"," — Understand the declarative app model",[1021,3835,3836,3842],{},[994,3837,3838],{},[3829,3839,3841],{"href":3840},"\u002Fdocs\u002Fproducts\u002Fapps\u002Flifecycle\u002F","Lifecycle"," — App versioning and upgrades",[1021,3844,3845,3850],{},[994,3846,3847],{},[3829,3848,3849],{"href":82},"Quick Start"," — Deploy your first app",[3852,3853,3854],"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":1082,"searchDepth":1096,"depth":1096,"links":3856},[3857,3862,3871,3878,3882],{"id":1045,"depth":1096,"text":1046,"children":3858},[3859,3860,3861],{"id":1057,"depth":1124,"text":1058},{"id":1818,"depth":1124,"text":1819},{"id":1948,"depth":1124,"text":1949},{"id":2136,"depth":1096,"text":2137,"children":3863},[3864,3865,3866,3867,3868,3869,3870],{"id":2143,"depth":1124,"text":2144},{"id":2428,"depth":1124,"text":2429},{"id":2783,"depth":1124,"text":2784},{"id":2806,"depth":1124,"text":2807},{"id":2935,"depth":1124,"text":2936},{"id":3091,"depth":1124,"text":3092},{"id":3234,"depth":1124,"text":3235},{"id":3280,"depth":1096,"text":3281,"children":3872},[3873,3874,3875,3876,3877],{"id":3284,"depth":1124,"text":3285},{"id":3412,"depth":1124,"text":3413},{"id":3521,"depth":1124,"text":3522},{"id":3605,"depth":1124,"text":3606},{"id":3691,"depth":1124,"text":3692},{"id":3782,"depth":1096,"text":3783,"children":3879},[3880,3881],{"id":3786,"depth":1124,"text":1002},{"id":2169,"depth":1124,"text":201},{"id":3820,"depth":1096,"text":3821},"App Marketplace billing models and event-driven architecture","md",null,{"status":3887},"published",{"title":117,"description":3883},{"loc":118},"9TduVf91ImARib4tqP3HHmVQIFqdFbYQifpCP0ydioE",1785229260881]