@epilot/sdk 2.20.60 → 2.20.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/definitions/app.json +17 -44
  2. package/definitions/customer-portal-runtime.json +1 -1
  3. package/definitions/customer-portal.json +566 -14
  4. package/definitions/email-settings.json +9 -3
  5. package/definitions/integration-toolkit-runtime.json +1 -1
  6. package/definitions/integration-toolkit.json +656 -2
  7. package/dist/apis/access-token.cjs +6 -6
  8. package/dist/apis/access-token.js +1 -1
  9. package/dist/apis/address-suggestions.cjs +6 -6
  10. package/dist/apis/address-suggestions.js +1 -1
  11. package/dist/apis/address.cjs +6 -6
  12. package/dist/apis/address.js +1 -1
  13. package/dist/apis/ai-agents.cjs +6 -6
  14. package/dist/apis/ai-agents.js +1 -1
  15. package/dist/apis/app.cjs +6 -6
  16. package/dist/apis/app.d.cts +2 -2
  17. package/dist/apis/app.d.ts +2 -2
  18. package/dist/apis/app.js +1 -1
  19. package/dist/apis/audit-logs.cjs +6 -6
  20. package/dist/apis/audit-logs.js +1 -1
  21. package/dist/apis/automation.cjs +6 -6
  22. package/dist/apis/automation.js +1 -1
  23. package/dist/apis/billing.cjs +6 -6
  24. package/dist/apis/billing.js +1 -1
  25. package/dist/apis/blueprint-manifest.cjs +6 -6
  26. package/dist/apis/blueprint-manifest.js +1 -1
  27. package/dist/apis/calendar.cjs +6 -6
  28. package/dist/apis/calendar.js +1 -1
  29. package/dist/apis/chat.cjs +6 -6
  30. package/dist/apis/chat.js +1 -1
  31. package/dist/apis/configuration-hub.cjs +6 -6
  32. package/dist/apis/configuration-hub.js +1 -1
  33. package/dist/apis/consent.cjs +6 -6
  34. package/dist/apis/consent.js +1 -1
  35. package/dist/apis/customer-portal.cjs +8 -8
  36. package/dist/apis/customer-portal.d.cts +2 -2
  37. package/dist/apis/customer-portal.d.ts +2 -2
  38. package/dist/apis/customer-portal.js +2 -2
  39. package/dist/apis/dashboard.cjs +6 -6
  40. package/dist/apis/dashboard.js +1 -1
  41. package/dist/apis/data-governance.cjs +6 -6
  42. package/dist/apis/data-governance.js +1 -1
  43. package/dist/apis/deduplication.cjs +6 -6
  44. package/dist/apis/deduplication.js +1 -1
  45. package/dist/apis/design.cjs +6 -6
  46. package/dist/apis/design.js +1 -1
  47. package/dist/apis/document.cjs +6 -6
  48. package/dist/apis/document.js +1 -1
  49. package/dist/apis/email-settings.cjs +6 -6
  50. package/dist/apis/email-settings.d.cts +2 -2
  51. package/dist/apis/email-settings.d.ts +2 -2
  52. package/dist/apis/email-settings.js +1 -1
  53. package/dist/apis/email-template.cjs +6 -6
  54. package/dist/apis/email-template.js +1 -1
  55. package/dist/apis/entity-mapping.cjs +6 -6
  56. package/dist/apis/entity-mapping.js +1 -1
  57. package/dist/apis/entity.cjs +6 -6
  58. package/dist/apis/entity.js +1 -1
  59. package/dist/apis/environments.cjs +6 -6
  60. package/dist/apis/environments.js +1 -1
  61. package/dist/apis/event-catalog.cjs +6 -6
  62. package/dist/apis/event-catalog.js +1 -1
  63. package/dist/apis/external-values.cjs +6 -6
  64. package/dist/apis/external-values.js +1 -1
  65. package/dist/apis/file.cjs +6 -6
  66. package/dist/apis/file.js +1 -1
  67. package/dist/apis/iban.cjs +6 -6
  68. package/dist/apis/iban.js +1 -1
  69. package/dist/apis/identity.cjs +6 -6
  70. package/dist/apis/identity.js +1 -1
  71. package/dist/apis/integration-toolkit.cjs +61 -9
  72. package/dist/apis/integration-toolkit.d.cts +2 -2
  73. package/dist/apis/integration-toolkit.d.ts +2 -2
  74. package/dist/apis/integration-toolkit.js +55 -3
  75. package/dist/apis/journey.cjs +6 -6
  76. package/dist/apis/journey.js +1 -1
  77. package/dist/apis/kanban.cjs +6 -6
  78. package/dist/apis/kanban.js +1 -1
  79. package/dist/apis/message.cjs +6 -6
  80. package/dist/apis/message.js +1 -1
  81. package/dist/apis/metering.cjs +6 -6
  82. package/dist/apis/metering.js +1 -1
  83. package/dist/apis/notes.cjs +6 -6
  84. package/dist/apis/notes.js +1 -1
  85. package/dist/apis/notification.cjs +6 -6
  86. package/dist/apis/notification.js +1 -1
  87. package/dist/apis/organization.cjs +6 -6
  88. package/dist/apis/organization.js +1 -1
  89. package/dist/apis/partner-directory.cjs +6 -6
  90. package/dist/apis/partner-directory.js +1 -1
  91. package/dist/apis/permissions.cjs +6 -6
  92. package/dist/apis/permissions.js +1 -1
  93. package/dist/apis/phone-integration.cjs +6 -6
  94. package/dist/apis/phone-integration.js +1 -1
  95. package/dist/apis/pricing-tier.cjs +6 -6
  96. package/dist/apis/pricing-tier.js +1 -1
  97. package/dist/apis/pricing.cjs +6 -6
  98. package/dist/apis/pricing.js +1 -1
  99. package/dist/apis/purpose.cjs +6 -6
  100. package/dist/apis/purpose.js +1 -1
  101. package/dist/apis/query.cjs +6 -6
  102. package/dist/apis/query.js +1 -1
  103. package/dist/apis/sandbox.cjs +6 -6
  104. package/dist/apis/sandbox.js +1 -1
  105. package/dist/apis/sharing.cjs +6 -6
  106. package/dist/apis/sharing.js +1 -1
  107. package/dist/apis/snapshot.cjs +6 -6
  108. package/dist/apis/snapshot.js +1 -1
  109. package/dist/apis/submission.cjs +6 -6
  110. package/dist/apis/submission.js +1 -1
  111. package/dist/apis/target.cjs +6 -6
  112. package/dist/apis/target.js +1 -1
  113. package/dist/apis/targeting.cjs +6 -6
  114. package/dist/apis/targeting.js +1 -1
  115. package/dist/apis/template-variables.cjs +6 -6
  116. package/dist/apis/template-variables.js +1 -1
  117. package/dist/apis/user.cjs +6 -6
  118. package/dist/apis/user.js +1 -1
  119. package/dist/apis/validation-rules.cjs +6 -6
  120. package/dist/apis/validation-rules.js +1 -1
  121. package/dist/apis/webhooks.cjs +6 -6
  122. package/dist/apis/webhooks.js +1 -1
  123. package/dist/apis/workflow-definition.cjs +6 -6
  124. package/dist/apis/workflow-definition.js +1 -1
  125. package/dist/apis/workflow.cjs +6 -6
  126. package/dist/apis/workflow.js +1 -1
  127. package/dist/app-CKQAJ7EE.js +7 -0
  128. package/dist/app-ERJHXY64.cjs +7 -0
  129. package/dist/{app.d-DbOr4uIC.d.cts → app.d-CZELwNO3.d.cts} +51 -27
  130. package/dist/{app.d-DbOr4uIC.d.ts → app.d-CZELwNO3.d.ts} +51 -27
  131. package/dist/{chunk-RBSTI4X4.cjs → chunk-4EH2X5J6.cjs} +7 -7
  132. package/dist/chunk-I6IC54PD.js +14 -0
  133. package/dist/chunk-O2XK4VD5.js +14 -0
  134. package/dist/chunk-QDPZZUG3.cjs +14 -0
  135. package/dist/chunk-UP3ZIQHB.cjs +14 -0
  136. package/dist/{chunk-4MDOL6ZZ.js → chunk-ZM6WXMH3.js} +7 -7
  137. package/dist/customer-portal-2OT5REK6.cjs +7 -0
  138. package/dist/customer-portal-AO2K6VW2.js +7 -0
  139. package/dist/{customer-portal-runtime-ZTLLE6CR.cjs → customer-portal-runtime-ATHDYPZM.cjs} +2 -2
  140. package/dist/{customer-portal-runtime-CNW7NSCT.js → customer-portal-runtime-XISRWE3I.js} +1 -1
  141. package/dist/{customer-portal.d-COI3Xe4x.d.cts → customer-portal.d-CTIzvirI.d.cts} +652 -17
  142. package/dist/{customer-portal.d-COI3Xe4x.d.ts → customer-portal.d-CTIzvirI.d.ts} +652 -17
  143. package/dist/{email-settings-U753HXGA.js → email-settings-DGZKA6CU.js} +1 -1
  144. package/dist/{email-settings-SEGEKVMF.cjs → email-settings-GE5ST3L2.cjs} +3 -3
  145. package/dist/{email-settings-QGCIUWLC.js → email-settings-UYAH3BWW.js} +3 -3
  146. package/dist/{email-settings-Z5EBAELW.cjs → email-settings-VGU7323R.cjs} +1 -1
  147. package/dist/{email-settings.d-DViLYaOl.d.cts → email-settings.d-DX_nzlZk.d.cts} +6 -3
  148. package/dist/{email-settings.d-DViLYaOl.d.ts → email-settings.d-DX_nzlZk.d.ts} +6 -3
  149. package/dist/index.cjs +12 -12
  150. package/dist/index.d.cts +4 -4
  151. package/dist/index.d.ts +4 -4
  152. package/dist/index.js +3 -3
  153. package/dist/integration-toolkit-FI32O7II.cjs +7 -0
  154. package/dist/integration-toolkit-MHULDW3E.js +7 -0
  155. package/dist/{integration-toolkit-runtime-3PM3MBEF.cjs → integration-toolkit-runtime-CPJT7YCA.cjs} +2 -2
  156. package/dist/{integration-toolkit-runtime-3LKW4ORQ.js → integration-toolkit-runtime-ZEH6X2OD.js} +1 -1
  157. package/dist/{integration-toolkit.d-oORkWs_H.d.cts → integration-toolkit.d-l5cgwHLa.d.cts} +658 -3
  158. package/dist/{integration-toolkit.d-oORkWs_H.d.ts → integration-toolkit.d-l5cgwHLa.d.ts} +658 -3
  159. package/docs/app.md +10 -39
  160. package/docs/customer-portal.md +440 -73
  161. package/docs/email-settings.md +2 -2
  162. package/docs/integration-toolkit.md +423 -7
  163. package/package.json +1 -1
  164. package/dist/app-R2RDF74T.js +0 -7
  165. package/dist/app-YIP3MOGW.cjs +0 -7
  166. package/dist/chunk-DQ346MRA.js +0 -14
  167. package/dist/chunk-FBRDBE4Y.cjs +0 -14
  168. package/dist/chunk-MBWCGRCK.js +0 -14
  169. package/dist/chunk-Y7KWK5H2.cjs +0 -14
  170. package/dist/customer-portal-TSJKBA37.js +0 -7
  171. package/dist/customer-portal-WOO2QDPR.cjs +0 -7
  172. package/dist/integration-toolkit-AB3GZDWM.cjs +0 -7
  173. package/dist/integration-toolkit-L745CJ5G.js +0 -7
@@ -0,0 +1,7 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-NJK5F5TF.cjs');
2
+
3
+ // src/docs/app.json
4
+ var app_default = '# App API\n\n- **Base URL:** `https://app.sls.epilot.io`\n- **Full API Docs:** [https://docs.epilot.io/api/app](https://docs.epilot.io/api/app)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.app.getPublicFacingComponent(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/app\'\n\nconst appClient = getClient()\nauthorize(appClient, () => \'<token>\')\nconst { data } = await appClient.getPublicFacingComponent(...)\n```\n\n## Operations\n\n**App Installation**\n- [`getPublicFacingComponent`](#getpublicfacingcomponent)\n- [`listInstallations`](#listinstallations)\n- [`getInstallation`](#getinstallation)\n- [`install`](#install)\n- [`patchInstallation`](#patchinstallation)\n- [`uninstall`](#uninstall)\n- [`promoteVersion`](#promoteversion)\n- [`resolveOptions`](#resolveoptions)\n\n**App Configuration**\n- [`listConfigurations`](#listconfigurations)\n- [`createConfiguration`](#createconfiguration)\n- [`listPublicConfigurations`](#listpublicconfigurations)\n- [`getPublicConfiguration`](#getpublicconfiguration)\n- [`getConfiguration`](#getconfiguration)\n- [`patchMetadata`](#patchmetadata)\n- [`deleteConfiguration`](#deleteconfiguration)\n- [`createBundleUploadUrl`](#createbundleuploadurl)\n- [`createZipUploadUrl`](#createzipuploadurl)\n- [`createLogoUploadUrl`](#createlogouploadurl)\n- [`deleteLogo`](#deletelogo)\n- [`listVersions`](#listversions)\n- [`getVersion`](#getversion)\n- [`deleteVersion`](#deleteversion)\n- [`patchVersion`](#patchversion)\n- [`getReview`](#getreview)\n- [`createReview`](#createreview)\n- [`createComponent`](#createcomponent)\n- [`patchComponent`](#patchcomponent)\n- [`deleteComponent`](#deletecomponent)\n- [`cloneVersion`](#cloneversion)\n\n**App Analytics**\n- [`queryEvents`](#queryevents)\n- [`ingestEvent`](#ingestevent)\n\n**App Proxy**\n- [`publicProxyGet`](#publicproxyget)\n- [`publicProxyPost`](#publicproxypost)\n- [`publicProxyPut`](#publicproxyput)\n- [`publicProxyPatch`](#publicproxypatch)\n- [`publicProxyDelete`](#publicproxydelete)\n\n**Schemas**\n- [`Role`](#role)\n- [`Options`](#options)\n- [`ObjectField`](#objectfield)\n- [`Option`](#option)\n- [`OptionsRef`](#optionsref)\n- [`S3Reference`](#s3reference)\n- [`ComponentType`](#componenttype)\n- [`FunctionDefinition`](#functiondefinition)\n- [`Author`](#author)\n- [`NotificationConfig`](#notificationconfig)\n- [`NotificationEvent`](#notificationevent)\n- [`BaseComponentCommon`](#basecomponentcommon)\n- [`BaseComponent`](#basecomponent)\n- [`ApiProxyComponent`](#apiproxycomponent)\n- [`ExternalValuesComponent`](#externalvaluescomponent)\n- [`CustomCapabilityComponent`](#customcapabilitycomponent)\n- [`CustomPageComponent`](#custompagecomponent)\n- [`CustomPageConfig`](#custompageconfig)\n- [`JourneyBlockComponent`](#journeyblockcomponent)\n- [`PortalBlockComponent`](#portalblockcomponent)\n- [`ErpInformToolkitComponent`](#erpinformtoolkitcomponent)\n- [`CustomFlowActionComponent`](#customflowactioncomponent)\n- [`BaseCustomActionConfig`](#basecustomactionconfig)\n- [`ExternalIntegrationCustomActionConfig`](#externalintegrationcustomactionconfig)\n- [`FunctionRefCustomActionConfig`](#functionrefcustomactionconfig)\n- [`CustomFlowConfig`](#customflowconfig)\n- [`ExternalProductCatalogComponent`](#externalproductcatalogcomponent)\n- [`ExternalProductCatalogConfig`](#externalproductcatalogconfig)\n- [`ExternalProductCatalogHookProducts`](#externalproductcataloghookproducts)\n- [`ExternalProductCatalogHookProductRecommendations`](#externalproductcataloghookproductrecommendations)\n- [`PortalExtensionComponent`](#portalextensioncomponent)\n- [`PortalExtensionConfig`](#portalextensionconfig)\n- [`PortalExtensionHookRegistrationIdentifiersCheck`](#portalextensionhookregistrationidentifierscheck)\n- [`PortalExtensionHookContractIdentification`](#portalextensionhookcontractidentification)\n- [`PortalExtensionHookMeterReadingPlausibilityCheck`](#portalextensionhookmeterreadingplausibilitycheck)\n- [`PortalExtensionHookPriceDataRetrieval`](#portalextensionhookpricedataretrieval)\n- [`PortalExtensionHookConsumptionDataRetrieval`](#portalextensionhookconsumptiondataretrieval)\n- [`PortalExtensionHookDataExport`](#portalextensionhookdataexport)\n- [`PortalExtensionHookVisualizationMetadata`](#portalextensionhookvisualizationmetadata)\n- [`PortalExtensionHookCostDataRetrieval`](#portalextensionhookcostdataretrieval)\n- [`PortalExtensionHookChangeEmail`](#portalextensionhookchangeemail)\n- [`PortalExtensionHookChangePassword`](#portalextensionhookchangepassword)\n- [`PortalExtensionHookDeleteAccount`](#portalextensionhookdeleteaccount)\n- [`PortalExtensionSeamlessLink`](#portalextensionseamlesslink)\n- [`PortalExtensionAuthBlock`](#portalextensionauthblock)\n- [`PortalExtensionSecureProxy`](#portalextensionsecureproxy)\n- [`ExternalProductCatalogAuthBlock`](#externalproductcatalogauthblock)\n- [`OverrideDevMode`](#overridedevmode)\n- [`JourneyBlockConfig`](#journeyblockconfig)\n- [`PortalBlockConfig`](#portalblockconfig)\n- [`AppBridgeSurfaceConfig`](#appbridgesurfaceconfig)\n- [`PortalBlockSurfaceConfig`](#portalblocksurfaceconfig)\n- [`JourneyBlockComponentArgs`](#journeyblockcomponentargs)\n- [`TextArg`](#textarg)\n- [`BooleanArg`](#booleanarg)\n- [`BlockReferenceArg`](#blockreferencearg)\n- [`EnumArg`](#enumarg)\n- [`BillingFrequency`](#billingfrequency)\n- [`Pricing`](#pricing)\n- [`Audit`](#audit)\n- [`Review`](#review)\n- [`InternalReview`](#internalreview)\n- [`ConfigurationMetadata`](#configurationmetadata)\n- [`ConfigurationVersion`](#configurationversion)\n- [`ApiProxyConfig`](#apiproxyconfig)\n- [`ExternalValuesConfig`](#externalvaluesconfig)\n- [`ExternalValuesHook`](#externalvalueshook)\n- [`ExternalValuesResult`](#externalvaluesresult)\n- [`Grants`](#grants)\n- [`BlueprintRef`](#blueprintref)\n- [`Installation`](#installation)\n- [`PublicConfiguration`](#publicconfiguration)\n- [`Configuration`](#configuration)\n- [`TranslatedString`](#translatedstring)\n- [`CallerIdentity`](#calleridentity)\n- [`BatchEventRequest`](#batcheventrequest)\n- [`Actor`](#actor)\n- [`AppEventData`](#appeventdata)\n- [`EventsQuery`](#eventsquery)\n- [`EventsQueryResponse`](#eventsqueryresponse)\n- [`RawEvents`](#rawevents)\n- [`AggregatedEvents`](#aggregatedevents)\n\n### `getPublicFacingComponent`\n\nRetrieve public facing components for an installed app\n\n`GET /v1/public/app/{appId}/components/{componentId}`\n\n```ts\nconst { data } = await client.getPublicFacingComponent({\n appId: \'example\',\n componentId: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "component": {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n}\n```\n\n</details>\n\n---\n\n### `listConfigurations`\n\nList all app configuration metadata owned by an organization. To get full app configuration details, use the /v1/app-configurations/{appId} endpoint.\n\n`GET /v1/app-configurations`\n\n```ts\nconst { data } = await client.listConfigurations({\n page: 1,\n pageSize: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "configurations": [\n {\n "app_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "versions": ["string"],\n "public_versions": ["string"],\n "support_email": "string",\n "latest_version": "string",\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "notifications": {\n "email": "developer@example.com",\n "events": ["app.installed"]\n },\n "owner_org_id": "string",\n "internal": false,\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "configuration_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n }\n }\n ],\n "pagination": {\n "total": 0,\n "page": 0,\n "pageSize": 0\n }\n}\n```\n\n</details>\n\n---\n\n### `createConfiguration`\n\nCreate a new private app configuration. To make it public a verification process needs to be triggered\n\n`POST /v1/app-configurations`\n\n```ts\nconst { data } = await client.createConfiguration(\n null,\n {\n name: \'string\',\n description: {\n en: \'string\',\n de: \'string\'\n },\n category: \'string\',\n logo_url_key: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string"\n}\n```\n\n</details>\n\n---\n\n### `listPublicConfigurations`\n\nList all publicly available app configurations that can be installed. This endpoint returns apps that have at least one public version.\n\n`GET /v1/app-configurations/public`\n\n```ts\nconst { data } = await client.listPublicConfigurations({\n page: 1,\n pageSize: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "configurations": [\n {\n "app_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "versions": ["string"],\n "public_versions": ["string"],\n "support_email": "string",\n "latest_version": "string",\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "notifications": {\n "email": "developer@example.com",\n "events": ["app.installed"]\n },\n "owner_org_id": "string",\n "internal": false,\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "configuration_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n }\n }\n ],\n "pagination": {\n "total": 0,\n "page": 0,\n "pageSize": 0\n }\n}\n```\n\n</details>\n\n---\n\n### `getPublicConfiguration`\n\nRetrieve the public configuration of an app to install in your tenant\n\n`GET /v1/app-configurations/public/{appId}`\n\n```ts\nconst { data } = await client.getPublicConfiguration({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "support_email": "string",\n "owner_org_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {}\n }\n ],\n "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {},\n "description": {},\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\n }\n ],\n "options": [\n {\n "key": "string",\n "label": "string",\n "required": true,\n "description": "string",\n "repeatable": true,\n "fields": [],\n "value": {},\n "type": "text",\n "sensitive": true,\n "configured": true,\n "lifted": true,\n "value_updated_at": "string"\n }\n ],\n "is_beta": true,\n "deprecated_at": "string",\n "version": "string",\n "role": {\n "id": "string",\n "grants": [\n {}\n ]\n },\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "latest_version": "string",\n "public": true,\n "versions": [\n {\n "app_id": "string",\n "owner_org_id": "string",\n "components": [],\n "functions": [],\n "options": [],\n "visibility": "private",\n "public": false,\n "pending": false,\n "version": "string",\n "is_beta": true,\n "deprecated_at": "string",\n "changelog": "string",\n "review_status": "approved",\n "role": {},\n "blueprint_ref": {},\n "version_audit": {}\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `getConfiguration`\n\nRetrieve a specific app configuration\n\n`GET /v1/app-configurations/{appId}`\n\n```ts\nconst { data } = await client.getConfiguration({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "versions": ["string"],\n "public_versions": ["string"],\n "support_email": "string",\n "latest_version": "string",\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "notifications": {\n "email": "developer@example.com",\n "events": ["app.installed"]\n },\n "owner_org_id": "string",\n "internal": false,\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "configuration_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {}\n }\n ],\n "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {},\n "description": {},\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\n }\n ],\n "options": [\n {\n "key": "string",\n "label": "string",\n "required": true,\n "description": "string",\n "repeatable": true,\n "fields": [],\n "value": {},\n "type": "text",\n "sensitive": true,\n "configured": true,\n "lifted": true,\n "value_updated_at": "string"\n }\n ],\n "visibility": "private",\n "public": false,\n "pending": false,\n "version": "string",\n "is_beta": true,\n "deprecated_at": "string",\n "changelog": "string",\n "review_status": "approved",\n "role": {\n "id": "string",\n "grants": [\n {}\n ]\n },\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "version_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string",\n "versioned_at": "string",\n "versioned_by": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `patchMetadata`\n\nPatch non-versioned configuration metadata of a given app configuration.\n\n`PATCH /v1/app-configurations/{appId}`\n\n```ts\nconst { data } = await client.patchMetadata(\n {\n appId: \'example\',\n },\n {\n name: \'string\',\n description: {\n en: \'string\',\n de: \'string\'\n },\n category: \'string\',\n documentation_url: \'string\',\n notifications: {\n email: \'developer@example.com\',\n events: [\'app.installed\']\n },\n pricing: {\n pricing_type: \'FREE\',\n billing_frequency: \'MONTHLY\'\n },\n logo_url_key: \'string\',\n support_email: \'string\',\n dev_mode: true\n },\n)\n```\n\n---\n\n### `deleteConfiguration`\n\nDelete app configuration\n\n`DELETE /v1/app-configurations/{appId}`\n\n```ts\nconst { data } = await client.deleteConfiguration({\n appId: \'example\',\n})\n```\n\n---\n\n### `queryEvents`\n\nQuery analytics events for a specific app with flexible filtering\n\n`POST /v1/app-configurations/{appId}/events`\n\n```ts\nconst { data } = await client.queryEvents(\n {\n appId: \'example\',\n },\n {\n time_range: {\n start: \'1970-01-01T00:00:00.000Z\',\n end: \'1970-01-01T00:00:00.000Z\',\n preset: \'1h\'\n },\n filters: {\n source: [\'CUSTOM_JOURNEY_BLOCK\'],\n component_id: [\'string\'],\n event_type: [\'ERROR\'],\n correlation_id: \'string\',\n search: \'string\'\n },\n aggregation: {\n group_by: [\'source\'],\n metrics: [\'count\']\n },\n pagination: {\n page: 1,\n page_size: 100,\n before: \'1970-01-01T00:00:00.000Z\'\n },\n sort: {\n field: \'timestamp\',\n order: \'desc\'\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "query": {\n "time_range": {\n "start": "1970-01-01T00:00:00.000Z",\n "end": "1970-01-01T00:00:00.000Z",\n "preset": "1h"\n },\n "filters": {\n "source": ["CUSTOM_JOURNEY_BLOCK"],\n "component_id": ["string"],\n "event_type": ["ERROR"],\n "correlation_id": "string",\n "search": "string"\n },\n "aggregation": {\n "group_by": ["source"],\n "metrics": ["count"]\n },\n "pagination": {\n "page": 1,\n "page_size": 100,\n "before": "1970-01-01T00:00:00.000Z"\n },\n "sort": {\n "field": "timestamp",\n "order": "desc"\n }\n },\n "results": {\n "type": "raw",\n "events": [\n {\n "app_id": "string",\n "version": "string",\n "event_id": "string",\n "component_id": "string",\n "timestamp": "string",\n "correlation_id": "string",\n "event_type": "ERROR",\n "source": "CUSTOM_JOURNEY_BLOCK",\n "actor": {\n "org_id": "string",\n "user_id": "string",\n "type": "user"\n },\n "details": {}\n }\n ]\n },\n "pagination": {\n "page": 0,\n "page_size": 0,\n "total_items": 0,\n "has_next": true\n }\n}\n```\n\n</details>\n\n---\n\n### `createBundleUploadUrl`\n\nGenerate a presigned URL for uploading app bundle to /``<app-id>``/bundle.js path\n\n`POST /v1/app-configurations/{appId}/bundle`\n\n```ts\nconst { data } = await client.createBundleUploadUrl(\n {\n appId: \'example\',\n },\n {\n version: \'string\',\n component_id: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "component_id": "string",\n "component_url": "string",\n "upload_url": "string",\n "s3ref": {\n "bucket": "my-bucket",\n "key": "manifest.json"\n },\n "expires_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `createZipUploadUrl`\n\nGenerate a presigned URL to upload a zip file with artifacts that will be unpacked in a new directory under the /``<app-id>``/ path\n\n`POST /v1/app-configurations/{appId}/zip`\n\n```ts\nconst { data } = await client.createZipUploadUrl(\n {\n appId: \'example\',\n },\n {\n version: \'1.0.0\',\n component_id: \'string\',\n filename: \'dist.zip\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "component_id": "string",\n "upload_url": "string",\n "artifact_url": "string",\n "s3ref": {\n "bucket": "my-bucket",\n "key": "manifest.json"\n },\n "expires_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `createLogoUploadUrl`\n\nGenerate a presigned URL for uploading app logo to /``<app-id>``/logo.png path\n\n`POST /v1/app-configurations/{appId}/logo`\n\n```ts\nconst { data } = await client.createLogoUploadUrl(\n {\n appId: \'example\',\n },\n {\n filename: \'company-logo.png\',\n mime_type: \'image/png\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "upload_url": "string",\n "s3ref": {\n "bucket": "my-bucket",\n "key": "manifest.json"\n },\n "expires_at": "1970-01-01T00:00:00.000Z"\n}\n```\n\n</details>\n\n---\n\n### `deleteLogo`\n\nDelete the app logo from /``<app-id>``/logo.png path\n\n`DELETE /v1/app-configurations/{appId}/logo`\n\n```ts\nconst { data } = await client.deleteLogo({\n appId: \'example\',\n})\n```\n\n---\n\n### `listVersions`\n\nRetrieve a list of versions for an app configuration\n\n`GET /v1/app-configurations/{appId}/versions`\n\n```ts\nconst { data } = await client.listVersions({\n appId: \'example\',\n page: 1,\n pageSize: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "versions": [\n {\n "app_id": "string",\n "owner_org_id": "string",\n "components": [],\n "functions": [],\n "options": [],\n "visibility": "private",\n "public": false,\n "pending": false,\n "version": "string",\n "is_beta": true,\n "deprecated_at": "string",\n "changelog": "string",\n "review_status": "approved",\n "role": {},\n "blueprint_ref": {},\n "version_audit": {}\n }\n ],\n "pagination": {\n "total": 0,\n "page": 0,\n "pageSize": 0\n }\n}\n```\n\n</details>\n\n---\n\n### `getVersion`\n\nRetrieve a specific version of an app configuration\n\n`GET /v1/app-configurations/{appId}/versions/{version}`\n\n```ts\nconst { data } = await client.getVersion({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "name": "string",\n "author": {\n "name": "string",\n "company": "string",\n "email": "string"\n },\n "dev_mode": true,\n "versions": ["string"],\n "public_versions": ["string"],\n "support_email": "string",\n "latest_version": "string",\n "category": "string",\n "icon_url": "string",\n "documentation_url": "string",\n "description": {\n "en": "string",\n "de": "string"\n },\n "notifications": {\n "email": "developer@example.com",\n "events": ["app.installed"]\n },\n "owner_org_id": "string",\n "internal": false,\n "pricing": {\n "pricing_type": "FREE",\n "billing_frequency": "MONTHLY"\n },\n "configuration_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {}\n }\n ],\n "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {},\n "description": {},\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\n }\n ],\n "options": [\n {\n "key": "string",\n "label": "string",\n "required": true,\n "description": "string",\n "repeatable": true,\n "fields": [],\n "value": {},\n "type": "text",\n "sensitive": true,\n "configured": true,\n "lifted": true,\n "value_updated_at": "string"\n }\n ],\n "visibility": "private",\n "public": false,\n "pending": false,\n "version": "string",\n "is_beta": true,\n "deprecated_at": "string",\n "changelog": "string",\n "review_status": "approved",\n "role": {\n "id": "string",\n "grants": [\n {}\n ]\n },\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "version_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string",\n "versioned_at": "string",\n "versioned_by": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `deleteVersion`\n\nDelete a specific version of an app configuration\n\n`DELETE /v1/app-configurations/{appId}/versions/{version}`\n\n```ts\nconst { data } = await client.deleteVersion({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n---\n\n### `patchVersion`\n\nPatch an existing app version\n\n`PATCH /v1/app-configurations/{appId}/versions/{version}`\n\n```ts\nconst { data } = await client.patchVersion(\n {\n appId: \'example\',\n version: \'example\',\n },\n {\n manifest_id: \'string\',\n role_id: \'string\',\n grants: [\n {\n action: \'string\',\n resource: \'string\'\n }\n ],\n functions: [\n {\n name: \'string\',\n type: \'workflow\',\n label: {\n en: \'string\',\n de: \'string\'\n },\n description: {\n en: \'string\',\n de: \'string\'\n },\n code: \'string\',\n schedule: \'rate(30 minutes)\',\n schedule_timezone: \'Europe/Berlin\',\n schedule_overlap: \'skip\',\n secrets: [\'string\']\n }\n ],\n options: [\n {\n key: \'string\',\n label: \'string\',\n required: true,\n description: \'string\',\n repeatable: true,\n fields: [\n {\n key: \'string\',\n label: \'string\',\n description: \'string\',\n required: true,\n type: \'text\'\n }\n ],\n value: {},\n type: \'text\',\n sensitive: true,\n configured: true,\n lifted: true,\n value_updated_at: \'string\'\n }\n ],\n changelog: \'string\'\n },\n)\n```\n\n---\n\n### `getReview`\n\nRetrieve the review status of a specific app version\n\n`GET /v1/app-configurations/{appId}/versions/{version}/review`\n\n```ts\nconst { data } = await client.getReview({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "review": {\n "version": "string",\n "review_status": "approved",\n "requested_at": "string",\n "requested_by": "string",\n "technical_contact": "string",\n "marketing_contact": "string",\n "demo_url": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `createReview`\n\nSubmit an app version for review to make it public\n\n`POST /v1/app-configurations/{appId}/versions/{version}/review`\n\n```ts\nconst { data } = await client.createReview(\n {\n appId: \'example\',\n version: \'example\',\n },\n {\n technical_contact: \'string\',\n marketing_contact: \'string\',\n demo_url: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "review": {\n "version": "string",\n "review_status": "approved",\n "requested_at": "string",\n "requested_by": "string",\n "technical_contact": "string",\n "marketing_contact": "string",\n "demo_url": "string"\n }\n}\n```\n\n</details>\n\n---\n\n### `createComponent`\n\nPatch an existing app version to create/add a component\n\n`POST /v1/app-configurations/{appId}/versions/{version}/components`\n\n```ts\nconst { data } = await client.createComponent(\n {\n appId: \'example\',\n version: \'example\',\n },\n {\n component_type: \'CUSTOM_JOURNEY_BLOCK\',\n configuration: {\n override_dev_mode: {\n override_url: \'http://localhost:3000\'\n },\n component_url: \'https://cdn.apps.com/123/v1.0.0/bundle.js\',\n component_tag: \'string\',\n component_args: [\n {\n type: \'text\'\n }\n ],\n component_size: 0,\n component_mapping: {}\n }\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "component": {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n}\n```\n\n</details>\n\n---\n\n### `patchComponent`\n\nPatch an existing app version to update its components\n\n`PATCH /v1/app-configurations/{appId}/versions/{version}/components/{componentId}`\n\n```ts\nconst { data } = await client.patchComponent(\n {\n appId: \'example\',\n version: \'example\',\n componentId: \'example\',\n },\n {\n component_type: \'CUSTOM_JOURNEY_BLOCK\',\n configuration: {\n override_dev_mode: {\n override_url: \'http://localhost:3000\'\n },\n component_url: \'https://cdn.apps.com/123/v1.0.0/bundle.js\',\n component_tag: \'string\',\n component_args: [\n {\n type: \'text\'\n }\n ],\n component_size: 0,\n component_mapping: {}\n }\n },\n)\n```\n\n---\n\n### `deleteComponent`\n\nDelete a specific component from an app version\n\n`DELETE /v1/app-configurations/{appId}/versions/{version}/components/{componentId}`\n\n```ts\nconst { data } = await client.deleteComponent({\n appId: \'example\',\n version: \'example\',\n componentId: \'example\',\n})\n```\n\n---\n\n### `cloneVersion`\n\nClone an existing app version to create a new version\n\n`POST /v1/app-configurations/{appId}/versions/{sourceVersion}/clone-to/{targetVersion}`\n\n```ts\nconst { data } = await client.cloneVersion(\n {\n appId: \'example\',\n sourceVersion: \'example\',\n targetVersion: \'example\',\n },\n {\n changelog: \'string\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "version": "string",\n "status": "pending"\n}\n```\n\n</details>\n\n---\n\n### `listInstallations`\n\nRetrieve a list of installed apps for the organization.\n\n`GET /v1/app`\n\n```ts\nconst { data } = await client.listInstallations({\n componentType: \'example\',\n enabled: true,\n page: 1,\n pageSize: 1,\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "apps": [\n {\n "app_id": "string",\n "installer_org_id": "string",\n "owner_org_id": "string",\n "enabled": true,\n "name": "string",\n "icon_url": "string",\n "option_values": [],\n "components": [],\n "functions": [],\n "options": [],\n "installed_version": "string",\n "role": "string",\n "blueprint_ref": {},\n "installation_audit": {},\n "_manifest": ["123e4567-e89b-12d3-a456-426614174000"]\n }\n ],\n "pagination": {\n "total": 0,\n "page": 0,\n "pageSize": 0\n }\n}\n```\n\n</details>\n\n---\n\n### `getInstallation`\n\nRetrieve details of an installed app by its ID.\n\n`GET /v1/app/{appId}`\n\n```ts\nconst { data } = await client.getInstallation({\n appId: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "installer_org_id": "string",\n "owner_org_id": "string",\n "enabled": true,\n "name": "string",\n "icon_url": "string",\n "option_values": [\n {\n "component_id": "string",\n "options": [\n {\n "key": "string",\n "value": {}\n }\n ]\n }\n ],\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {\n "en": "string",\n "de": "string"\n },\n "description": {\n "en": "string",\n "de": "string"\n },\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\n }\n ],\n "options": [\n {\n "key": "string",\n "label": "string",\n "required": true,\n "description": "string",\n "repeatable": true,\n "fields": [\n {\n "key": "string",\n "label": "string",\n "description": "string",\n "required": true,\n "type": "text"\n }\n ],\n "value": {},\n "type": "text",\n "sensitive": true,\n "configured": true,\n "lifted": true,\n "value_updated_at": "string"\n }\n ],\n "installed_version": "string",\n "role": "string",\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "installation_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "_manifest": ["123e4567-e89b-12d3-a456-426614174000"]\n}\n```\n\n</details>\n\n---\n\n### `install`\n\nUpsert app installation by its ID.\n\n`POST /v1/app/{appId}`\n\n```ts\nconst { data } = await client.install(\n {\n appId: \'example\',\n },\n {\n version: \'string\',\n option_values: [\n {\n component_id: \'string\',\n options: [\n {\n key: \'string\',\n value: {}\n }\n ]\n }\n ],\n _manifest: [\'123e4567-e89b-12d3-a456-426614174000\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "installer_org_id": "string",\n "owner_org_id": "string",\n "enabled": true,\n "name": "string",\n "icon_url": "string",\n "option_values": [\n {\n "component_id": "string",\n "options": [\n {\n "key": "string",\n "value": {}\n }\n ]\n }\n ],\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {\n "en": "string",\n "de": "string"\n },\n "description": {\n "en": "string",\n "de": "string"\n },\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\n }\n ],\n "options": [\n {\n "key": "string",\n "label": "string",\n "required": true,\n "description": "string",\n "repeatable": true,\n "fields": [\n {\n "key": "string",\n "label": "string",\n "description": "string",\n "required": true,\n "type": "text"\n }\n ],\n "value": {},\n "type": "text",\n "sensitive": true,\n "configured": true,\n "lifted": true,\n "value_updated_at": "string"\n }\n ],\n "installed_version": "string",\n "role": "string",\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "installation_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "_manifest": ["123e4567-e89b-12d3-a456-426614174000"]\n}\n```\n\n</details>\n\n---\n\n### `patchInstallation`\n\nPatch an installed app by its ID.\n\n`PATCH /v1/app/{appId}`\n\n```ts\nconst { data } = await client.patchInstallation(\n {\n appId: \'example\',\n },\n {\n version: \'string\',\n option_values: [\n {\n component_id: \'string\',\n options: [\n {\n key: \'string\',\n value: {}\n }\n ]\n }\n ],\n _manifest: [\'123e4567-e89b-12d3-a456-426614174000\']\n },\n)\n```\n\n---\n\n### `uninstall`\n\nUninstall an app by its ID.\n\n`DELETE /v1/app/{appId}`\n\n```ts\nconst { data } = await client.uninstall({\n appId: \'example\',\n})\n```\n\n---\n\n### `promoteVersion`\n\nUpdate an installed app to a new version\n\n`POST /v1/app/{appId}/promote-to/{version}`\n\n```ts\nconst { data } = await client.promoteVersion({\n appId: \'example\',\n version: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "app_id": "string",\n "installer_org_id": "string",\n "owner_org_id": "string",\n "enabled": true,\n "name": "string",\n "icon_url": "string",\n "option_values": [\n {\n "component_id": "string",\n "options": [\n {\n "key": "string",\n "value": {}\n }\n ]\n }\n ],\n "components": [\n {\n "component_type": "CUSTOM_JOURNEY_BLOCK",\n "configuration": {\n "override_dev_mode": {\n "override_url": "http://localhost:3000"\n },\n "component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",\n "component_tag": "string",\n "component_args": [\n {\n "type": "text"\n }\n ],\n "component_size": 0,\n "component_mapping": {}\n }\n }\n ],\n "functions": [\n {\n "name": "string",\n "type": "workflow",\n "label": {\n "en": "string",\n "de": "string"\n },\n "description": {\n "en": "string",\n "de": "string"\n },\n "code": "string",\n "schedule": "rate(30 minutes)",\n "schedule_timezone": "Europe/Berlin",\n "schedule_overlap": "skip",\n "secrets": ["string"]\n }\n ],\n "options": [\n {\n "key": "string",\n "label": "string",\n "required": true,\n "description": "string",\n "repeatable": true,\n "fields": [\n {\n "key": "string",\n "label": "string",\n "description": "string",\n "required": true,\n "type": "text"\n }\n ],\n "value": {},\n "type": "text",\n "sensitive": true,\n "configured": true,\n "lifted": true,\n "value_updated_at": "string"\n }\n ],\n "installed_version": "string",\n "role": "string",\n "blueprint_ref": {\n "manifest_id": "string",\n "job_id": "string",\n "source_blueprint_file": "string"\n },\n "installation_audit": {\n "created_at": "string",\n "created_by": "string",\n "updated_at": "string",\n "updated_by": "string"\n },\n "_manifest": ["123e4567-e89b-12d3-a456-426614174000"]\n}\n```\n\n</details>\n\n---\n\n### `resolveOptions`\n\nResolve the effective app-level options of an installation, including decrypted sensitive values (secrets). This endpoint accepts epilot internal-auth tokens exclusively (internal service calls, e.g. \n\n`POST /v1/app/{appId}/options/resolve`\n\n```ts\nconst { data } = await client.resolveOptions(\n {\n appId: \'example\',\n },\n {\n keys: [\'string\']\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "options": [\n {\n "key": "string",\n "label": "string",\n "required": true,\n "description": "string",\n "repeatable": true,\n "fields": [\n {\n "key": "string",\n "label": "string",\n "description": "string",\n "required": true,\n "type": "text"\n }\n ],\n "value": {},\n "type": "text",\n "sensitive": true,\n "configured": true,\n "lifted": true,\n "value_updated_at": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `ingestEvent`\n\nInternal endpoint for services to submit app events for analytic purposes\n\n`POST /v1/app-events`\n\n```ts\nconst { data } = await client.ingestEvent(\n null,\n {\n app_id: \'string\',\n version: \'string\',\n event_id: \'string\',\n component_id: \'string\',\n timestamp: \'string\',\n correlation_id: \'string\',\n event_type: \'ERROR\',\n source: \'CUSTOM_JOURNEY_BLOCK\',\n actor: {\n org_id: \'string\',\n user_id: \'string\',\n type: \'user\'\n },\n details: {}\n },\n)\n```\n\n---\n\n### `publicProxyGet`\n\nForward a GET request to a registered proxy target from a public-facing component (e.g. journey blocks)\n\n`GET /v1/public/app/{appId}/proxy/{proxyName}/{path}`\n\n```ts\nconst { data } = await client.publicProxyGet({\n appId: \'example\',\n proxyName: \'example\',\n path: \'example\',\n query: \'example\',\n})\n```\n\n---\n\n### `publicProxyPost`\n\nForward a POST request to a registered proxy target from a public-facing component (e.g. journey blocks)\n\n`POST /v1/public/app/{appId}/proxy/{proxyName}/{path}`\n\n```ts\nconst { data } = await client.publicProxyPost(\n {\n appId: \'example\',\n proxyName: \'example\',\n path: \'example\',\n query: \'example\',\n },\n {},\n)\n```\n\n---\n\n### `publicProxyPut`\n\nForward a PUT request to a registered proxy target from a public-facing component\n\n`PUT /v1/public/app/{appId}/proxy/{proxyName}/{path}`\n\n```ts\nconst { data } = await client.publicProxyPut(\n {\n appId: \'example\',\n proxyName: \'example\',\n path: \'example\',\n query: \'example\',\n },\n {},\n)\n```\n\n---\n\n### `publicProxyPatch`\n\nForward a PATCH request to a registered proxy target from a public-facing component\n\n`PATCH /v1/public/app/{appId}/proxy/{proxyName}/{path}`\n\n```ts\nconst { data } = await client.publicProxyPatch(\n {\n appId: \'example\',\n proxyName: \'example\',\n path: \'example\',\n query: \'example\',\n },\n {},\n)\n```\n\n---\n\n### `publicProxyDelete`\n\nForward a DELETE request to a registered proxy target from a public-facing component\n\n`DELETE /v1/public/app/{appId}/proxy/{proxyName}/{path}`\n\n```ts\nconst { data } = await client.publicProxyDelete({\n appId: \'example\',\n proxyName: \'example\',\n path: \'example\',\n query: \'example\',\n})\n```\n\n---\n\n## Schemas\n\n### `Role`\n\n```ts\ntype Role = {\n id?: string\n grants?: Array<{\n action: string\n resource?: string\n }>\n}\n```\n\n### `Options`\n\nAn option declaration \u2014 a setting the installing org fills in. Declared at app level.\n\n```ts\ntype Options = {\n key: string\n label?: string\n required?: boolean\n description?: string\n repeatable?: boolean\n fields?: Array<{\n key: string\n label?: string\n description?: string\n required?: boolean\n type: "text" | "number" | "boolean" | "secret"\n }>\n value?: unknown\n type: "text" | "number" | "boolean" | "secret" | "object"\n sensitive?: boolean\n configured?: boolean\n lifted?: boolean\n value_updated_at?: string\n}\n```\n\n### `ObjectField`\n\nOne declared field inside a `type: object` option. Fields are primitives \u2014 object nesting\nis not supported.\n\n\n```ts\ntype ObjectField = {\n key: string\n label?: string\n description?: string\n required?: boolean\n type: "text" | "number" | "boolean" | "secret"\n}\n```\n\n### `Option`\n\n```ts\ntype Option = {\n key: string\n value: unknown\n}\n```\n\n### `OptionsRef`\n\n```ts\ntype OptionsRef = {\n component_id: string\n options: Array<{\n key: string\n value: unknown\n }>\n}\n```\n\n### `S3Reference`\n\n```ts\ntype S3Reference = {\n bucket: string\n key: string\n}\n```\n\n### `ComponentType`\n\nType of app component\n\n```ts\ntype ComponentType = "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE" | "API_PROXY" | "EXTERNAL_VALUES" | "APP_FUNCTION"\n```\n\n### `FunctionDefinition`\n\nA named server-side function belonging to the app. Runs in the epilot code-execution sandbox with an installation-scoped app token. Functions with a schedule are executed automatically once per installation.\n\n\n```ts\ntype FunctionDefinition = {\n name: string\n type: "workflow" | "scheduled"\n label?: {\n en?: string\n de: string\n }\n description?: {\n en?: string\n de: string\n }\n code: string\n schedule?: string\n schedule_timezone?: string\n schedule_overlap?: "skip"\n secrets?: string[]\n}\n```\n\n### `Author`\n\n```ts\ntype Author = {\n name?: string\n company: string\n email?: string\n}\n```\n\n### `NotificationConfig`\n\n```ts\ntype NotificationConfig = {\n email?: string // email\n events?: "app.installed" | "app.uninstalled"[]\n}\n```\n\n### `NotificationEvent`\n\n```ts\ntype NotificationEvent = "app.installed" | "app.uninstalled"\n```\n\n### `BaseComponentCommon`\n\n```ts\ntype BaseComponentCommon = {\n id: string\n name?: {\n en?: string\n de: string\n }\n description?: {\n en?: string\n de: string\n }\n options?: Array<{\n key: string\n label?: string\n required?: boolean\n description?: string\n repeatable?: boolean\n fields?: Array<{\n key: { ... }\n label?: { ... }\n description?: { ... }\n required?: { ... }\n type: { ... }\n }>\n value?: unknown\n type: "text" | "number" | "boolean" | "secret" | "object"\n sensitive?: boolean\n configured?: boolean\n lifted?: boolean\n value_updated_at?: string\n }>\n uses_options?: string[]\n surfaces?: object\n}\n```\n\n### `BaseComponent`\n\n```ts\ntype BaseComponent = {\n id: string\n name?: {\n en?: string\n de: string\n }\n description?: {\n en?: string\n de: string\n }\n options?: Array<{\n key: string\n label?: string\n required?: boolean\n description?: string\n repeatable?: boolean\n fields?: Array<{\n key: { ... }\n label?: { ... }\n description?: { ... }\n required?: { ... }\n type: { ... }\n }>\n value?: unknown\n type: "text" | "number" | "boolean" | "secret" | "object"\n sensitive?: boolean\n configured?: boolean\n lifted?: boolean\n value_updated_at?: string\n }>\n uses_options?: string[]\n surfaces?: object\n}\n```\n\n### `ApiProxyComponent`\n\n```ts\ntype ApiProxyComponent = {\n component_type: "API_PROXY"\n configuration: {\n name: string\n target: string\n auth_type: "header" | "bearer" | "basic" | "oauth2" | "none"\n auth_header?: string\n token_url?: string // uri\n headers?: Record<string, string>\n }\n}\n```\n\n### `ExternalValuesComponent`\n\nExposes typed values resolved from an external system at runtime (e.g. a meter reading prediction). Consumers such as validation rules reference a hook and one of its results by id. Resolution is performed by the external-values-api on behalf of authenticated epilot 360 users and portal end customer\n\n```ts\ntype ExternalValuesComponent = {\n component_type: "EXTERNAL_VALUES"\n configuration: {\n hooks: Array<{\n id: { ... }\n name: { ... }\n description?: { ... }\n auth_type?: { ... }\n auth_header?: { ... }\n auth_secret?: { ... }\n auth?: { ... }\n call: { ... }\n result: { ... }\n timeout_ms?: { ... }\n on_unavailable?: { ... }\n cache?: { ... }\n secure_proxy?: { ... }\n }>\n }\n}\n```\n\n### `CustomCapabilityComponent`\n\n```ts\ntype CustomCapabilityComponent = {\n component_type: "CUSTOM_CAPABILITY"\n configuration: {\n type?: "tab" | "group" | "widget"\n allowed_schemas?: string[]\n }\n surfaces?: {\n capability_config?: {\n app_url?: { ... }\n zip_url?: { ... }\n override_url?: { ... }\n }\n }\n}\n```\n\n### `CustomPageComponent`\n\n```ts\ntype CustomPageComponent = {\n component_type: "CUSTOM_PAGE"\n configuration: {\n slug: string\n nav_label?: string\n nav_icon?: string\n nav_description?: string\n }\n surfaces?: {\n page?: {\n app_url?: { ... }\n zip_url?: { ... }\n override_url?: { ... }\n }\n }\n}\n```\n\n### `CustomPageConfig`\n\n```ts\ntype CustomPageConfig = {\n slug: string\n nav_label?: string\n nav_icon?: string\n nav_description?: string\n}\n```\n\n### `JourneyBlockComponent`\n\n```ts\ntype JourneyBlockComponent = {\n component_type: "CUSTOM_JOURNEY_BLOCK"\n configuration: {\n override_dev_mode?: {\n override_url?: { ... }\n }\n component_url: string\n component_tag: string\n component_args?: Array<{\n key: { ... }\n type: { ... }\n required?: { ... }\n description?: { ... }\n label: { ... }\n }>\n component_size?: number\n component_mapping?: Record<string, "string" | "boolean" | "date" | "datetime" | "link" | "number">\n }\n}\n```\n\n### `PortalBlockComponent`\n\n```ts\ntype PortalBlockComponent = {\n component_type: "CUSTOM_PORTAL_BLOCK"\n configuration: object\n surfaces?: {\n portal_block?: {\n app_url?: { ... }\n zip_url?: { ... }\n override_url?: { ... }\n supported_surfaces?: { ... }\n }\n }\n}\n```\n\n### `ErpInformToolkitComponent`\n\n```ts\ntype ErpInformToolkitComponent = {\n component_type: "ERP_INFORM_TOOLKIT"\n configuration: {\n type: "inbound" | "outbound"\n }\n}\n```\n\n### `CustomFlowActionComponent`\n\n```ts\ntype CustomFlowActionComponent = {\n component_type: "CUSTOM_FLOW_ACTION"\n configuration: {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "external_integration"\n external_integration_settings?: {\n url?: { ... }\n headers?: { ... }\n }\n } | {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "function"\n function_name: string\n }\n surfaces?: {\n flow_action_config?: {\n app_url?: { ... }\n zip_url?: { ... }\n override_url?: { ... }\n }\n }\n}\n```\n\n### `BaseCustomActionConfig`\n\n```ts\ntype BaseCustomActionConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n}\n```\n\n### `ExternalIntegrationCustomActionConfig`\n\n```ts\ntype ExternalIntegrationCustomActionConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "external_integration"\n external_integration_settings?: {\n url?: string\n headers?: Record<string, unknown>\n }\n}\n```\n\n### `FunctionRefCustomActionConfig`\n\n```ts\ntype FunctionRefCustomActionConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "function"\n function_name: string\n}\n```\n\n### `CustomFlowConfig`\n\nConfiguration of a flow action component. `external_integration` calls an external HTTP endpoint; `function` runs a workflow-type app function in the epilot sandbox.\n\n\n```ts\ntype CustomFlowConfig = {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "external_integration"\n external_integration_settings?: {\n url?: string\n headers?: Record<string, unknown>\n }\n} | {\n name?: string\n description?: string\n wait_for_callback?: boolean\n type: "function"\n function_name: string\n}\n```\n\n### `ExternalProductCatalogComponent`\n\n```ts\ntype ExternalProductCatalogComponent = {\n component_type: "EXTERNAL_PRODUCT_CATALOG"\n configuration: {\n hooks?: Array<{\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n }>\n }\n}\n```\n\n### `ExternalProductCatalogConfig`\n\n```ts\ntype ExternalProductCatalogConfig = {\n hooks?: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "products"\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n } | {\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "product-recommendations"\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n }>\n}\n```\n\n### `ExternalProductCatalogHookProducts`\n\nHook for getting products from an external catalog. This hook makes a call to retrieve product data from an external source. Check the docs or the response API call contract https://docs.api.epilot.io/pricing-api-external-catalog for more details.\n\n\n```ts\ntype ExternalProductCatalogHookProducts = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "products"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n}\n```\n\n### `ExternalProductCatalogHookProductRecommendations`\n\nHook for getting product recommendations from an external catalog. This hook makes a call to retrieve product recommendations from an external source. Check the docs or the response API call contract https://docs.api.epilot.io/pricing-api-external-catalog for more details.\n\n\n```ts\ntype ExternalProductCatalogHookProductRecommendations = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "product-recommendations"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n}\n```\n\n### `PortalExtensionComponent`\n\n```ts\ntype PortalExtensionComponent = {\n component_type: "PORTAL_EXTENSION"\n configuration: {\n hooks?: Array<{\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n assignment_mode?: { ... }\n contact_relation_attribute?: { ... }\n explanation?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n intervals?: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n intervals?: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n block_types?: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n intervals?: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n plausibility_mode?: { ... }\n auth?: { ... }\n call: { ... }\n resolved: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n use_static_ips?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n change_mode?: { ... }\n require_password_confirmation?: { ... }\n explanation?: { ... }\n auth?: { ... }\n call: { ... }\n resolved?: { ... }\n secure_proxy?: { ... }\n } | {\n id: { ... }\n name?: { ... }\n type: { ... }\n require_new_password?: { ... }\n explanation?: { ... }\n // ...\n}\n```\n\n### `PortalExtensionConfig`\n\n```ts\ntype PortalExtensionConfig = {\n hooks?: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "registrationIdentifiersCheck"\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n cache?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers: { ... }\n body?: { ... }\n result: { ... }\n result_correlation_id?: { ... }\n }\n resolved?: {\n result?: { ... }\n result_correlation_id?: { ... }\n error_message_path?: { ... }\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: { ... }\n use_case_slug: { ... }\n }\n } | {\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "contractIdentification"\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n cache?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers: { ... }\n body?: { ... }\n result?: { ... }\n result_correlation_id?: { ... }\n }\n resolved?: {\n result?: { ... }\n result_correlation_id?: { ... }\n error_message_path?: { ... }\n }\n assignment_mode?: "contracts" | "contact_to_contracts" | "contact_to_portal_user"\n contact_relation_attribute?: string\n explanation?: {\n en: { ... }\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: { ... }\n use_case_slug: { ... }\n }\n } | {\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n type: "priceDataRetrieval"\n intervals?: "PT15M" | "PT1H" | "P1D" | "P1M" | "P1Y" | "custom"[]\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n cache?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n }\n resolved?: {\n data_path?: { ... }\n dataPath?: { ... }\n // ...\n}\n```\n\n### `PortalExtensionHookRegistrationIdentifiersCheck`\n\nHook that replaces the built-in registration identifiers check. This hook makes a POST call whenever a user is trying to register to find the corresponding contact. The expected response to the call is:\n - 200 with contact id if exactly one contact is found\n - 404 if no contact is found or more th\n\n```ts\ntype PortalExtensionHookRegistrationIdentifiersCheck = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "registrationIdentifiersCheck"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers: Record<string, string>\n body?: object\n result: string\n result_correlation_id?: string\n }\n resolved?: {\n result?: string\n result_correlation_id?: string\n error_message_path?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookContractIdentification`\n\nHook that replaces the built-in Contract identification for self-assignment. This hook involves an HTTP request whenever a user is trying to self-assign Contract(s).\nThe expected response http status code to the call is:\n - 200 if found\n - 404 if not found\n\nThe following assignment modes are suppo\n\n```ts\ntype PortalExtensionHookContractIdentification = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "contractIdentification"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers: Record<string, string>\n body?: object\n result?: string\n result_correlation_id?: string\n }\n resolved?: {\n result?: string\n result_correlation_id?: string\n error_message_path?: string\n }\n assignment_mode?: "contracts" | "contact_to_contracts" | "contact_to_portal_user"\n contact_relation_attribute?: string\n explanation?: {\n en: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookMeterReadingPlausibilityCheck`\n\nHook that checks the plausibility of meter readings before they are saved. This hook makes a POST call whenever a user is trying to save a meter reading. The expected response to the call is:\n - 200:\n If meter reading is plausible, the response should contain:\n - valid: true\n If meter re\n\n```ts\ntype PortalExtensionHookMeterReadingPlausibilityCheck = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "meterReadingPlausibilityCheck"\n plausibility_mode?: "check" | "range"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n url: string\n body: Record<string, unknown>\n headers: Record<string, string>\n }\n resolved: {\n data_path?: string\n dataPath?: string\n counter_identifiers?: Record<string, string>\n valid?: string\n upper_limit?: string\n lower_limit?: string\n error_message_path?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookPriceDataRetrieval`\n\nHook that will allow using the specified source as data for price visualizations. This hook is triggered to fetch the data. Format of the request and response has to follow the following specification: TBD. The expected response to the call is:\n - 200 with the time series data\n\n\n```ts\ntype PortalExtensionHookPriceDataRetrieval = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "priceDataRetrieval"\n intervals?: "PT15M" | "PT1H" | "P1D" | "P1M" | "P1Y" | "custom"[]\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n resolved?: {\n data_path?: string\n dataPath?: string\n error_message_path?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookConsumptionDataRetrieval`\n\nHook that will allow using the specified source as data for consumption visualizations. This hook is triggered to fetch the data. Format of the request and response has to follow the following specification: TBD. The expected response to the call is:\n - 200 with the time series data\n\n\n```ts\ntype PortalExtensionHookConsumptionDataRetrieval = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "consumptionDataRetrieval"\n intervals?: "PT15M" | "PT1H" | "P1D" | "P1M" | "P1Y" | "custom"[]\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n resolved?: {\n data_path?: string\n dataPath?: string\n error_message_path?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookDataExport`\n\nGeneric data export hook. When configured on blocks that support it, the portal delegates the export action (e.g. CSV/Excel/PDF download) to the configured external source instead of generating the file itself. Can be used by any block that supports export \u2014 consumption charts, dynamic tariff charts\n\n```ts\ntype PortalExtensionHookDataExport = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "dataExport"\n block_types?: string[]\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n resolved?: {\n error_message_path?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookVisualizationMetadata`\n\nHook that returns runtime metadata describing how a visualization (consumption / price / cost chart) should be rendered for a given portal context (meter, contract, etc). It is invoked by the portal before fetching data, with the same context the data hook would receive, so that the discovery shape \n\n```ts\ntype PortalExtensionHookVisualizationMetadata = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "visualizationMetadata"\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n resolved?: {\n data_path?: string\n dataPath?: string\n error_message_path?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookCostDataRetrieval`\n\nHook that will allow using the specified source as data for consumption visualizations. This hook is triggered to fetch the data. Format of the request and response has to follow the following specification: TBD. The expected response to the call is:\n - 200 with the time series data\n\n\n```ts\ntype PortalExtensionHookCostDataRetrieval = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "costDataRetrieval"\n intervals?: "PT15M" | "PT1H" | "P1D" | "P1M" | "P1Y" | "custom"[]\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n }\n resolved?: {\n data_path?: string\n dataPath?: string\n error_message_path?: string\n }\n use_static_ips?: boolean\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookChangeEmail`\n\nHook that replaces the built-in change email functionality for portal users. When configured, the portal does not run its own change email flow. Instead, this hook makes an HTTP call to the third-party system, which is expected to handle the email change.\nThe `change_mode` controls what the portal d\n\n```ts\ntype PortalExtensionHookChangeEmail = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "changeEmail"\n change_mode?: "synchronous" | "asynchronous"\n require_password_confirmation?: boolean\n explanation?: {\n en: string\n }\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers: Record<string, string>\n body?: object\n }\n resolved?: {\n error_message_path?: string\n }\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookChangePassword`\n\nHook that replaces the built-in change password functionality for portal users. When configured, the portal does not change the user\'s password itself. Instead, this hook makes an HTTP call to the third-party system, which is expected to handle the password change (most likely by sending the user in\n\n```ts\ntype PortalExtensionHookChangePassword = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "changePassword"\n require_new_password?: boolean\n explanation?: {\n en: string\n }\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers: Record<string, string>\n body?: object\n }\n resolved?: {\n error_message_path?: string\n }\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionHookDeleteAccount`\n\nHook that replaces the built-in delete account functionality for portal users. When configured, the portal does not delete the user itself. Instead, this hook makes an HTTP call to the third-party system, which is expected to handle the deletion.\nThe `deletion_mode` controls what the portal does aft\n\n```ts\ntype PortalExtensionHookDeleteAccount = {\n id: string\n name?: {\n en?: string\n de: string\n }\n type: "deleteAccount"\n deletion_mode?: "synchronous" | "asynchronous"\n delete_contact?: "none" | "soft" | "hard"\n explanation?: {\n en: string\n }\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: string\n url: string\n params?: Record<string, string>\n headers: Record<string, string>\n body?: object\n }\n resolved?: {\n error_message_path?: string\n }\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `PortalExtensionSeamlessLink`\n\n```ts\ntype PortalExtensionSeamlessLink = {\n id: string\n name: {\n en?: string\n de: string\n }\n description?: {\n en?: string\n de: string\n }\n type: "seamless"\n condition?: string\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n redirect: {\n url?: string\n params?: Record<string, string>\n }\n}\n```\n\n### `PortalExtensionAuthBlock`\n\n```ts\ntype PortalExtensionAuthBlock = {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: string\n ttl: string\n }\n}\n```\n\n### `PortalExtensionSecureProxy`\n\nIf set, requests are routed through the ERP Integration secure proxy. Mutually exclusive with use_static_ips.\n\n```ts\ntype PortalExtensionSecureProxy = {\n integration_id: string // uuid\n use_case_slug: string\n}\n```\n\n### `ExternalProductCatalogAuthBlock`\n\n```ts\ntype ExternalProductCatalogAuthBlock = {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n}\n```\n\n### `OverrideDevMode`\n\nOverride URL when app is in dev mode\n\n```ts\ntype OverrideDevMode = {\n override_url?: string\n}\n```\n\n### `JourneyBlockConfig`\n\n```ts\ntype JourneyBlockConfig = {\n override_dev_mode?: {\n override_url?: string\n }\n component_url: string\n component_tag: string\n component_args?: Array<{\n key: string\n type: "text" | "boolean" | "enum" | "block_reference"\n required?: boolean\n description?: {\n en?: { ... }\n de: { ... }\n }\n label: {\n en?: { ... }\n de: { ... }\n }\n }>\n component_size?: number\n component_mapping?: Record<string, "string" | "boolean" | "date" | "datetime" | "link" | "number">\n}\n```\n\n### `PortalBlockConfig`\n\n```ts\ntype PortalBlockConfig = object\n```\n\n### `AppBridgeSurfaceConfig`\n\n```ts\ntype AppBridgeSurfaceConfig = {\n app_url?: string\n zip_url?: string\n override_url?: string\n}\n```\n\n### `PortalBlockSurfaceConfig`\n\n```ts\ntype PortalBlockSurfaceConfig = {\n app_url?: string\n zip_url?: string\n override_url?: string\n supported_surfaces?: "main" | "footer_inline" | "footer_left_absolute" | "footer_right_absolute"[]\n}\n```\n\n### `JourneyBlockComponentArgs`\n\n```ts\ntype JourneyBlockComponentArgs = {\n key: string\n type: "text" | "boolean" | "enum" | "block_reference"\n required?: boolean\n description?: {\n en?: string\n de: string\n }\n label: {\n en?: string\n de: string\n }\n}\n```\n\n### `TextArg`\n\n```ts\ntype TextArg = {\n type?: "text"\n}\n```\n\n### `BooleanArg`\n\n```ts\ntype BooleanArg = {\n type?: "boolean"\n}\n```\n\n### `BlockReferenceArg`\n\nReferences another journey block by its ID. The configuring user picks\na block from the journey via a dropdown in the journey-builder; the\nchosen block\'s ID is stored as the arg value (a string). The bundle can\nthen call `subscribe(blockId, cb)` / `getValue(blockId)` against that ID.\n\n\n```ts\ntype BlockReferenceArg = {\n type?: "block_reference"\n allowed_types?: string[]\n}\n```\n\n### `EnumArg`\n\n```ts\ntype EnumArg = {\n type?: "enum"\n isMulti?: boolean\n options: Array<{\n id: string\n label: {\n en?: { ... }\n de: { ... }\n }\n }>\n}\n```\n\n### `BillingFrequency`\n\nHow often the subscription is billed\n\n```ts\ntype BillingFrequency = "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n```\n\n### `Pricing`\n\n```ts\ntype Pricing = {\n pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"\n billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n}\n```\n\n### `Audit`\n\n```ts\ntype Audit = {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n}\n```\n\n### `Review`\n\n```ts\ntype Review = {\n version?: string\n review_status?: "approved" | "rejected" | "pending"\n requested_at?: string\n requested_by?: string\n technical_contact?: string\n marketing_contact?: string\n demo_url?: string\n}\n```\n\n### `InternalReview`\n\nReview entry including app ownership info, used by internal admin endpoints\n\n```ts\ntype InternalReview = {\n version?: string\n review_status?: "approved" | "rejected" | "pending"\n requested_at?: string\n requested_by?: string\n technical_contact?: string\n marketing_contact?: string\n demo_url?: string\n app_id?: string\n org_id?: string\n reviewed_by?: string\n reviewed_at?: string\n}\n```\n\n### `ConfigurationMetadata`\n\nBasic metadata about your app configuration which does not get versioned\n\n```ts\ntype ConfigurationMetadata = {\n app_id: string\n name: string\n author?: {\n name?: string\n company: string\n email?: string\n }\n dev_mode?: boolean\n versions: string[]\n public_versions?: string[]\n support_email?: string\n latest_version: string\n category?: string\n icon_url?: string\n documentation_url?: string\n description: {\n en?: string\n de: string\n }\n notifications?: {\n email?: string // email\n events?: "app.installed" | "app.uninstalled"[]\n }\n owner_org_id: string\n internal?: boolean\n pricing?: {\n pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"\n billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n }\n configuration_audit?: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n }\n}\n```\n\n### `ConfigurationVersion`\n\nConfiguration data about your app which is versionable\n\n```ts\ntype ConfigurationVersion = {\n app_id: string\n owner_org_id: string\n components: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n options?: Array<{\n key: { ... }\n label?: { ... }\n required?: { ... }\n description?: { ... }\n repeatable?: { ... }\n fields?: { ... }\n value?: { ... }\n type: { ... }\n sensitive?: { ... }\n configured?: { ... }\n lifted?: { ... }\n value_updated_at?: { ... }\n }>\n uses_options?: string[]\n surfaces?: object\n }>\n functions?: Array<{\n name: string\n type: "workflow" | "scheduled"\n label?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n code: string\n schedule?: string\n schedule_timezone?: string\n schedule_overlap?: "skip"\n secrets?: string[]\n }>\n options?: Array<{\n key: string\n label?: string\n required?: boolean\n description?: string\n repeatable?: boolean\n fields?: Array<{\n key: { ... }\n label?: { ... }\n description?: { ... }\n required?: { ... }\n type: { ... }\n }>\n value?: unknown\n type: "text" | "number" | "boolean" | "secret" | "object"\n sensitive?: boolean\n configured?: boolean\n lifted?: boolean\n value_updated_at?: string\n }>\n visibility?: "public" | "private"\n public?: boolean\n pending?: boolean\n version: string\n is_beta?: boolean\n deprecated_at?: string\n changelog?: string\n review_status?: "approved" | "rejected" | "pending"\n role?: {\n id?: string\n grants?: Array<{\n action: { ... }\n resource?: { ... }\n }>\n }\n blueprint_ref?: {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n }\n version_audit: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n versioned_at?: string\n versioned_by?: string\n }\n}\n```\n\n### `ApiProxyConfig`\n\nConfiguration for an API proxy component\n\n```ts\ntype ApiProxyConfig = {\n name: string\n target: string\n auth_type: "header" | "bearer" | "basic" | "oauth2" | "none"\n auth_header?: string\n token_url?: string // uri\n headers?: Record<string, string>\n}\n```\n\n### `ExternalValuesConfig`\n\nConfiguration for an EXTERNAL_VALUES component\n\n```ts\ntype ExternalValuesConfig = {\n hooks: Array<{\n id: string\n name: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n auth_type?: "none" | "header" | "bearer" | "hmac"\n auth_header?: string\n auth_secret?: string\n auth?: {\n method?: { ... }\n url: { ... }\n params?: { ... }\n headers?: { ... }\n body?: { ... }\n cache?: { ... }\n }\n call: {\n method?: { ... }\n url: { ... }\n headers?: { ... }\n params?: { ... }\n body?: { ... }\n }\n result: Array<{\n id: { ... }\n type: { ... }\n name: { ... }\n template?: { ... }\n path?: { ... }\n jsonata?: { ... }\n }>\n timeout_ms?: number\n on_unavailable?: "skip" | "block"\n cache?: {\n ttl_seconds: { ... }\n key?: { ... }\n }\n secure_proxy?: {\n integration_id: { ... }\n use_case_slug: { ... }\n }\n }>\n}\n```\n\n### `ExternalValuesHook`\n\nOne external call that returns one or more typed results. Interpolated templates (Liquid) have access to `Context`, `Consumer`, `Options`, `Env` and \u2014 for `result` templates \u2014 `Response` and `AuthResponse` (each is also available snake_case, e.g. `{{ context.input }}`).\n\n`Context` is the single name\n\n```ts\ntype ExternalValuesHook = {\n id: string\n name: {\n en?: string\n de: string\n }\n description?: {\n en?: string\n de: string\n }\n auth_type?: "none" | "header" | "bearer" | "hmac"\n auth_header?: string\n auth_secret?: string\n auth?: {\n method?: string\n url: string\n params?: Record<string, string>\n headers?: Record<string, string>\n body?: Record<string, unknown>\n cache?: {\n key: { ... }\n ttl: { ... }\n }\n }\n call: {\n method?: "GET" | "POST" | "PUT" | "PATCH"\n url: string\n headers?: Record<string, string>\n params?: Record<string, string>\n body?: Record<string, unknown>\n }\n result: Array<{\n id: string\n type: "number" | "text" | "date" | "boolean"\n name: {\n en?: { ... }\n de: { ... }\n }\n template?: string\n path?: string\n jsonata?: string\n }>\n timeout_ms?: number\n on_unavailable?: "skip" | "block"\n cache?: {\n ttl_seconds: number\n key?: string\n }\n secure_proxy?: {\n integration_id: string // uuid\n use_case_slug: string\n }\n}\n```\n\n### `ExternalValuesResult`\n\nA single typed value extracted from the hook response. Exactly one of `template`, `path` or `jsonata` must be set.\n\n\n```ts\ntype ExternalValuesResult = {\n id: string\n type: "number" | "text" | "date" | "boolean"\n name: {\n en?: string\n de: string\n }\n template?: string\n path?: string\n jsonata?: string\n}\n```\n\n### `Grants`\n\nRequired grants for the app in order to call APIs for the installing tenant\n\n```ts\ntype Grants = Array<{\n action: string\n resource?: string\n}>\n```\n\n### `BlueprintRef`\n\n```ts\ntype BlueprintRef = {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n}\n```\n\n### `Installation`\n\nInformation about the installed app. Has configuration data of the installed version\n\n```ts\ntype Installation = {\n app_id: string\n installer_org_id: string\n owner_org_id?: string\n enabled: boolean\n name: string\n icon_url?: string\n option_values?: Array<{\n component_id: string\n options: Array<{\n key: { ... }\n value: { ... }\n }>\n }>\n components: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n options?: Array<{\n key: { ... }\n label?: { ... }\n required?: { ... }\n description?: { ... }\n repeatable?: { ... }\n fields?: { ... }\n value?: { ... }\n type: { ... }\n sensitive?: { ... }\n configured?: { ... }\n lifted?: { ... }\n value_updated_at?: { ... }\n }>\n uses_options?: string[]\n surfaces?: object\n }>\n functions?: Array<{\n name: string\n type: "workflow" | "scheduled"\n label?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n code: string\n schedule?: string\n schedule_timezone?: string\n schedule_overlap?: "skip"\n secrets?: string[]\n }>\n options?: Array<{\n key: string\n label?: string\n required?: boolean\n description?: string\n repeatable?: boolean\n fields?: Array<{\n key: { ... }\n label?: { ... }\n description?: { ... }\n required?: { ... }\n type: { ... }\n }>\n value?: unknown\n type: "text" | "number" | "boolean" | "secret" | "object"\n sensitive?: boolean\n configured?: boolean\n lifted?: boolean\n value_updated_at?: string\n }>\n installed_version: string\n role?: string\n blueprint_ref?: {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n }\n installation_audit?: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n }\n _manifest?: string // uuid[]\n}\n```\n\n### `PublicConfiguration`\n\nPublic configuration of the published app\n\n```ts\ntype PublicConfiguration = {\n app_id: string\n support_email?: string\n owner_org_id: string\n name: string\n author?: {\n name?: string\n company: string\n email?: string\n }\n dev_mode?: boolean\n category?: string\n icon_url?: string\n documentation_url?: string\n description?: {\n en?: string\n de: string\n }\n pricing?: {\n pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"\n billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n }\n components: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n options?: Array<{\n key: { ... }\n label?: { ... }\n required?: { ... }\n description?: { ... }\n repeatable?: { ... }\n fields?: { ... }\n value?: { ... }\n type: { ... }\n sensitive?: { ... }\n configured?: { ... }\n lifted?: { ... }\n value_updated_at?: { ... }\n }>\n uses_options?: string[]\n surfaces?: object\n }>\n functions?: Array<{\n name: string\n type: "workflow" | "scheduled"\n label?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n code: string\n schedule?: string\n schedule_timezone?: string\n schedule_overlap?: "skip"\n secrets?: string[]\n }>\n options?: Array<{\n key: string\n label?: string\n required?: boolean\n description?: string\n repeatable?: boolean\n fields?: Array<{\n key: { ... }\n label?: { ... }\n description?: { ... }\n required?: { ... }\n type: { ... }\n }>\n value?: unknown\n type: "text" | "number" | "boolean" | "secret" | "object"\n sensitive?: boolean\n configured?: boolean\n lifted?: boolean\n value_updated_at?: string\n }>\n is_beta?: boolean\n deprecated_at?: string\n version: string\n role?: {\n id?: string\n grants?: Array<{\n action: { ... }\n resource?: { ... }\n }>\n }\n blueprint_ref?: {\n manifest_id?: string\n job_id?: string\n source_blueprint_file?: string\n // ...\n}\n```\n\n### `Configuration`\n\nConfiguration of the published app\n\n```ts\ntype Configuration = {\n app_id: string\n name: string\n author?: {\n name?: string\n company: string\n email?: string\n }\n dev_mode?: boolean\n versions: string[]\n public_versions?: string[]\n support_email?: string\n latest_version: string\n category?: string\n icon_url?: string\n documentation_url?: string\n description: {\n en?: string\n de: string\n }\n notifications?: {\n email?: string // email\n events?: "app.installed" | "app.uninstalled"[]\n }\n owner_org_id: string\n internal?: boolean\n pricing?: {\n pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"\n billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"\n }\n configuration_audit?: {\n created_at?: string\n created_by?: string\n updated_at?: string\n updated_by?: string\n }\n components: Array<{\n id: string\n name?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n options?: Array<{\n key: { ... }\n label?: { ... }\n required?: { ... }\n description?: { ... }\n repeatable?: { ... }\n fields?: { ... }\n value?: { ... }\n type: { ... }\n sensitive?: { ... }\n configured?: { ... }\n lifted?: { ... }\n value_updated_at?: { ... }\n }>\n uses_options?: string[]\n surfaces?: object\n }>\n functions?: Array<{\n name: string\n type: "workflow" | "scheduled"\n label?: {\n en?: { ... }\n de: { ... }\n }\n description?: {\n en?: { ... }\n de: { ... }\n }\n code: string\n schedule?: string\n schedule_timezone?: string\n schedule_overlap?: "skip"\n secrets?: string[]\n }>\n options?: Array<{\n key: string\n label?: string\n required?: boolean\n description?: string\n repeatable?: boolean\n fields?: Array<{\n key: { ... }\n label?: { ... }\n description?: { ... }\n required?: { ... }\n type: { ... }\n }>\n value?: unknown\n type: "text" | "number" | "boolean" | "secret" | "object"\n sensitive?: boolean\n configured?: boolean\n lifted?: boolean\n value_updated_at?: string\n }>\n // ...\n}\n```\n\n### `TranslatedString`\n\n```ts\ntype TranslatedString = {\n en?: string\n de: string\n}\n```\n\n### `CallerIdentity`\n\n```ts\ntype CallerIdentity = {\n name?: unknown\n org_id: string\n user_id?: string\n token_id?: string\n}\n```\n\n### `BatchEventRequest`\n\n```ts\ntype BatchEventRequest = {\n events: Array<{\n app_id: string\n version: string\n event_id?: string\n component_id: string\n timestamp?: string\n correlation_id?: string\n event_type: "ERROR" | "WARNING" | "INFO"\n source: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE" | "API_PROXY" | "EXTERNAL_VALUES" | "APP_FUNCTION"\n actor: {\n org_id?: { ... }\n user_id?: { ... }\n type: { ... }\n }\n details?: Record<string, unknown>\n }>\n}\n```\n\n### `Actor`\n\n```ts\ntype Actor = {\n org_id?: string\n user_id?: string\n type: "user" | "system"\n}\n```\n\n### `AppEventData`\n\n```ts\ntype AppEventData = {\n app_id: string\n version: string\n event_id?: string\n component_id: string\n timestamp?: string\n correlation_id?: string\n event_type: "ERROR" | "WARNING" | "INFO"\n source: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE" | "API_PROXY" | "EXTERNAL_VALUES" | "APP_FUNCTION"\n actor: {\n org_id?: string\n user_id?: string\n type: "user" | "system"\n }\n details?: Record<string, unknown>\n}\n```\n\n### `EventsQuery`\n\n```ts\ntype EventsQuery = {\n time_range?: {\n start?: string // date-time\n end?: string // date-time\n preset?: "1h" | "6h" | "24h" | "7d" | "30d"\n }\n filters?: {\n source?: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE" | "API_PROXY" | "EXTERNAL_VALUES" | "APP_FUNCTION"[]\n component_id?: string[]\n event_type?: "ERROR" | "WARNING" | "INFO"[]\n correlation_id?: string\n search?: string\n }\n aggregation?: {\n group_by?: "source" | "component_id" | "event_type" | "hour" | "day"[]\n metrics?: "count" | "error_rate" | "unique_users"[]\n }\n pagination?: {\n page?: number\n page_size?: number\n before?: string // date-time\n }\n sort?: {\n field?: "timestamp" | "event_type" | "component_id"\n order?: "asc" | "desc"\n }\n}\n```\n\n### `EventsQueryResponse`\n\n```ts\ntype EventsQueryResponse = {\n query?: {\n time_range?: {\n start?: { ... }\n end?: { ... }\n preset?: { ... }\n }\n filters?: {\n source?: { ... }\n component_id?: { ... }\n event_type?: { ... }\n correlation_id?: { ... }\n search?: { ... }\n }\n aggregation?: {\n group_by?: { ... }\n metrics?: { ... }\n }\n pagination?: {\n page?: { ... }\n page_size?: { ... }\n before?: { ... }\n }\n sort?: {\n field?: { ... }\n order?: { ... }\n }\n }\n results?: {\n type?: "raw"\n events?: Array<{\n app_id: { ... }\n version: { ... }\n event_id?: { ... }\n component_id: { ... }\n timestamp?: { ... }\n correlation_id?: { ... }\n event_type: { ... }\n source: { ... }\n actor: { ... }\n details?: { ... }\n }>\n } | {\n type?: "aggregated"\n groups?: Array<{\n dimensions?: { ... }\n metrics?: { ... }\n }>\n }\n pagination?: {\n page?: number\n page_size?: number\n total_items?: number\n has_next?: boolean\n }\n}\n```\n\n### `RawEvents`\n\n```ts\ntype RawEvents = {\n type?: "raw"\n events?: Array<{\n app_id: string\n version: string\n event_id?: string\n component_id: string\n timestamp?: string\n correlation_id?: string\n event_type: "ERROR" | "WARNING" | "INFO"\n source: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE" | "API_PROXY" | "EXTERNAL_VALUES" | "APP_FUNCTION"\n actor: {\n org_id?: { ... }\n user_id?: { ... }\n type: { ... }\n }\n details?: Record<string, unknown>\n }>\n}\n```\n\n### `AggregatedEvents`\n\n```ts\ntype AggregatedEvents = {\n type?: "aggregated"\n groups?: Array<{\n dimensions?: Record<string, unknown>\n metrics?: {\n count?: { ... }\n error_rate?: { ... }\n }\n }>\n}\n```\n';
5
+
6
+
7
+ exports.default = app_default;
@@ -919,10 +919,6 @@ declare namespace Components {
919
919
  versioned_by?: string;
920
920
  };
921
921
  }
922
- /**
923
- * A requirement a hook reads from `Context`, discriminated by `type`. More types will be added later; consumers must ignore types they do not know.
924
- */
925
- export type ContextRequirement = /* A requirement a hook reads from `Context`, discriminated by `type`. More types will be added later; consumers must ignore types they do not know. */ /* The consumer supplies the bound entities of `schema` under `Context.<schema>`. */ EntityContextRequirement;
926
922
  export interface CustomCapabilityComponent {
927
923
  component_type: "CUSTOM_CAPABILITY";
928
924
  configuration: {
@@ -990,18 +986,6 @@ declare namespace Components {
990
986
  */
991
987
  nav_description?: string;
992
988
  }
993
- /**
994
- * The consumer supplies the bound entities of `schema` under `Context.<schema>`.
995
- */
996
- export interface EntityContextRequirement {
997
- type: "entity";
998
- /**
999
- * Entity schema slug, e.g. `contract`.
1000
- * example:
1001
- * contract
1002
- */
1003
- schema: string; // ^[a-z0-9_-]{1,100}$
1004
- }
1005
989
  export interface EnumArg {
1006
990
  type?: "enum";
1007
991
  /**
@@ -1297,17 +1281,17 @@ declare namespace Components {
1297
1281
  * Hooks exposed by this component. Hook ids must be unique within the component.
1298
1282
  */
1299
1283
  hooks: /**
1300
- * One external call that returns one or more typed results. Interpolated templates (Liquid) have access to `Context`, `Consumer`, `Options`, `Env` and — for `result` templates — `Response` and `AuthResponse` (each is also available snake_case, e.g. `{{ context.contract }}`).
1284
+ * One external call that returns one or more typed results. Interpolated templates (Liquid) have access to `Context`, `Consumer`, `Options`, `Env` and — for `result` templates — `Response` and `AuthResponse` (each is also available snake_case, e.g. `{{ context.input }}`).
1301
1285
  *
1302
- * `Context` is the name → value map the consumer supplies, one entry per context requirement it bound. Declare what a hook reads from `Context` in `contexts` so consumers can require it.
1286
+ * `Context` is the single name → value map the consumer supplies. The names in it are up to the consumer — by convention the journey runtime passes the validated value of a validation rule as `context.input` and every configured context binding under its own configured name.
1303
1287
  *
1304
1288
  */
1305
1289
  ExternalValuesHook[];
1306
1290
  }
1307
1291
  /**
1308
- * One external call that returns one or more typed results. Interpolated templates (Liquid) have access to `Context`, `Consumer`, `Options`, `Env` and — for `result` templates — `Response` and `AuthResponse` (each is also available snake_case, e.g. `{{ context.contract }}`).
1292
+ * One external call that returns one or more typed results. Interpolated templates (Liquid) have access to `Context`, `Consumer`, `Options`, `Env` and — for `result` templates — `Response` and `AuthResponse` (each is also available snake_case, e.g. `{{ context.input }}`).
1309
1293
  *
1310
- * `Context` is the name → value map the consumer supplies, one entry per context requirement it bound. Declare what a hook reads from `Context` in `contexts` so consumers can require it.
1294
+ * `Context` is the single name → value map the consumer supplies. The names in it are up to the consumer — by convention the journey runtime passes the validated value of a validation rule as `context.input` and every configured context binding under its own configured name.
1311
1295
  *
1312
1296
  */
1313
1297
  export interface ExternalValuesHook {
@@ -1394,10 +1378,6 @@ declare namespace Components {
1394
1378
  * Behaviour when the external system is unavailable (timeout, network or upstream error). `skip`: consumers ignore conditions depending on this hook. `block`: consumers treat the dependent action as not allowed.
1395
1379
  */
1396
1380
  on_unavailable?: "skip" | "block";
1397
- /**
1398
- * The requirements the hook reads from `Context` (at most 10). An `entity` requirement means the consumer supplies the bound entities of that schema under `Context.<schema>` (e.g. `{{ Context.contract[0].external_id }}` needs `{ type: entity, schema: contract }`). More requirement types will be added later; consumers must ignore types they do not know.
1399
- */
1400
- contexts?: /* A requirement a hook reads from `Context`, discriminated by `type`. More types will be added later; consumers must ignore types they do not know. */ ContextRequirement[];
1401
1381
  /**
1402
1382
  * Response caching. Off when omitted.
1403
1383
  */
@@ -2400,12 +2380,35 @@ declare namespace Components {
2400
2380
  * Deprecated. Use `resolved.result` instead. Contract or Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation.
2401
2381
  */
2402
2382
  result?: string;
2383
+ /**
2384
+ * Correlation id to wait for inbound ERP events under, resolved from the third-party
2385
+ * response, e.g. `{{CallResponse.data.acknowledgeId}}`. Only read when the portal is
2386
+ * configured to wait on the Integration Toolkit
2387
+ * (`extension_hooks.<hook>.wait_for_toolkit`).
2388
+ *
2389
+ * There is no default: unless a hook declares this, the portal waits on the id it
2390
+ * minted and handed the hook as `{{CorrelationId}}`, whatever the response carries. A
2391
+ * partner that pushes under that id leaves this unset; only a partner that pushes
2392
+ * under an id of its own declares where the response carries it. A declared id that
2393
+ * is absent from the response falls back to the minted one; one that is not a valid
2394
+ * correlation id (at most 255 letters, digits, `-` and `_`) is not waited on, and
2395
+ * the portal polls entity search instead.
2396
+ *
2397
+ */
2398
+ result_correlation_id?: string;
2403
2399
  };
2404
2400
  resolved?: {
2405
2401
  /**
2406
2402
  * Contract or Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation. Supersedes the deprecated `call.result`.
2407
2403
  */
2408
2404
  result?: string;
2405
+ /**
2406
+ * Correlation id to wait for inbound ERP events under, resolved from the third-party
2407
+ * response, e.g. `{{CallResponse.data.acknowledgeId}}`. Supersedes
2408
+ * `call.result_correlation_id`. No default; see `call.result_correlation_id`.
2409
+ *
2410
+ */
2411
+ result_correlation_id?: string;
2409
2412
  /**
2410
2413
  * Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).
2411
2414
  * If specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.
@@ -2896,12 +2899,35 @@ declare namespace Components {
2896
2899
  * Deprecated. Use `resolved.result` instead. Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation.
2897
2900
  */
2898
2901
  result: string;
2902
+ /**
2903
+ * Correlation id to wait for inbound ERP events under, resolved from the third-party
2904
+ * response, e.g. `{{CallResponse.data.acknowledgeId}}`. Only read when the portal is
2905
+ * configured to wait on the Integration Toolkit
2906
+ * (`extension_hooks.<hook>.wait_for_toolkit`).
2907
+ *
2908
+ * There is no default: unless a hook declares this, the portal waits on the id it
2909
+ * minted and handed the hook as `{{CorrelationId}}`, whatever the response carries. A
2910
+ * partner that pushes under that id leaves this unset; only a partner that pushes
2911
+ * under an id of its own declares where the response carries it. A declared id that
2912
+ * is absent from the response falls back to the minted one; one that is not a valid
2913
+ * correlation id (at most 255 letters, digits, `-` and `_`) is not waited on, and
2914
+ * the portal polls entity search instead.
2915
+ *
2916
+ */
2917
+ result_correlation_id?: string;
2899
2918
  };
2900
2919
  resolved?: {
2901
2920
  /**
2902
2921
  * Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation. Supersedes the deprecated `call.result`.
2903
2922
  */
2904
2923
  result?: string;
2924
+ /**
2925
+ * Correlation id to wait for inbound ERP events under, resolved from the third-party
2926
+ * response, e.g. `{{CallResponse.data.acknowledgeId}}`. Supersedes
2927
+ * `call.result_correlation_id`. No default; see `call.result_correlation_id`.
2928
+ *
2929
+ */
2930
+ result_correlation_id?: string;
2905
2931
  /**
2906
2932
  * Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).
2907
2933
  * If specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.
@@ -4682,13 +4708,11 @@ type ComponentType = Components.Schemas.ComponentType;
4682
4708
  type Configuration = Components.Schemas.Configuration;
4683
4709
  type ConfigurationMetadata = Components.Schemas.ConfigurationMetadata;
4684
4710
  type ConfigurationVersion = Components.Schemas.ConfigurationVersion;
4685
- type ContextRequirement = Components.Schemas.ContextRequirement;
4686
4711
  type CustomCapabilityComponent = Components.Schemas.CustomCapabilityComponent;
4687
4712
  type CustomFlowActionComponent = Components.Schemas.CustomFlowActionComponent;
4688
4713
  type CustomFlowConfig = Components.Schemas.CustomFlowConfig;
4689
4714
  type CustomPageComponent = Components.Schemas.CustomPageComponent;
4690
4715
  type CustomPageConfig = Components.Schemas.CustomPageConfig;
4691
- type EntityContextRequirement = Components.Schemas.EntityContextRequirement;
4692
4716
  type EnumArg = Components.Schemas.EnumArg;
4693
4717
  type ErpInformToolkitComponent = Components.Schemas.ErpInformToolkitComponent;
4694
4718
  type EventsQuery = Components.Schemas.EventsQuery;
@@ -4746,4 +4770,4 @@ type S3Reference = Components.Schemas.S3Reference;
4746
4770
  type TextArg = Components.Schemas.TextArg;
4747
4771
  type TranslatedString = Components.Schemas.TranslatedString;
4748
4772
 
4749
- export { type JourneyBlockComponentArgs as $, type Actor as A, type BaseComponent as B, type Client as C, type CustomPageConfig as D, type EntityContextRequirement as E, type EnumArg as F, type ErpInformToolkitComponent as G, type EventsQuery as H, type EventsQueryResponse as I, type ExternalIntegrationCustomActionConfig as J, type ExternalProductCatalogAuthBlock as K, type ExternalProductCatalogComponent as L, type ExternalProductCatalogConfig as M, type ExternalProductCatalogHookProductRecommendations as N, type OperationMethods as O, Paths as P, type ExternalProductCatalogHookProducts as Q, type ExternalValuesComponent as R, type ExternalValuesConfig as S, type ExternalValuesHook as T, type ExternalValuesResult as U, type FunctionDefinition as V, type FunctionRefCustomActionConfig as W, type Grants as X, type Installation as Y, type InternalReview as Z, type JourneyBlockComponent as _, Components as a, type JourneyBlockConfig as a0, type NotificationConfig as a1, type NotificationEvent as a2, type ObjectField as a3, type Option as a4, type Options as a5, type OptionsRef as a6, type OverrideDevMode as a7, type PortalBlockComponent as a8, type PortalBlockConfig as a9, type PortalBlockSurfaceConfig as aa, type PortalExtensionAuthBlock as ab, type PortalExtensionComponent as ac, type PortalExtensionConfig as ad, type PortalExtensionHookChangeEmail as ae, type PortalExtensionHookChangePassword as af, type PortalExtensionHookConsumptionDataRetrieval as ag, type PortalExtensionHookContractIdentification as ah, type PortalExtensionHookCostDataRetrieval as ai, type PortalExtensionHookDataExport as aj, type PortalExtensionHookDeleteAccount as ak, type PortalExtensionHookMeterReadingPlausibilityCheck as al, type PortalExtensionHookPriceDataRetrieval as am, type PortalExtensionHookRegistrationIdentifiersCheck as an, type PortalExtensionHookVisualizationMetadata as ao, type PortalExtensionSeamlessLink as ap, type PortalExtensionSecureProxy as aq, type Pricing as ar, type PublicConfiguration as as, type RawEvents as at, type Review as au, type Role as av, type S3Reference as aw, type TextArg as ax, type TranslatedString as ay, type PathsDictionary as b, type AggregatedEvents as c, type ApiProxyComponent as d, type ApiProxyConfig as e, type AppBridgeSurfaceConfig as f, type AppEventData as g, type Audit as h, type Author as i, type BaseComponentCommon as j, type BaseCustomActionConfig as k, type BatchEventRequest as l, type BillingFrequency as m, type BlockReferenceArg as n, type BlueprintRef as o, type BooleanArg as p, type CallerIdentity as q, type ComponentType as r, type Configuration as s, type ConfigurationMetadata as t, type ConfigurationVersion as u, type ContextRequirement as v, type CustomCapabilityComponent as w, type CustomFlowActionComponent as x, type CustomFlowConfig as y, type CustomPageComponent as z };
4773
+ export { type NotificationConfig as $, type Actor as A, type BaseComponent as B, type Client as C, type ErpInformToolkitComponent as D, type EnumArg as E, type EventsQuery as F, type EventsQueryResponse as G, type ExternalIntegrationCustomActionConfig as H, type ExternalProductCatalogAuthBlock as I, type ExternalProductCatalogComponent as J, type ExternalProductCatalogConfig as K, type ExternalProductCatalogHookProductRecommendations as L, type ExternalProductCatalogHookProducts as M, type ExternalValuesComponent as N, type OperationMethods as O, Paths as P, type ExternalValuesConfig as Q, type ExternalValuesHook as R, type ExternalValuesResult as S, type FunctionDefinition as T, type FunctionRefCustomActionConfig as U, type Grants as V, type Installation as W, type InternalReview as X, type JourneyBlockComponent as Y, type JourneyBlockComponentArgs as Z, type JourneyBlockConfig as _, Components as a, type NotificationEvent as a0, type ObjectField as a1, type Option as a2, type Options as a3, type OptionsRef as a4, type OverrideDevMode as a5, type PortalBlockComponent as a6, type PortalBlockConfig as a7, type PortalBlockSurfaceConfig as a8, type PortalExtensionAuthBlock as a9, type PortalExtensionComponent as aa, type PortalExtensionConfig as ab, type PortalExtensionHookChangeEmail as ac, type PortalExtensionHookChangePassword as ad, type PortalExtensionHookConsumptionDataRetrieval as ae, type PortalExtensionHookContractIdentification as af, type PortalExtensionHookCostDataRetrieval as ag, type PortalExtensionHookDataExport as ah, type PortalExtensionHookDeleteAccount as ai, type PortalExtensionHookMeterReadingPlausibilityCheck as aj, type PortalExtensionHookPriceDataRetrieval as ak, type PortalExtensionHookRegistrationIdentifiersCheck as al, type PortalExtensionHookVisualizationMetadata as am, type PortalExtensionSeamlessLink as an, type PortalExtensionSecureProxy as ao, type Pricing as ap, type PublicConfiguration as aq, type RawEvents as ar, type Review as as, type Role as at, type S3Reference as au, type TextArg as av, type TranslatedString as aw, type PathsDictionary as b, type AggregatedEvents as c, type ApiProxyComponent as d, type ApiProxyConfig as e, type AppBridgeSurfaceConfig as f, type AppEventData as g, type Audit as h, type Author as i, type BaseComponentCommon as j, type BaseCustomActionConfig as k, type BatchEventRequest as l, type BillingFrequency as m, type BlockReferenceArg as n, type BlueprintRef as o, type BooleanArg as p, type CallerIdentity as q, type ComponentType as r, type Configuration as s, type ConfigurationMetadata as t, type ConfigurationVersion as u, type CustomCapabilityComponent as v, type CustomFlowActionComponent as w, type CustomFlowConfig as x, type CustomPageComponent as y, type CustomPageConfig as z };
@@ -919,10 +919,6 @@ declare namespace Components {
919
919
  versioned_by?: string;
920
920
  };
921
921
  }
922
- /**
923
- * A requirement a hook reads from `Context`, discriminated by `type`. More types will be added later; consumers must ignore types they do not know.
924
- */
925
- export type ContextRequirement = /* A requirement a hook reads from `Context`, discriminated by `type`. More types will be added later; consumers must ignore types they do not know. */ /* The consumer supplies the bound entities of `schema` under `Context.<schema>`. */ EntityContextRequirement;
926
922
  export interface CustomCapabilityComponent {
927
923
  component_type: "CUSTOM_CAPABILITY";
928
924
  configuration: {
@@ -990,18 +986,6 @@ declare namespace Components {
990
986
  */
991
987
  nav_description?: string;
992
988
  }
993
- /**
994
- * The consumer supplies the bound entities of `schema` under `Context.<schema>`.
995
- */
996
- export interface EntityContextRequirement {
997
- type: "entity";
998
- /**
999
- * Entity schema slug, e.g. `contract`.
1000
- * example:
1001
- * contract
1002
- */
1003
- schema: string; // ^[a-z0-9_-]{1,100}$
1004
- }
1005
989
  export interface EnumArg {
1006
990
  type?: "enum";
1007
991
  /**
@@ -1297,17 +1281,17 @@ declare namespace Components {
1297
1281
  * Hooks exposed by this component. Hook ids must be unique within the component.
1298
1282
  */
1299
1283
  hooks: /**
1300
- * One external call that returns one or more typed results. Interpolated templates (Liquid) have access to `Context`, `Consumer`, `Options`, `Env` and — for `result` templates — `Response` and `AuthResponse` (each is also available snake_case, e.g. `{{ context.contract }}`).
1284
+ * One external call that returns one or more typed results. Interpolated templates (Liquid) have access to `Context`, `Consumer`, `Options`, `Env` and — for `result` templates — `Response` and `AuthResponse` (each is also available snake_case, e.g. `{{ context.input }}`).
1301
1285
  *
1302
- * `Context` is the name → value map the consumer supplies, one entry per context requirement it bound. Declare what a hook reads from `Context` in `contexts` so consumers can require it.
1286
+ * `Context` is the single name → value map the consumer supplies. The names in it are up to the consumer — by convention the journey runtime passes the validated value of a validation rule as `context.input` and every configured context binding under its own configured name.
1303
1287
  *
1304
1288
  */
1305
1289
  ExternalValuesHook[];
1306
1290
  }
1307
1291
  /**
1308
- * One external call that returns one or more typed results. Interpolated templates (Liquid) have access to `Context`, `Consumer`, `Options`, `Env` and — for `result` templates — `Response` and `AuthResponse` (each is also available snake_case, e.g. `{{ context.contract }}`).
1292
+ * One external call that returns one or more typed results. Interpolated templates (Liquid) have access to `Context`, `Consumer`, `Options`, `Env` and — for `result` templates — `Response` and `AuthResponse` (each is also available snake_case, e.g. `{{ context.input }}`).
1309
1293
  *
1310
- * `Context` is the name → value map the consumer supplies, one entry per context requirement it bound. Declare what a hook reads from `Context` in `contexts` so consumers can require it.
1294
+ * `Context` is the single name → value map the consumer supplies. The names in it are up to the consumer — by convention the journey runtime passes the validated value of a validation rule as `context.input` and every configured context binding under its own configured name.
1311
1295
  *
1312
1296
  */
1313
1297
  export interface ExternalValuesHook {
@@ -1394,10 +1378,6 @@ declare namespace Components {
1394
1378
  * Behaviour when the external system is unavailable (timeout, network or upstream error). `skip`: consumers ignore conditions depending on this hook. `block`: consumers treat the dependent action as not allowed.
1395
1379
  */
1396
1380
  on_unavailable?: "skip" | "block";
1397
- /**
1398
- * The requirements the hook reads from `Context` (at most 10). An `entity` requirement means the consumer supplies the bound entities of that schema under `Context.<schema>` (e.g. `{{ Context.contract[0].external_id }}` needs `{ type: entity, schema: contract }`). More requirement types will be added later; consumers must ignore types they do not know.
1399
- */
1400
- contexts?: /* A requirement a hook reads from `Context`, discriminated by `type`. More types will be added later; consumers must ignore types they do not know. */ ContextRequirement[];
1401
1381
  /**
1402
1382
  * Response caching. Off when omitted.
1403
1383
  */
@@ -2400,12 +2380,35 @@ declare namespace Components {
2400
2380
  * Deprecated. Use `resolved.result` instead. Contract or Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation.
2401
2381
  */
2402
2382
  result?: string;
2383
+ /**
2384
+ * Correlation id to wait for inbound ERP events under, resolved from the third-party
2385
+ * response, e.g. `{{CallResponse.data.acknowledgeId}}`. Only read when the portal is
2386
+ * configured to wait on the Integration Toolkit
2387
+ * (`extension_hooks.<hook>.wait_for_toolkit`).
2388
+ *
2389
+ * There is no default: unless a hook declares this, the portal waits on the id it
2390
+ * minted and handed the hook as `{{CorrelationId}}`, whatever the response carries. A
2391
+ * partner that pushes under that id leaves this unset; only a partner that pushes
2392
+ * under an id of its own declares where the response carries it. A declared id that
2393
+ * is absent from the response falls back to the minted one; one that is not a valid
2394
+ * correlation id (at most 255 letters, digits, `-` and `_`) is not waited on, and
2395
+ * the portal polls entity search instead.
2396
+ *
2397
+ */
2398
+ result_correlation_id?: string;
2403
2399
  };
2404
2400
  resolved?: {
2405
2401
  /**
2406
2402
  * Contract or Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation. Supersedes the deprecated `call.result`.
2407
2403
  */
2408
2404
  result?: string;
2405
+ /**
2406
+ * Correlation id to wait for inbound ERP events under, resolved from the third-party
2407
+ * response, e.g. `{{CallResponse.data.acknowledgeId}}`. Supersedes
2408
+ * `call.result_correlation_id`. No default; see `call.result_correlation_id`.
2409
+ *
2410
+ */
2411
+ result_correlation_id?: string;
2409
2412
  /**
2410
2413
  * Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).
2411
2414
  * If specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.
@@ -2896,12 +2899,35 @@ declare namespace Components {
2896
2899
  * Deprecated. Use `resolved.result` instead. Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation.
2897
2900
  */
2898
2901
  result: string;
2902
+ /**
2903
+ * Correlation id to wait for inbound ERP events under, resolved from the third-party
2904
+ * response, e.g. `{{CallResponse.data.acknowledgeId}}`. Only read when the portal is
2905
+ * configured to wait on the Integration Toolkit
2906
+ * (`extension_hooks.<hook>.wait_for_toolkit`).
2907
+ *
2908
+ * There is no default: unless a hook declares this, the portal waits on the id it
2909
+ * minted and handed the hook as `{{CorrelationId}}`, whatever the response carries. A
2910
+ * partner that pushes under that id leaves this unset; only a partner that pushes
2911
+ * under an id of its own declares where the response carries it. A declared id that
2912
+ * is absent from the response falls back to the minted one; one that is not a valid
2913
+ * correlation id (at most 255 letters, digits, `-` and `_`) is not waited on, and
2914
+ * the portal polls entity search instead.
2915
+ *
2916
+ */
2917
+ result_correlation_id?: string;
2899
2918
  };
2900
2919
  resolved?: {
2901
2920
  /**
2902
2921
  * Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation. Supersedes the deprecated `call.result`.
2903
2922
  */
2904
2923
  result?: string;
2924
+ /**
2925
+ * Correlation id to wait for inbound ERP events under, resolved from the third-party
2926
+ * response, e.g. `{{CallResponse.data.acknowledgeId}}`. Supersedes
2927
+ * `call.result_correlation_id`. No default; see `call.result_correlation_id`.
2928
+ *
2929
+ */
2930
+ result_correlation_id?: string;
2905
2931
  /**
2906
2932
  * Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).
2907
2933
  * If specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.
@@ -4682,13 +4708,11 @@ type ComponentType = Components.Schemas.ComponentType;
4682
4708
  type Configuration = Components.Schemas.Configuration;
4683
4709
  type ConfigurationMetadata = Components.Schemas.ConfigurationMetadata;
4684
4710
  type ConfigurationVersion = Components.Schemas.ConfigurationVersion;
4685
- type ContextRequirement = Components.Schemas.ContextRequirement;
4686
4711
  type CustomCapabilityComponent = Components.Schemas.CustomCapabilityComponent;
4687
4712
  type CustomFlowActionComponent = Components.Schemas.CustomFlowActionComponent;
4688
4713
  type CustomFlowConfig = Components.Schemas.CustomFlowConfig;
4689
4714
  type CustomPageComponent = Components.Schemas.CustomPageComponent;
4690
4715
  type CustomPageConfig = Components.Schemas.CustomPageConfig;
4691
- type EntityContextRequirement = Components.Schemas.EntityContextRequirement;
4692
4716
  type EnumArg = Components.Schemas.EnumArg;
4693
4717
  type ErpInformToolkitComponent = Components.Schemas.ErpInformToolkitComponent;
4694
4718
  type EventsQuery = Components.Schemas.EventsQuery;
@@ -4746,4 +4770,4 @@ type S3Reference = Components.Schemas.S3Reference;
4746
4770
  type TextArg = Components.Schemas.TextArg;
4747
4771
  type TranslatedString = Components.Schemas.TranslatedString;
4748
4772
 
4749
- export { type JourneyBlockComponentArgs as $, type Actor as A, type BaseComponent as B, type Client as C, type CustomPageConfig as D, type EntityContextRequirement as E, type EnumArg as F, type ErpInformToolkitComponent as G, type EventsQuery as H, type EventsQueryResponse as I, type ExternalIntegrationCustomActionConfig as J, type ExternalProductCatalogAuthBlock as K, type ExternalProductCatalogComponent as L, type ExternalProductCatalogConfig as M, type ExternalProductCatalogHookProductRecommendations as N, type OperationMethods as O, Paths as P, type ExternalProductCatalogHookProducts as Q, type ExternalValuesComponent as R, type ExternalValuesConfig as S, type ExternalValuesHook as T, type ExternalValuesResult as U, type FunctionDefinition as V, type FunctionRefCustomActionConfig as W, type Grants as X, type Installation as Y, type InternalReview as Z, type JourneyBlockComponent as _, Components as a, type JourneyBlockConfig as a0, type NotificationConfig as a1, type NotificationEvent as a2, type ObjectField as a3, type Option as a4, type Options as a5, type OptionsRef as a6, type OverrideDevMode as a7, type PortalBlockComponent as a8, type PortalBlockConfig as a9, type PortalBlockSurfaceConfig as aa, type PortalExtensionAuthBlock as ab, type PortalExtensionComponent as ac, type PortalExtensionConfig as ad, type PortalExtensionHookChangeEmail as ae, type PortalExtensionHookChangePassword as af, type PortalExtensionHookConsumptionDataRetrieval as ag, type PortalExtensionHookContractIdentification as ah, type PortalExtensionHookCostDataRetrieval as ai, type PortalExtensionHookDataExport as aj, type PortalExtensionHookDeleteAccount as ak, type PortalExtensionHookMeterReadingPlausibilityCheck as al, type PortalExtensionHookPriceDataRetrieval as am, type PortalExtensionHookRegistrationIdentifiersCheck as an, type PortalExtensionHookVisualizationMetadata as ao, type PortalExtensionSeamlessLink as ap, type PortalExtensionSecureProxy as aq, type Pricing as ar, type PublicConfiguration as as, type RawEvents as at, type Review as au, type Role as av, type S3Reference as aw, type TextArg as ax, type TranslatedString as ay, type PathsDictionary as b, type AggregatedEvents as c, type ApiProxyComponent as d, type ApiProxyConfig as e, type AppBridgeSurfaceConfig as f, type AppEventData as g, type Audit as h, type Author as i, type BaseComponentCommon as j, type BaseCustomActionConfig as k, type BatchEventRequest as l, type BillingFrequency as m, type BlockReferenceArg as n, type BlueprintRef as o, type BooleanArg as p, type CallerIdentity as q, type ComponentType as r, type Configuration as s, type ConfigurationMetadata as t, type ConfigurationVersion as u, type ContextRequirement as v, type CustomCapabilityComponent as w, type CustomFlowActionComponent as x, type CustomFlowConfig as y, type CustomPageComponent as z };
4773
+ export { type NotificationConfig as $, type Actor as A, type BaseComponent as B, type Client as C, type ErpInformToolkitComponent as D, type EnumArg as E, type EventsQuery as F, type EventsQueryResponse as G, type ExternalIntegrationCustomActionConfig as H, type ExternalProductCatalogAuthBlock as I, type ExternalProductCatalogComponent as J, type ExternalProductCatalogConfig as K, type ExternalProductCatalogHookProductRecommendations as L, type ExternalProductCatalogHookProducts as M, type ExternalValuesComponent as N, type OperationMethods as O, Paths as P, type ExternalValuesConfig as Q, type ExternalValuesHook as R, type ExternalValuesResult as S, type FunctionDefinition as T, type FunctionRefCustomActionConfig as U, type Grants as V, type Installation as W, type InternalReview as X, type JourneyBlockComponent as Y, type JourneyBlockComponentArgs as Z, type JourneyBlockConfig as _, Components as a, type NotificationEvent as a0, type ObjectField as a1, type Option as a2, type Options as a3, type OptionsRef as a4, type OverrideDevMode as a5, type PortalBlockComponent as a6, type PortalBlockConfig as a7, type PortalBlockSurfaceConfig as a8, type PortalExtensionAuthBlock as a9, type PortalExtensionComponent as aa, type PortalExtensionConfig as ab, type PortalExtensionHookChangeEmail as ac, type PortalExtensionHookChangePassword as ad, type PortalExtensionHookConsumptionDataRetrieval as ae, type PortalExtensionHookContractIdentification as af, type PortalExtensionHookCostDataRetrieval as ag, type PortalExtensionHookDataExport as ah, type PortalExtensionHookDeleteAccount as ai, type PortalExtensionHookMeterReadingPlausibilityCheck as aj, type PortalExtensionHookPriceDataRetrieval as ak, type PortalExtensionHookRegistrationIdentifiersCheck as al, type PortalExtensionHookVisualizationMetadata as am, type PortalExtensionSeamlessLink as an, type PortalExtensionSecureProxy as ao, type Pricing as ap, type PublicConfiguration as aq, type RawEvents as ar, type Review as as, type Role as at, type S3Reference as au, type TextArg as av, type TranslatedString as aw, type PathsDictionary as b, type AggregatedEvents as c, type ApiProxyComponent as d, type ApiProxyConfig as e, type AppBridgeSurfaceConfig as f, type AppEventData as g, type Audit as h, type Author as i, type BaseComponentCommon as j, type BaseCustomActionConfig as k, type BatchEventRequest as l, type BillingFrequency as m, type BlockReferenceArg as n, type BlueprintRef as o, type BooleanArg as p, type CallerIdentity as q, type ComponentType as r, type Configuration as s, type ConfigurationMetadata as t, type ConfigurationVersion as u, type CustomCapabilityComponent as v, type CustomFlowActionComponent as w, type CustomFlowConfig as x, type CustomPageComponent as y, type CustomPageConfig as z };