[{"data":1,"prerenderedAt":3054},["ShallowReactive",2],{"navigation_docs":3,"-docs-products-integration-studio-overview-":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":237,"body":986,"description":3046,"extension":3047,"landing":3048,"links":3048,"meta":3049,"navigation":1299,"path":238,"seo":3051,"sitemap":3052,"stem":239,"__hash__":3053},"docs\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Foverview\u002Findex.md",{"type":987,"value":988,"toc":3024},"minimark",[989,1003,1010,1077,1084,1089,1092,1099,1106,1109,1113,1118,1129,1133,1136,1376,1379,1383,1391,1615,1618,1622,1633,1637,1777,1781,1793,1956,1967,1971,1974,2058,2067,2071,2087,2161,2165,2172,2330,2335,2363,2367,2370,2384,2388,2909,2913,2916,2948,2952,2955,2959,2962,2969,2984,2988,3020],[990,991,992,993,997,998,1002],"p",{},"This page is for you if you want to understand ",[994,995,996],"strong",{},"why"," Integration Studio is built the way it is — typically because you're evaluating it for a project, planning a non-trivial integration, or trying to figure out why a workflow you wrote behaves the way it does. If you just want to build a workflow, ",[999,1000,249],"a",{"href":1001},"\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Fworkflow-builder\u002F"," is the more useful entry point.",[990,1004,1005,1006,1009],{},"The short version: Integration Studio runs the same workflow definitions in ",[994,1007,1008],{},"two different execution modes",". You pick the mode when you deploy, based on whether the workflow needs durability (the async engine) or low latency (the sync engine, in-process). The node library is shared between both modes — the same HTTP, JSON Transform, Filter, and Switch nodes work in either one.",[1011,1012,1013,1035],"table",{},[1014,1015,1016],"thead",{},[1017,1018,1019,1023,1026,1029,1032],"tr",{},[1020,1021,1022],"th",{},"Type",[1020,1024,1025],{},"Typical use",[1020,1027,1028],{},"Engine",[1020,1030,1031],{},"Duration",[1020,1033,1034],{},"Runtime overhead",[1036,1037,1038,1058],"tbody",{},[1017,1039,1040,1046,1049,1052,1055],{},[1041,1042,1043],"td",{},[994,1044,1045],{},"Async \u002F durable",[1041,1047,1048],{},"Nightly imports, scheduled syncs, multi-step batch jobs",[1041,1050,1051],{},"Async (durable)",[1041,1053,1054],{},"seconds to hours",[1041,1056,1057],{},"event history persisted per step",[1017,1059,1060,1065,1068,1071,1074],{},[1041,1061,1062],{},[994,1063,1064],{},"Sync \u002F real-time",[1041,1066,1067],{},"Live price checks, inventory queries, webhook responses",[1041,1069,1070],{},"Sync (in-process)",[1041,1072,1073],{},"sub-100ms",[1041,1075,1076],{},"none",[990,1078,1079,1080,1083],{},"The interesting question is ",[994,1081,1082],{},"why two engines",", and the rest of this page answers it.",[1085,1086,1088],"h2",{"id":1087},"why-one-engine-isnt-enough","Why one engine isn't enough",[990,1090,1091],{},"The async engine is excellent at what it's built for: long-running, durable workflows that survive crashes and pick up exactly where they left off. If that were the only thing Integration Studio had to do, there would be one engine and this page would be much shorter. But two requirements that come up constantly in commerce integrations push against that design.",[990,1093,1094,1095,1098],{},"The first is ",[994,1096,1097],{},"latency",". Starting a durable workflow isn't free — the run is queued and its event history is persisted before any of your business logic runs, which adds 10–50ms of overhead up front. For a nightly import that's noise, but for a live price check with a 100ms budget, spending half of it before the first HTTP call even fires is a non-starter.",[990,1100,1101,1102,1105],{},"The second is ",[994,1103,1104],{},"runtime-configurable workflows",". Durable workflows replay their history to recover, so they expect a stable, versioned code path. Integration Studio's premise is the opposite: a workflow definition is data, injected at runtime with arbitrary steps in an arbitrary order. That doesn't fit a replay model that assumes the code path stays the same every time a workflow is recovered.",[990,1107,1108],{},"The answer to both problems is the same — split the work into two execution paths and back both of them with one shared connector library. You get durability where durability matters, and in-process speed where speed matters, without writing your integration logic twice.",[1085,1110,1112],{"id":1111},"the-solution-dual-engines-one-connector-library","The solution: dual engines, one connector library",[1114,1115,1117],"h3",{"id":1116},"architecture-overview","Architecture overview",[1119,1120,1125],"pre",{"className":1121,"code":1123,"language":1124},[1122],"language-text","Integration Definition (JSON in DB)\n─────────────────────────────────────\n{\n  \"id\": \"erp-price-sync\",\n  \"mode\": \"sync\" | \"async\",\n  \"triggers\": [\"webhook\", \"schedule\"],\n  \"steps\": [\n    { \"connector\": \"http-request\", \"config\": { \"url\": \"{{env.ERP_URL}}\u002Fprices\" } },\n    { \"connector\": \"json-transform\", \"config\": { \"mapping\": \"...\" } },\n    { \"connector\": \"http-request\", \"config\": { \"method\": \"POST\", \"url\": \"{{env.INTERNAL_API}}\u002Fprices\" } }\n  ]\n}\n         ↓\n    ┌────┴────┐\n    │          │\nmode=async   mode=sync\n    │          │\n    ↓          ↓\n┌─────────┐ ┌──────────────┐\n│Async    │ │Sync Executor │\n│(durable)│ │(in-process)  │\n└────┬────┘ └──────┬───────┘\n     │             │\n     └──────┬──────┘\n            ↓\n    ┌───────────────────────┐\n    │ Connector Library     │\n    │ HTTP · JSON Transform │\n    │ Filter · Switch · …   │\n    └───────────────────────┘\n","text",[1126,1127,1123],"code",{"__ignoreMap":1128},"",[1114,1130,1132],{"id":1131},"async-engine-durable","Async engine (durable)",[990,1134,1135],{},"The async path handles long-running, durable integrations. Notice that there's exactly one workflow function — a generic loop that walks the steps in a definition and executes each connector in turn. It's written once and reused for every async integration; the actual behaviour comes entirely from the definition you pass in.",[1119,1137,1141],{"className":1138,"code":1139,"language":1140,"meta":1128,"style":1128},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Generic workflow (once, reused for all async integrations)\nasync function GenericIntegrationWorkflow(definition: IntegrationDef) {\n  for (const step of definition.steps) {\n    const connector = getConnector(step.connector)\n    const result = await connector.execute(step.config)\n  }\n}\n\n\u002F\u002F Usage: look up config, then submit to the durable engine\nconst config = await db.integrations.findById('erp-price-sync')\nawait runtime.startWorkflow(GenericIntegrationWorkflow, { config })\n","javascript",[1126,1142,1143,1152,1187,1223,1251,1282,1288,1294,1301,1307,1346],{"__ignoreMap":1128},[1144,1145,1148],"span",{"class":1146,"line":1147},"line",1,[1144,1149,1151],{"class":1150},"sHwdD","\u002F\u002F Generic workflow (once, reused for all async integrations)\n",[1144,1153,1155,1159,1162,1166,1170,1174,1177,1181,1184],{"class":1146,"line":1154},2,[1144,1156,1158],{"class":1157},"spNyl","async",[1144,1160,1161],{"class":1157}," function",[1144,1163,1165],{"class":1164},"s2Zo4"," GenericIntegrationWorkflow",[1144,1167,1169],{"class":1168},"sMK4o","(",[1144,1171,1173],{"class":1172},"sHdIc","definition",[1144,1175,1176],{"class":1168},":",[1144,1178,1180],{"class":1179},"sBMFI"," IntegrationDef",[1144,1182,1183],{"class":1168},")",[1144,1185,1186],{"class":1168}," {\n",[1144,1188,1190,1194,1198,1201,1205,1208,1211,1214,1217,1220],{"class":1146,"line":1189},3,[1144,1191,1193],{"class":1192},"s7zQu","  for",[1144,1195,1197],{"class":1196},"swJcz"," (",[1144,1199,1200],{"class":1157},"const",[1144,1202,1204],{"class":1203},"sTEyZ"," step",[1144,1206,1207],{"class":1168}," of",[1144,1209,1210],{"class":1203}," definition",[1144,1212,1213],{"class":1168},".",[1144,1215,1216],{"class":1203},"steps",[1144,1218,1219],{"class":1196},") ",[1144,1221,1222],{"class":1168},"{\n",[1144,1224,1226,1229,1232,1235,1238,1240,1243,1245,1248],{"class":1146,"line":1225},4,[1144,1227,1228],{"class":1157},"    const",[1144,1230,1231],{"class":1203}," connector",[1144,1233,1234],{"class":1168}," =",[1144,1236,1237],{"class":1164}," getConnector",[1144,1239,1169],{"class":1196},[1144,1241,1242],{"class":1203},"step",[1144,1244,1213],{"class":1168},[1144,1246,1247],{"class":1203},"connector",[1144,1249,1250],{"class":1196},")\n",[1144,1252,1254,1256,1259,1261,1264,1266,1268,1271,1273,1275,1277,1280],{"class":1146,"line":1253},5,[1144,1255,1228],{"class":1157},[1144,1257,1258],{"class":1203}," result",[1144,1260,1234],{"class":1168},[1144,1262,1263],{"class":1192}," await",[1144,1265,1231],{"class":1203},[1144,1267,1213],{"class":1168},[1144,1269,1270],{"class":1164},"execute",[1144,1272,1169],{"class":1196},[1144,1274,1242],{"class":1203},[1144,1276,1213],{"class":1168},[1144,1278,1279],{"class":1203},"config",[1144,1281,1250],{"class":1196},[1144,1283,1285],{"class":1146,"line":1284},6,[1144,1286,1287],{"class":1168},"  }\n",[1144,1289,1291],{"class":1146,"line":1290},7,[1144,1292,1293],{"class":1168},"}\n",[1144,1295,1297],{"class":1146,"line":1296},8,[1144,1298,1300],{"emptyLinePlaceholder":1299},true,"\n",[1144,1302,1304],{"class":1146,"line":1303},9,[1144,1305,1306],{"class":1150},"\u002F\u002F Usage: look up config, then submit to the durable engine\n",[1144,1308,1310,1312,1315,1318,1320,1323,1325,1328,1330,1333,1335,1338,1342,1344],{"class":1146,"line":1309},10,[1144,1311,1200],{"class":1157},[1144,1313,1314],{"class":1203}," config ",[1144,1316,1317],{"class":1168},"=",[1144,1319,1263],{"class":1192},[1144,1321,1322],{"class":1203}," db",[1144,1324,1213],{"class":1168},[1144,1326,1327],{"class":1203},"integrations",[1144,1329,1213],{"class":1168},[1144,1331,1332],{"class":1164},"findById",[1144,1334,1169],{"class":1203},[1144,1336,1337],{"class":1168},"'",[1144,1339,1341],{"class":1340},"sfazB","erp-price-sync",[1144,1343,1337],{"class":1168},[1144,1345,1250],{"class":1203},[1144,1347,1349,1352,1355,1357,1360,1363,1366,1369,1371,1374],{"class":1146,"line":1348},11,[1144,1350,1351],{"class":1192},"await",[1144,1353,1354],{"class":1203}," runtime",[1144,1356,1213],{"class":1168},[1144,1358,1359],{"class":1164},"startWorkflow",[1144,1361,1362],{"class":1203},"(GenericIntegrationWorkflow",[1144,1364,1365],{"class":1168},",",[1144,1367,1368],{"class":1168}," {",[1144,1370,1314],{"class":1203},[1144,1372,1373],{"class":1168},"}",[1144,1375,1250],{"class":1203},[990,1377,1378],{},"This path is durable. Workflow state is persisted across failures, so a worker crashing mid-run doesn't lose progress — another worker resumes from the last completed step. Failed steps retry automatically with exponential backoff, long-running steps send heartbeats to prove they're still alive, and every step is recorded in an event history that gives you a complete audit trail. Each workflow can also carry its own configurable timeout.",[1114,1380,1382],{"id":1381},"sync-engine-in-process","Sync engine (in-process)",[990,1384,1385,1386,1390],{},"The sync path handles real-time, low-latency integrations. It runs the ",[1387,1388,1389],"em",{},"same"," connectors, but the execution model is just a plain HTTP handler: it loads the definition, feeds the request body through each step in sequence, and returns the result inline.",[1119,1392,1394],{"className":1138,"code":1393,"language":1140,"meta":1128,"style":1128},"\u002F\u002F Same connectors, different execution model\napp.post('\u002Fintegrations\u002F:id\u002Frun', async (req, res) => {\n  const config = await db.integrations.findById(req.params.id)\n  \n  let data = req.body\n  for (const step of config.steps) {\n    const connector = getConnector(step.connector)\n    data = await connector.execute(step.config, data)\n  }\n  \n  res.json({ result: data })\n})\n",[1126,1395,1396,1401,1442,1480,1485,1503,1525,1545,1574,1578,1582,1608],{"__ignoreMap":1128},[1144,1397,1398],{"class":1146,"line":1147},[1144,1399,1400],{"class":1150},"\u002F\u002F Same connectors, different execution model\n",[1144,1402,1403,1406,1408,1411,1413,1415,1418,1420,1422,1425,1427,1430,1432,1435,1437,1440],{"class":1146,"line":1154},[1144,1404,1405],{"class":1203},"app",[1144,1407,1213],{"class":1168},[1144,1409,1410],{"class":1164},"post",[1144,1412,1169],{"class":1203},[1144,1414,1337],{"class":1168},[1144,1416,1417],{"class":1340},"\u002Fintegrations\u002F:id\u002Frun",[1144,1419,1337],{"class":1168},[1144,1421,1365],{"class":1168},[1144,1423,1424],{"class":1157}," async",[1144,1426,1197],{"class":1168},[1144,1428,1429],{"class":1172},"req",[1144,1431,1365],{"class":1168},[1144,1433,1434],{"class":1172}," res",[1144,1436,1183],{"class":1168},[1144,1438,1439],{"class":1157}," =>",[1144,1441,1186],{"class":1168},[1144,1443,1444,1447,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1473,1475,1478],{"class":1146,"line":1189},[1144,1445,1446],{"class":1157},"  const",[1144,1448,1449],{"class":1203}," config",[1144,1451,1234],{"class":1168},[1144,1453,1263],{"class":1192},[1144,1455,1322],{"class":1203},[1144,1457,1213],{"class":1168},[1144,1459,1327],{"class":1203},[1144,1461,1213],{"class":1168},[1144,1463,1332],{"class":1164},[1144,1465,1169],{"class":1196},[1144,1467,1429],{"class":1203},[1144,1469,1213],{"class":1168},[1144,1471,1472],{"class":1203},"params",[1144,1474,1213],{"class":1168},[1144,1476,1477],{"class":1203},"id",[1144,1479,1250],{"class":1196},[1144,1481,1482],{"class":1146,"line":1225},[1144,1483,1484],{"class":1196},"  \n",[1144,1486,1487,1490,1493,1495,1498,1500],{"class":1146,"line":1253},[1144,1488,1489],{"class":1157},"  let",[1144,1491,1492],{"class":1203}," data",[1144,1494,1234],{"class":1168},[1144,1496,1497],{"class":1203}," req",[1144,1499,1213],{"class":1168},[1144,1501,1502],{"class":1203},"body\n",[1144,1504,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523],{"class":1146,"line":1284},[1144,1506,1193],{"class":1192},[1144,1508,1197],{"class":1196},[1144,1510,1200],{"class":1157},[1144,1512,1204],{"class":1203},[1144,1514,1207],{"class":1168},[1144,1516,1449],{"class":1203},[1144,1518,1213],{"class":1168},[1144,1520,1216],{"class":1203},[1144,1522,1219],{"class":1196},[1144,1524,1222],{"class":1168},[1144,1526,1527,1529,1531,1533,1535,1537,1539,1541,1543],{"class":1146,"line":1290},[1144,1528,1228],{"class":1157},[1144,1530,1231],{"class":1203},[1144,1532,1234],{"class":1168},[1144,1534,1237],{"class":1164},[1144,1536,1169],{"class":1196},[1144,1538,1242],{"class":1203},[1144,1540,1213],{"class":1168},[1144,1542,1247],{"class":1203},[1144,1544,1250],{"class":1196},[1144,1546,1547,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568,1570,1572],{"class":1146,"line":1296},[1144,1548,1549],{"class":1203},"    data",[1144,1551,1234],{"class":1168},[1144,1553,1263],{"class":1192},[1144,1555,1231],{"class":1203},[1144,1557,1213],{"class":1168},[1144,1559,1270],{"class":1164},[1144,1561,1169],{"class":1196},[1144,1563,1242],{"class":1203},[1144,1565,1213],{"class":1168},[1144,1567,1279],{"class":1203},[1144,1569,1365],{"class":1168},[1144,1571,1492],{"class":1203},[1144,1573,1250],{"class":1196},[1144,1575,1576],{"class":1146,"line":1303},[1144,1577,1287],{"class":1168},[1144,1579,1580],{"class":1146,"line":1309},[1144,1581,1484],{"class":1196},[1144,1583,1584,1587,1589,1592,1594,1597,1599,1601,1603,1606],{"class":1146,"line":1348},[1144,1585,1586],{"class":1203},"  res",[1144,1588,1213],{"class":1168},[1144,1590,1591],{"class":1164},"json",[1144,1593,1169],{"class":1196},[1144,1595,1596],{"class":1168},"{",[1144,1598,1258],{"class":1196},[1144,1600,1176],{"class":1168},[1144,1602,1492],{"class":1203},[1144,1604,1605],{"class":1168}," }",[1144,1607,1250],{"class":1196},[1144,1609,1611,1613],{"class":1146,"line":1610},12,[1144,1612,1373],{"class":1168},[1144,1614,1250],{"class":1203},[990,1616,1617],{},"This path trades durability for speed. Because it runs in the same process as the request handler, there's no queue polling and no gRPC roundtrip — the workflow executes inline and its result comes straight back in the HTTP response. To stay resilient under load it supports a configurable circuit breaker, and it can fall back to stale cached data when an upstream system times out, degrading gracefully instead of failing outright.",[1085,1619,1621],{"id":1620},"connectors-the-shared-library","Connectors: the shared library",[990,1623,1624,1625,1628,1629,1632],{},"If the two engines are the ",[1387,1626,1627],{},"how",", connectors are the ",[1387,1630,1631],{},"what",". A connector is a pre-built, reusable unit of work that does exactly one job — make an HTTP request, transform some JSON, filter an array — and knows nothing about which engine is running it. That's the piece that makes the dual-engine design pay off: write a connector once, and it works identically in a durable async workflow and in a sub-100ms sync call. In the visual builder these same connectors show up as the nodes you drag onto the canvas; \"connector\" is the runtime term, \"node\" is the editor term for the same thing.",[1114,1634,1636],{"id":1635},"the-current-connectors","The current connectors",[1011,1638,1639,1651],{},[1014,1640,1641],{},[1017,1642,1643,1646,1648],{},[1020,1644,1645],{},"Connector",[1020,1647,1022],{},[1020,1649,1650],{},"Purpose",[1036,1652,1653,1666,1678,1691,1703,1716,1728,1740,1752,1764],{},[1017,1654,1655,1660,1663],{},[1041,1656,1657],{},[1126,1658,1659],{},"http-request",[1041,1661,1662],{},"Action",[1041,1664,1665],{},"GET\u002FPOST to any HTTP endpoint",[1017,1667,1668,1673,1675],{},[1041,1669,1670],{},[1126,1671,1672],{},"send-email",[1041,1674,1662],{},[1041,1676,1677],{},"Transactional email (SMTP)",[1017,1679,1680,1685,1688],{},[1041,1681,1682],{},[1126,1683,1684],{},"json-transform",[1041,1686,1687],{},"Transform",[1041,1689,1690],{},"Reshape data with jq-like expressions",[1017,1692,1693,1698,1700],{},[1041,1694,1695],{},[1126,1696,1697],{},"filter",[1041,1699,1687],{},[1041,1701,1702],{},"Filter arrays\u002Fobjects by condition",[1017,1704,1705,1710,1713],{},[1041,1706,1707],{},[1126,1708,1709],{},"switch",[1041,1711,1712],{},"Control",[1041,1714,1715],{},"Conditional routing based on data",[1017,1717,1718,1723,1725],{},[1041,1719,1720],{},[1126,1721,1722],{},"regex-extract",[1041,1724,1687],{},[1041,1726,1727],{},"Extract substrings using regex",[1017,1729,1730,1735,1737],{},[1041,1731,1732],{},[1126,1733,1734],{},"download",[1041,1736,1662],{},[1041,1738,1739],{},"Download file from URL",[1017,1741,1742,1747,1749],{},[1041,1743,1744],{},[1126,1745,1746],{},"upload",[1041,1748,1662],{},[1041,1750,1751],{},"Upload file to storage (S3)",[1017,1753,1754,1759,1761],{},[1041,1755,1756],{},[1126,1757,1758],{},"iterator",[1041,1760,1712],{},[1041,1762,1763],{},"Loop over array items",[1017,1765,1766,1771,1774],{},[1041,1767,1768],{},[1126,1769,1770],{},"webhook-trigger",[1041,1772,1773],{},"Trigger",[1041,1775,1776],{},"HTTP webhook entry point",[1114,1778,1780],{"id":1779},"a-connector-up-close-http-request","A connector up close: HTTP Request",[990,1782,1783,1784,1786,1787,1789,1790,1792],{},"The ",[1126,1785,1659],{}," connector is the one you'll use most, so it's a good example of the general shape. Every connector is configured by a small JSON block — a ",[1126,1788,1247],{}," name and a ",[1126,1791,1279],{}," object whose fields are specific to that connector. Here the config carries the method, URL, headers, and body of the request:",[1119,1794,1797],{"className":1795,"code":1796,"language":1591,"meta":1128,"style":1128},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"connector\": \"http-request\",\n  \"config\": {\n    \"method\": \"POST\",\n    \"url\": \"https:\u002F\u002Fapi.example.com\u002Forders\",\n    \"headers\": { \"Authorization\": \"Bearer {{secrets.API_KEY}}\" },\n    \"body\": \"{{ $ }}\",  \u002F\u002F Pass entire input\n    \"timeoutMs\": 30000\n  }\n}\n",[1126,1798,1799,1803,1825,1837,1858,1878,1911,1934,1948,1952],{"__ignoreMap":1128},[1144,1800,1801],{"class":1146,"line":1147},[1144,1802,1222],{"class":1168},[1144,1804,1805,1808,1810,1813,1815,1818,1820,1822],{"class":1146,"line":1154},[1144,1806,1807],{"class":1168},"  \"",[1144,1809,1247],{"class":1157},[1144,1811,1812],{"class":1168},"\"",[1144,1814,1176],{"class":1168},[1144,1816,1817],{"class":1168}," \"",[1144,1819,1659],{"class":1340},[1144,1821,1812],{"class":1168},[1144,1823,1824],{"class":1168},",\n",[1144,1826,1827,1829,1831,1833,1835],{"class":1146,"line":1189},[1144,1828,1807],{"class":1168},[1144,1830,1279],{"class":1157},[1144,1832,1812],{"class":1168},[1144,1834,1176],{"class":1168},[1144,1836,1186],{"class":1168},[1144,1838,1839,1842,1845,1847,1849,1851,1854,1856],{"class":1146,"line":1225},[1144,1840,1841],{"class":1168},"    \"",[1144,1843,1844],{"class":1179},"method",[1144,1846,1812],{"class":1168},[1144,1848,1176],{"class":1168},[1144,1850,1817],{"class":1168},[1144,1852,1853],{"class":1340},"POST",[1144,1855,1812],{"class":1168},[1144,1857,1824],{"class":1168},[1144,1859,1860,1862,1865,1867,1869,1871,1874,1876],{"class":1146,"line":1253},[1144,1861,1841],{"class":1168},[1144,1863,1864],{"class":1179},"url",[1144,1866,1812],{"class":1168},[1144,1868,1176],{"class":1168},[1144,1870,1817],{"class":1168},[1144,1872,1873],{"class":1340},"https:\u002F\u002Fapi.example.com\u002Forders",[1144,1875,1812],{"class":1168},[1144,1877,1824],{"class":1168},[1144,1879,1880,1882,1885,1887,1889,1891,1893,1897,1899,1901,1903,1906,1908],{"class":1146,"line":1284},[1144,1881,1841],{"class":1168},[1144,1883,1884],{"class":1179},"headers",[1144,1886,1812],{"class":1168},[1144,1888,1176],{"class":1168},[1144,1890,1368],{"class":1168},[1144,1892,1817],{"class":1168},[1144,1894,1896],{"class":1895},"sbssI","Authorization",[1144,1898,1812],{"class":1168},[1144,1900,1176],{"class":1168},[1144,1902,1817],{"class":1168},[1144,1904,1905],{"class":1340},"Bearer {{secrets.API_KEY}}",[1144,1907,1812],{"class":1168},[1144,1909,1910],{"class":1168}," },\n",[1144,1912,1913,1915,1918,1920,1922,1924,1927,1929,1931],{"class":1146,"line":1290},[1144,1914,1841],{"class":1168},[1144,1916,1917],{"class":1179},"body",[1144,1919,1812],{"class":1168},[1144,1921,1176],{"class":1168},[1144,1923,1817],{"class":1168},[1144,1925,1926],{"class":1340},"{{ $ }}",[1144,1928,1812],{"class":1168},[1144,1930,1365],{"class":1168},[1144,1932,1933],{"class":1150},"  \u002F\u002F Pass entire input\n",[1144,1935,1936,1938,1941,1943,1945],{"class":1146,"line":1296},[1144,1937,1841],{"class":1168},[1144,1939,1940],{"class":1179},"timeoutMs",[1144,1942,1812],{"class":1168},[1144,1944,1176],{"class":1168},[1144,1946,1947],{"class":1895}," 30000\n",[1144,1949,1950],{"class":1146,"line":1303},[1144,1951,1287],{"class":1168},[1144,1953,1954],{"class":1146,"line":1309},[1144,1955,1293],{"class":1168},[990,1957,1958,1959,1962,1963,1966],{},"It takes the upstream workflow data as its input and produces one of two outputs: a ",[1126,1960,1961],{},"response"," object (status, headers, body) on success, or an ",[1126,1964,1965],{},"error"," on a non-2xx status, timeout, or network failure. That input-in, output-or-error-out contract is the same for every connector, which is what lets you chain them together without special-casing each one.",[1114,1968,1970],{"id":1969},"expanding-the-library","Expanding the library",[990,1972,1973],{},"New connectors are built and deployed by the platform team, not by integration developers — that's deliberate, because it keeps the runtime surface small and audited. Once a connector ships, your integration definitions reference it like any other, with no workflow code to change on your side:",[1119,1975,1977],{"className":1795,"code":1976,"language":1591,"meta":1128,"style":1128},"\u002F\u002F Example: hypothetical SOAP connector (not yet available)\n{\n  \"connector\": \"soap-request\",\n  \"config\": { \"endpoint\": \"...\", \"method\": \"...\" }\n}\n",[1126,1978,1979,1984,1988,2007,2054],{"__ignoreMap":1128},[1144,1980,1981],{"class":1146,"line":1147},[1144,1982,1983],{"class":1150},"\u002F\u002F Example: hypothetical SOAP connector (not yet available)\n",[1144,1985,1986],{"class":1146,"line":1154},[1144,1987,1222],{"class":1168},[1144,1989,1990,1992,1994,1996,1998,2000,2003,2005],{"class":1146,"line":1189},[1144,1991,1807],{"class":1168},[1144,1993,1247],{"class":1157},[1144,1995,1812],{"class":1168},[1144,1997,1176],{"class":1168},[1144,1999,1817],{"class":1168},[1144,2001,2002],{"class":1340},"soap-request",[1144,2004,1812],{"class":1168},[1144,2006,1824],{"class":1168},[1144,2008,2009,2011,2013,2015,2017,2019,2021,2024,2026,2028,2030,2033,2035,2037,2039,2041,2043,2045,2047,2049,2051],{"class":1146,"line":1225},[1144,2010,1807],{"class":1168},[1144,2012,1279],{"class":1157},[1144,2014,1812],{"class":1168},[1144,2016,1176],{"class":1168},[1144,2018,1368],{"class":1168},[1144,2020,1817],{"class":1168},[1144,2022,2023],{"class":1179},"endpoint",[1144,2025,1812],{"class":1168},[1144,2027,1176],{"class":1168},[1144,2029,1817],{"class":1168},[1144,2031,2032],{"class":1340},"...",[1144,2034,1812],{"class":1168},[1144,2036,1365],{"class":1168},[1144,2038,1817],{"class":1168},[1144,2040,1844],{"class":1179},[1144,2042,1812],{"class":1168},[1144,2044,1176],{"class":1168},[1144,2046,1817],{"class":1168},[1144,2048,2032],{"class":1340},[1144,2050,1812],{"class":1168},[1144,2052,2053],{"class":1168}," }\n",[1144,2055,2056],{"class":1146,"line":1253},[1144,2057,1293],{"class":1168},[2059,2060,2061,2062,2066],"note",{},"The example above is illustrative. See ",[999,2063,2065],{"href":2064},"\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Fnode-types#roadmap-vision","Node Types → Roadmap"," for the list of planned connectors.",[1085,2068,2070],{"id":2069},"triggers-how-integrations-start","Triggers: how integrations start",[990,2072,2073,2074,2077,2078,2081,2082,2086],{},"Every workflow needs something to kick it off, and there are three options. They differ mainly in ",[1387,2075,2076],{},"who"," starts the run and ",[1387,2079,2080],{},"when"," — an external system reacting to an event, the clock, or a person in Cockpit. Note that Schedule triggers only make sense on the async engine, since there's no caller waiting on a response. The ",[999,2083,2085],{"href":2084},"\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Ftriggers\u002F","Triggers page"," covers each in depth; the table below is the quick comparison.",[1011,2088,2089,2106],{},[1014,2090,2091],{},[1017,2092,2093,2095,2097,2100,2103],{},[1020,2094,1773],{},[1020,2096,1022],{},[1020,2098,2099],{},"Async",[1020,2101,2102],{},"Sync",[1020,2104,2105],{},"Use Case",[1036,2107,2108,2126,2144],{},[1017,2109,2110,2115,2118,2121,2123],{},[1041,2111,2112],{},[994,2113,2114],{},"Webhook",[1041,2116,2117],{},"Event-driven",[1041,2119,2120],{},"✓",[1041,2122,2120],{},[1041,2124,2125],{},"External system calls you (order event, file upload)",[1017,2127,2128,2133,2136,2138,2141],{},[1041,2129,2130],{},[994,2131,2132],{},"Schedule",[1041,2134,2135],{},"Time-based",[1041,2137,2120],{},[1041,2139,2140],{},"✗",[1041,2142,2143],{},"Run at specific times (nightly import, hourly sync)",[1017,2145,2146,2151,2154,2156,2158],{},[1041,2147,2148],{},[994,2149,2150],{},"Manual",[1041,2152,2153],{},"User-initiated",[1041,2155,2120],{},[1041,2157,2120],{},[1041,2159,2160],{},"Customer clicks \"Sync Now\" button in Cockpit",[1085,2162,2164],{"id":2163},"expression-syntax-dynamic-parameters","Expression syntax: dynamic parameters",[990,2166,2167,2168,2171],{},"The steps in a workflow aren't isolated — a later step almost always needs a value that an earlier step produced, plus secrets and configuration that shouldn't be hard-coded. Expressions are how you wire those values in. Anywhere a connector's config takes a value, you can write a ",[1126,2169,2170],{},"{{ ... }}"," expression instead of a literal, and the engine substitutes the real value at runtime:",[1119,2173,2175],{"className":1795,"code":2174,"language":1591,"meta":1128,"style":1128},"{\n  \"connector\": \"http-request\",\n  \"config\": {\n    \"url\": \"https:\u002F\u002Ferp.example.com\u002Fprices\",\n    \"headers\": {\n      \"Authorization\": \"Bearer {{secrets.ERP_API_KEY}}\",\n      \"X-Tenant\": \"{{steps.0.outputs.tenant_id}}\"\n    },\n    \"body\": {\n      \"articles\": \"{{steps.0.outputs.articles}}\"\n    }\n  }\n}\n",[1126,2176,2177,2181,2199,2211,2230,2242,2262,2281,2286,2298,2316,2321,2325],{"__ignoreMap":1128},[1144,2178,2179],{"class":1146,"line":1147},[1144,2180,1222],{"class":1168},[1144,2182,2183,2185,2187,2189,2191,2193,2195,2197],{"class":1146,"line":1154},[1144,2184,1807],{"class":1168},[1144,2186,1247],{"class":1157},[1144,2188,1812],{"class":1168},[1144,2190,1176],{"class":1168},[1144,2192,1817],{"class":1168},[1144,2194,1659],{"class":1340},[1144,2196,1812],{"class":1168},[1144,2198,1824],{"class":1168},[1144,2200,2201,2203,2205,2207,2209],{"class":1146,"line":1189},[1144,2202,1807],{"class":1168},[1144,2204,1279],{"class":1157},[1144,2206,1812],{"class":1168},[1144,2208,1176],{"class":1168},[1144,2210,1186],{"class":1168},[1144,2212,2213,2215,2217,2219,2221,2223,2226,2228],{"class":1146,"line":1225},[1144,2214,1841],{"class":1168},[1144,2216,1864],{"class":1179},[1144,2218,1812],{"class":1168},[1144,2220,1176],{"class":1168},[1144,2222,1817],{"class":1168},[1144,2224,2225],{"class":1340},"https:\u002F\u002Ferp.example.com\u002Fprices",[1144,2227,1812],{"class":1168},[1144,2229,1824],{"class":1168},[1144,2231,2232,2234,2236,2238,2240],{"class":1146,"line":1253},[1144,2233,1841],{"class":1168},[1144,2235,1884],{"class":1179},[1144,2237,1812],{"class":1168},[1144,2239,1176],{"class":1168},[1144,2241,1186],{"class":1168},[1144,2243,2244,2247,2249,2251,2253,2255,2258,2260],{"class":1146,"line":1284},[1144,2245,2246],{"class":1168},"      \"",[1144,2248,1896],{"class":1895},[1144,2250,1812],{"class":1168},[1144,2252,1176],{"class":1168},[1144,2254,1817],{"class":1168},[1144,2256,2257],{"class":1340},"Bearer {{secrets.ERP_API_KEY}}",[1144,2259,1812],{"class":1168},[1144,2261,1824],{"class":1168},[1144,2263,2264,2266,2269,2271,2273,2275,2278],{"class":1146,"line":1290},[1144,2265,2246],{"class":1168},[1144,2267,2268],{"class":1895},"X-Tenant",[1144,2270,1812],{"class":1168},[1144,2272,1176],{"class":1168},[1144,2274,1817],{"class":1168},[1144,2276,2277],{"class":1340},"{{steps.0.outputs.tenant_id}}",[1144,2279,2280],{"class":1168},"\"\n",[1144,2282,2283],{"class":1146,"line":1296},[1144,2284,2285],{"class":1168},"    },\n",[1144,2287,2288,2290,2292,2294,2296],{"class":1146,"line":1303},[1144,2289,1841],{"class":1168},[1144,2291,1917],{"class":1179},[1144,2293,1812],{"class":1168},[1144,2295,1176],{"class":1168},[1144,2297,1186],{"class":1168},[1144,2299,2300,2302,2305,2307,2309,2311,2314],{"class":1146,"line":1309},[1144,2301,2246],{"class":1168},[1144,2303,2304],{"class":1895},"articles",[1144,2306,1812],{"class":1168},[1144,2308,1176],{"class":1168},[1144,2310,1817],{"class":1168},[1144,2312,2313],{"class":1340},"{{steps.0.outputs.articles}}",[1144,2315,2280],{"class":1168},[1144,2317,2318],{"class":1146,"line":1348},[1144,2319,2320],{"class":1168},"    }\n",[1144,2322,2323],{"class":1146,"line":1610},[1144,2324,1287],{"class":1168},[1144,2326,2328],{"class":1146,"line":2327},13,[1144,2329,1293],{"class":1168},[990,2331,2332],{},[994,2333,2334],{},"Available Variables:",[2336,2337,2338,2345,2351,2357],"ul",{},[2339,2340,2341,2344],"li",{},[1126,2342,2343],{},"{{secrets.KEY}}"," — Secret reference (encrypted)",[2339,2346,2347,2350],{},[1126,2348,2349],{},"{{steps.N.outputs.FIELD}}"," — Output from step N",[2339,2352,2353,2356],{},[1126,2354,2355],{},"{{$}}"," — Entire input data",[2339,2358,2359,2362],{},[1126,2360,2361],{},"{{env.VAR}}"," — Environment variable (read at workflow start)",[1085,2364,2366],{"id":2365},"a-worked-example-erp-price-sync","A worked example: ERP price sync",[990,2368,2369],{},"It helps to see all of this in one place. The integration below keeps the catalog's prices in step with a customer's ERP. It's a textbook async case: it runs on a schedule, it touches a system that's occasionally slow or down, and nobody is sitting waiting on the result — so durability matters far more than latency.",[990,2371,2372,2373,2376,2377,2380,2381,2383],{},"The whole thing is three steps: pull the current prices from the ERP, reshape them into the format the internal catalog expects, and push them in. Read it top to bottom and you can see how the pieces from the rest of this page fit together — the ",[1126,2374,2375],{},"mode"," chooses the engine, the ",[1126,2378,2379],{},"schedule"," is the trigger, each entry in ",[1126,2382,1216],{}," names a connector, and the expressions wire secrets and step outputs into the requests.",[1114,2385,2387],{"id":2386},"the-definition-stored-in-the-database","The definition (stored in the database)",[1119,2389,2391],{"className":1795,"code":2390,"language":1591,"meta":1128,"style":1128},"{\n  \"id\": \"erp-price-sync\",\n  \"mode\": \"async\",\n  \"triggers\": [\"schedule\"],\n  \"schedule\": \"0 *\u002F6 * * *\",  \u002F\u002F Every 6 hours\n  \"steps\": [\n    {\n      \"name\": \"fetch-prices\",\n      \"connector\": \"http-request\",\n      \"config\": {\n        \"method\": \"GET\",\n        \"url\": \"{{secrets.ERP_ENDPOINT}}\u002Fapi\u002Fv1\u002Fprices\",\n        \"timeoutMs\": 60000\n      }\n    },\n    {\n      \"name\": \"transform\",\n      \"connector\": \"json-transform\",\n      \"config\": {\n        \"mapping\": {\n          \"sku\": \"$.articles[].supplier_aid\",\n          \"price\": \"$.articles[].price\"\n        }\n      }\n    },\n    {\n      \"name\": \"push-prices\",\n      \"connector\": \"http-request\",\n      \"config\": {\n        \"method\": \"POST\",\n        \"url\": \"{{env.INTERNAL_API}}\u002Fcatalog\u002Fprices\u002Fbulk-upsert\",\n        \"headers\": {\n          \"Authorization\": \"Bearer {{secrets.INTERNAL_API_TOKEN}}\"\n        },\n        \"body\": \"{{steps.1.outputs}}\"\n      }\n    }\n  ]\n}\n",[1126,2392,2393,2397,2415,2433,2456,2478,2491,2496,2516,2534,2546,2566,2585,2598,2604,2609,2614,2634,2653,2666,2680,2702,2721,2727,2732,2737,2742,2762,2781,2794,2813,2833,2846,2864,2870,2888,2893,2898,2904],{"__ignoreMap":1128},[1144,2394,2395],{"class":1146,"line":1147},[1144,2396,1222],{"class":1168},[1144,2398,2399,2401,2403,2405,2407,2409,2411,2413],{"class":1146,"line":1154},[1144,2400,1807],{"class":1168},[1144,2402,1477],{"class":1157},[1144,2404,1812],{"class":1168},[1144,2406,1176],{"class":1168},[1144,2408,1817],{"class":1168},[1144,2410,1341],{"class":1340},[1144,2412,1812],{"class":1168},[1144,2414,1824],{"class":1168},[1144,2416,2417,2419,2421,2423,2425,2427,2429,2431],{"class":1146,"line":1189},[1144,2418,1807],{"class":1168},[1144,2420,2375],{"class":1157},[1144,2422,1812],{"class":1168},[1144,2424,1176],{"class":1168},[1144,2426,1817],{"class":1168},[1144,2428,1158],{"class":1340},[1144,2430,1812],{"class":1168},[1144,2432,1824],{"class":1168},[1144,2434,2435,2437,2440,2442,2444,2447,2449,2451,2453],{"class":1146,"line":1225},[1144,2436,1807],{"class":1168},[1144,2438,2439],{"class":1157},"triggers",[1144,2441,1812],{"class":1168},[1144,2443,1176],{"class":1168},[1144,2445,2446],{"class":1168}," [",[1144,2448,1812],{"class":1168},[1144,2450,2379],{"class":1340},[1144,2452,1812],{"class":1168},[1144,2454,2455],{"class":1168},"],\n",[1144,2457,2458,2460,2462,2464,2466,2468,2471,2473,2475],{"class":1146,"line":1253},[1144,2459,1807],{"class":1168},[1144,2461,2379],{"class":1157},[1144,2463,1812],{"class":1168},[1144,2465,1176],{"class":1168},[1144,2467,1817],{"class":1168},[1144,2469,2470],{"class":1340},"0 *\u002F6 * * *",[1144,2472,1812],{"class":1168},[1144,2474,1365],{"class":1168},[1144,2476,2477],{"class":1150},"  \u002F\u002F Every 6 hours\n",[1144,2479,2480,2482,2484,2486,2488],{"class":1146,"line":1284},[1144,2481,1807],{"class":1168},[1144,2483,1216],{"class":1157},[1144,2485,1812],{"class":1168},[1144,2487,1176],{"class":1168},[1144,2489,2490],{"class":1168}," [\n",[1144,2492,2493],{"class":1146,"line":1290},[1144,2494,2495],{"class":1168},"    {\n",[1144,2497,2498,2500,2503,2505,2507,2509,2512,2514],{"class":1146,"line":1296},[1144,2499,2246],{"class":1168},[1144,2501,2502],{"class":1179},"name",[1144,2504,1812],{"class":1168},[1144,2506,1176],{"class":1168},[1144,2508,1817],{"class":1168},[1144,2510,2511],{"class":1340},"fetch-prices",[1144,2513,1812],{"class":1168},[1144,2515,1824],{"class":1168},[1144,2517,2518,2520,2522,2524,2526,2528,2530,2532],{"class":1146,"line":1303},[1144,2519,2246],{"class":1168},[1144,2521,1247],{"class":1179},[1144,2523,1812],{"class":1168},[1144,2525,1176],{"class":1168},[1144,2527,1817],{"class":1168},[1144,2529,1659],{"class":1340},[1144,2531,1812],{"class":1168},[1144,2533,1824],{"class":1168},[1144,2535,2536,2538,2540,2542,2544],{"class":1146,"line":1309},[1144,2537,2246],{"class":1168},[1144,2539,1279],{"class":1179},[1144,2541,1812],{"class":1168},[1144,2543,1176],{"class":1168},[1144,2545,1186],{"class":1168},[1144,2547,2548,2551,2553,2555,2557,2559,2562,2564],{"class":1146,"line":1348},[1144,2549,2550],{"class":1168},"        \"",[1144,2552,1844],{"class":1895},[1144,2554,1812],{"class":1168},[1144,2556,1176],{"class":1168},[1144,2558,1817],{"class":1168},[1144,2560,2561],{"class":1340},"GET",[1144,2563,1812],{"class":1168},[1144,2565,1824],{"class":1168},[1144,2567,2568,2570,2572,2574,2576,2578,2581,2583],{"class":1146,"line":1610},[1144,2569,2550],{"class":1168},[1144,2571,1864],{"class":1895},[1144,2573,1812],{"class":1168},[1144,2575,1176],{"class":1168},[1144,2577,1817],{"class":1168},[1144,2579,2580],{"class":1340},"{{secrets.ERP_ENDPOINT}}\u002Fapi\u002Fv1\u002Fprices",[1144,2582,1812],{"class":1168},[1144,2584,1824],{"class":1168},[1144,2586,2587,2589,2591,2593,2595],{"class":1146,"line":2327},[1144,2588,2550],{"class":1168},[1144,2590,1940],{"class":1895},[1144,2592,1812],{"class":1168},[1144,2594,1176],{"class":1168},[1144,2596,2597],{"class":1895}," 60000\n",[1144,2599,2601],{"class":1146,"line":2600},14,[1144,2602,2603],{"class":1168},"      }\n",[1144,2605,2607],{"class":1146,"line":2606},15,[1144,2608,2285],{"class":1168},[1144,2610,2612],{"class":1146,"line":2611},16,[1144,2613,2495],{"class":1168},[1144,2615,2617,2619,2621,2623,2625,2627,2630,2632],{"class":1146,"line":2616},17,[1144,2618,2246],{"class":1168},[1144,2620,2502],{"class":1179},[1144,2622,1812],{"class":1168},[1144,2624,1176],{"class":1168},[1144,2626,1817],{"class":1168},[1144,2628,2629],{"class":1340},"transform",[1144,2631,1812],{"class":1168},[1144,2633,1824],{"class":1168},[1144,2635,2637,2639,2641,2643,2645,2647,2649,2651],{"class":1146,"line":2636},18,[1144,2638,2246],{"class":1168},[1144,2640,1247],{"class":1179},[1144,2642,1812],{"class":1168},[1144,2644,1176],{"class":1168},[1144,2646,1817],{"class":1168},[1144,2648,1684],{"class":1340},[1144,2650,1812],{"class":1168},[1144,2652,1824],{"class":1168},[1144,2654,2656,2658,2660,2662,2664],{"class":1146,"line":2655},19,[1144,2657,2246],{"class":1168},[1144,2659,1279],{"class":1179},[1144,2661,1812],{"class":1168},[1144,2663,1176],{"class":1168},[1144,2665,1186],{"class":1168},[1144,2667,2669,2671,2674,2676,2678],{"class":1146,"line":2668},20,[1144,2670,2550],{"class":1168},[1144,2672,2673],{"class":1895},"mapping",[1144,2675,1812],{"class":1168},[1144,2677,1176],{"class":1168},[1144,2679,1186],{"class":1168},[1144,2681,2683,2686,2689,2691,2693,2695,2698,2700],{"class":1146,"line":2682},21,[1144,2684,2685],{"class":1168},"          \"",[1144,2687,2688],{"class":1196},"sku",[1144,2690,1812],{"class":1168},[1144,2692,1176],{"class":1168},[1144,2694,1817],{"class":1168},[1144,2696,2697],{"class":1340},"$.articles[].supplier_aid",[1144,2699,1812],{"class":1168},[1144,2701,1824],{"class":1168},[1144,2703,2705,2707,2710,2712,2714,2716,2719],{"class":1146,"line":2704},22,[1144,2706,2685],{"class":1168},[1144,2708,2709],{"class":1196},"price",[1144,2711,1812],{"class":1168},[1144,2713,1176],{"class":1168},[1144,2715,1817],{"class":1168},[1144,2717,2718],{"class":1340},"$.articles[].price",[1144,2720,2280],{"class":1168},[1144,2722,2724],{"class":1146,"line":2723},23,[1144,2725,2726],{"class":1168},"        }\n",[1144,2728,2730],{"class":1146,"line":2729},24,[1144,2731,2603],{"class":1168},[1144,2733,2735],{"class":1146,"line":2734},25,[1144,2736,2285],{"class":1168},[1144,2738,2740],{"class":1146,"line":2739},26,[1144,2741,2495],{"class":1168},[1144,2743,2745,2747,2749,2751,2753,2755,2758,2760],{"class":1146,"line":2744},27,[1144,2746,2246],{"class":1168},[1144,2748,2502],{"class":1179},[1144,2750,1812],{"class":1168},[1144,2752,1176],{"class":1168},[1144,2754,1817],{"class":1168},[1144,2756,2757],{"class":1340},"push-prices",[1144,2759,1812],{"class":1168},[1144,2761,1824],{"class":1168},[1144,2763,2765,2767,2769,2771,2773,2775,2777,2779],{"class":1146,"line":2764},28,[1144,2766,2246],{"class":1168},[1144,2768,1247],{"class":1179},[1144,2770,1812],{"class":1168},[1144,2772,1176],{"class":1168},[1144,2774,1817],{"class":1168},[1144,2776,1659],{"class":1340},[1144,2778,1812],{"class":1168},[1144,2780,1824],{"class":1168},[1144,2782,2784,2786,2788,2790,2792],{"class":1146,"line":2783},29,[1144,2785,2246],{"class":1168},[1144,2787,1279],{"class":1179},[1144,2789,1812],{"class":1168},[1144,2791,1176],{"class":1168},[1144,2793,1186],{"class":1168},[1144,2795,2797,2799,2801,2803,2805,2807,2809,2811],{"class":1146,"line":2796},30,[1144,2798,2550],{"class":1168},[1144,2800,1844],{"class":1895},[1144,2802,1812],{"class":1168},[1144,2804,1176],{"class":1168},[1144,2806,1817],{"class":1168},[1144,2808,1853],{"class":1340},[1144,2810,1812],{"class":1168},[1144,2812,1824],{"class":1168},[1144,2814,2816,2818,2820,2822,2824,2826,2829,2831],{"class":1146,"line":2815},31,[1144,2817,2550],{"class":1168},[1144,2819,1864],{"class":1895},[1144,2821,1812],{"class":1168},[1144,2823,1176],{"class":1168},[1144,2825,1817],{"class":1168},[1144,2827,2828],{"class":1340},"{{env.INTERNAL_API}}\u002Fcatalog\u002Fprices\u002Fbulk-upsert",[1144,2830,1812],{"class":1168},[1144,2832,1824],{"class":1168},[1144,2834,2836,2838,2840,2842,2844],{"class":1146,"line":2835},32,[1144,2837,2550],{"class":1168},[1144,2839,1884],{"class":1895},[1144,2841,1812],{"class":1168},[1144,2843,1176],{"class":1168},[1144,2845,1186],{"class":1168},[1144,2847,2849,2851,2853,2855,2857,2859,2862],{"class":1146,"line":2848},33,[1144,2850,2685],{"class":1168},[1144,2852,1896],{"class":1196},[1144,2854,1812],{"class":1168},[1144,2856,1176],{"class":1168},[1144,2858,1817],{"class":1168},[1144,2860,2861],{"class":1340},"Bearer {{secrets.INTERNAL_API_TOKEN}}",[1144,2863,2280],{"class":1168},[1144,2865,2867],{"class":1146,"line":2866},34,[1144,2868,2869],{"class":1168},"        },\n",[1144,2871,2873,2875,2877,2879,2881,2883,2886],{"class":1146,"line":2872},35,[1144,2874,2550],{"class":1168},[1144,2876,1917],{"class":1895},[1144,2878,1812],{"class":1168},[1144,2880,1176],{"class":1168},[1144,2882,1817],{"class":1168},[1144,2884,2885],{"class":1340},"{{steps.1.outputs}}",[1144,2887,2280],{"class":1168},[1144,2889,2891],{"class":1146,"line":2890},36,[1144,2892,2603],{"class":1168},[1144,2894,2896],{"class":1146,"line":2895},37,[1144,2897,2320],{"class":1168},[1144,2899,2901],{"class":1146,"line":2900},38,[1144,2902,2903],{"class":1168},"  ]\n",[1144,2905,2907],{"class":1146,"line":2906},39,[1144,2908,1293],{"class":1168},[1114,2910,2912],{"id":2911},"what-happens-at-runtime","What happens at runtime",[990,2914,2915],{},"When the clock hits a scheduled time, the run unfolds as a fixed sequence:",[2917,2918,2919,2922,2929,2932,2939,2942,2945],"ol",{},[2339,2920,2921],{},"The schedule fires at 12:00 UTC.",[2339,2923,2924,2925,2928],{},"The async engine starts ",[1126,2926,2927],{},"GenericIntegrationWorkflow"," with this definition.",[2339,2930,2931],{},"Step 1 does an HTTP GET against the ERP, allowing up to 60 seconds.",[2339,2933,2934,2935,2938],{},"Step 2 transforms the response into ",[1126,2936,2937],{},"[sku, price]"," pairs.",[2339,2940,2941],{},"Step 3 POSTs them to the internal catalog API, tenant-scoped via the auth token.",[2339,2943,2944],{},"The run is recorded as a success, with the full step-by-step audit trail.",[2339,2946,2947],{},"The next run is queued for 18:00 UTC.",[1114,2949,2951],{"id":2950},"when-something-fails","When something fails",[990,2953,2954],{},"This is exactly where the async engine earns its keep. If the ERP is unreachable in step 1, the engine retries with exponential backoff — up to five attempts — without you writing any retry logic. Only if every attempt is exhausted does the workflow get marked as failed, at which point it surfaces in Cockpit with the full error context. From there the customer can read the details and trigger a manual retry once the ERP is back. The price sync simply catches up on its next run; nothing is silently lost.",[1085,2956,2958],{"id":2957},"what-this-design-buys-you","What this design buys you",[990,2960,2961],{},"A few principles fall out of the dual-engine approach, and they're worth stating plainly because they shape how you work day to day.",[990,2963,2964,2965,2968],{},"The foundational one is the ",[994,2966,2967],{},"separation of code from configuration",". Connectors are code, owned by the platform team; integration definitions are configuration, owned by you. Since a new integration is just a new definition, you ship one by changing config rather than redeploying code — which is precisely why a partner can build and adjust workflows without waiting on a platform release.",[990,2970,2971,2972,2975,2976,2979,2980,2983],{},"That same split is what gives you ",[994,2973,2974],{},"performance at both extremes"," from one system: durable multi-hour batch jobs and sub-100ms live calls, sharing the identical node library. Everything stays ",[994,2977,2978],{},"auditable"," — async runs keep a full step-by-step history, sync runs log request and response — and everything is ",[994,2981,2982],{},"tenant-scoped",", so a workflow's data is automatically scoped to the tenant it runs on. One tenant's workflow can never read or write another tenant's data.",[1085,2985,2987],{"id":2986},"next-steps","Next Steps",[2336,2989,2990,2997,3005,3012],{},[2339,2991,2992,2996],{},[994,2993,2994],{},[999,2995,249],{"href":1001}," — Visual canvas and execution modes",[2339,2998,2999,3004],{},[994,3000,3001],{},[999,3002,231],{"href":3003},"\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Fnode-types\u002F"," — All 10 current nodes + roadmap",[2339,3006,3007,3011],{},[994,3008,3009],{},[999,3010,243],{"href":2084}," — Webhook, schedule, manual",[2339,3013,3014,3019],{},[994,3015,3016],{},[999,3017,225],{"href":3018},"\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Fexpression-syntax\u002F"," — Variables, secrets, data flow",[3021,3022,3023],"style",{},"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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}",{"title":1128,"searchDepth":1154,"depth":1154,"links":3025},[3026,3027,3032,3037,3038,3039,3044,3045],{"id":1087,"depth":1154,"text":1088},{"id":1111,"depth":1154,"text":1112,"children":3028},[3029,3030,3031],{"id":1116,"depth":1189,"text":1117},{"id":1131,"depth":1189,"text":1132},{"id":1381,"depth":1189,"text":1382},{"id":1620,"depth":1154,"text":1621,"children":3033},[3034,3035,3036],{"id":1635,"depth":1189,"text":1636},{"id":1779,"depth":1189,"text":1780},{"id":1969,"depth":1189,"text":1970},{"id":2069,"depth":1154,"text":2070},{"id":2163,"depth":1154,"text":2164},{"id":2365,"depth":1154,"text":2366,"children":3040},[3041,3042,3043],{"id":2386,"depth":1189,"text":2387},{"id":2911,"depth":1189,"text":2912},{"id":2950,"depth":1189,"text":2951},{"id":2957,"depth":1154,"text":2958},{"id":2986,"depth":1154,"text":2987},"Durable async and low-latency sync execution behind every integration","md",null,{"status":3050},"published",{"title":237,"description":3046},{"loc":238},"cNIW307wIzOFwgq-wSOJcApUSYW4b3fefu-q3c2e1Ew",1785229261732]