App API
- Base URL:
https://app.sls.epilot.io - Full API Docs: https://docs.epilot.io/api/app
Usageโ
import { epilot } from '@epilot/sdk'
epilot.authorize(() => '<token>')
const { data } = await epilot.app.getPublicFacingComponent(...)
Tree-shakeable importโ
import { getClient, authorize } from '@epilot/sdk/app'
const appClient = getClient()
authorize(appClient, () => '<token>')
const { data } = await appClient.getPublicFacingComponent(...)
Operationsโ
App Installation
getPublicFacingComponentlistInstallationsgetInstallationinstallpatchInstallationuninstallpromoteVersion
App Configuration
listConfigurationscreateConfigurationlistPublicConfigurationsgetPublicConfigurationgetConfigurationpatchMetadatadeleteConfigurationcreateBundleUploadUrlcreateZipUploadUrlcreateLogoUploadUrldeleteLogolistVersionsgetVersiondeleteVersionpatchVersiongetReviewcreateReviewcreateComponentpatchComponentdeleteComponentcloneVersion
App Analytics
Schemas
RoleOptionsOptionOptionsRefS3ReferenceComponentTypeAuthorNotificationConfigNotificationEventBaseComponentCommonBaseComponentCustomCapabilityComponentCustomPageComponentCustomPageConfigJourneyBlockComponentPortalBlockComponentErpInformToolkitComponentCustomFlowActionComponentBaseCustomActionConfigExternalIntegrationCustomActionConfigSandboxCustomActionConfigCustomFlowConfigExternalProductCatalogComponentExternalProductCatalogConfigExternalProductCatalogHookProductsExternalProductCatalogHookProductRecommendationsPortalExtensionComponentPortalExtensionConfigPortalExtensionHookRegistrationIdentifiersCheckPortalExtensionHookContractIdentificationPortalExtensionHookMeterReadingPlausibilityCheckPortalExtensionHookPriceDataRetrievalPortalExtensionHookConsumptionDataRetrievalPortalExtensionHookCostDataRetrievalPortalExtensionSeamlessLinkPortalExtensionAuthBlockExternalProductCatalogAuthBlockOverrideDevModeJourneyBlockConfigPortalBlockConfigAppBridgeSurfaceConfigPortalBlockSurfaceConfigJourneyBlockComponentArgsTextArgBooleanArgEnumArgBillingFrequencyPricingAuditReviewConfigurationMetadataConfigurationVersionGrantsBlueprintRefInstallationPublicConfigurationConfigurationTranslatedStringCallerIdentityBatchEventRequestActorAppEventDataEventsQueryEventsQueryResponseRawEventsAggregatedEvents
getPublicFacingComponentโ
Retrieve public facing components for an installed app
GET /v1/public/app/{appId}/components/{componentId}
const { data } = await client.getPublicFacingComponent({
appId: 'example',
componentId: 'example',
})
Response
{
"component": {
"component_type": "CUSTOM_JOURNEY_BLOCK",
"configuration": {
"override_dev_mode": {
"override_url": "http://localhost:3000"
},
"component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",
"component_tag": "string",
"component_args": [
{
"type": "text"
}
],
"component_size": 0,
"component_mapping": {}
}
}
}
listConfigurationsโ
List all app configuration metadata owned by an organization. To get full app configuration details, use the /v1/app-configurations/{appId} endpoint.
GET /v1/app-configurations
const { data } = await client.listConfigurations({
page: 1,
pageSize: 1,
})
Response
{
"configurations": [
{
"app_id": "string",
"name": "string",
"author": {
"name": "string",
"company": "string",
"email": "string"
},
"dev_mode": true,
"versions": ["string"],
"public_versions": ["string"],
"support_email": "string",
"latest_version": "string",
"category": "string",
"icon_url": "string",
"documentation_url": "string",
"description": {
"en": "string",
"de": "string"
},
"notifications": {
"email": "developer@example.com",
"events": ["app.installed"]
},
"owner_org_id": "string",
"internal": false,
"pricing": {
"pricing_type": "FREE",
"billing_frequency": "MONTHLY"
},
"configuration_audit": {
"created_at": "string",
"created_by": "string",
"updated_at": "string",
"updated_by": "string"
}
}
],
"pagination": {
"total": 0,
"page": 0,
"pageSize": 0
}
}
createConfigurationโ
Create a new private app configuration. To make it public a verification process needs to be triggered
POST /v1/app-configurations
const { data } = await client.createConfiguration(
null,
{
name: 'string',
description: {
en: 'string',
de: 'string'
},
category: 'string',
logo_url_key: 'string'
},
)
Response
{
"app_id": "string"
}
listPublicConfigurationsโ
List all publicly available app configurations that can be installed. This endpoint returns apps that have at least one public version.
GET /v1/app-configurations/public
const { data } = await client.listPublicConfigurations({
page: 1,
pageSize: 1,
})
Response
{
"configurations": [
{
"app_id": "string",
"name": "string",
"author": {
"name": "string",
"company": "string",
"email": "string"
},
"dev_mode": true,
"versions": ["string"],
"public_versions": ["string"],
"support_email": "string",
"latest_version": "string",
"category": "string",
"icon_url": "string",
"documentation_url": "string",
"description": {
"en": "string",
"de": "string"
},
"notifications": {
"email": "developer@example.com",
"events": ["app.installed"]
},
"owner_org_id": "string",
"internal": false,
"pricing": {
"pricing_type": "FREE",
"billing_frequency": "MONTHLY"
},
"configuration_audit": {
"created_at": "string",
"created_by": "string",
"updated_at": "string",
"updated_by": "string"
}
}
],
"pagination": {
"total": 0,
"page": 0,
"pageSize": 0
}
}
getPublicConfigurationโ
Retrieve the public configuration of an app to install in your tenant
GET /v1/app-configurations/public/{appId}
const { data } = await client.getPublicConfiguration({
appId: 'example',
version: 'example',
})
Response
{
"app_id": "string",
"support_email": "string",
"owner_org_id": "string",
"name": "string",
"author": {
"name": "string",
"company": "string",
"email": "string"
},
"dev_mode": true,
"category": "string",
"icon_url": "string",
"documentation_url": "string",
"description": {
"en": "string",
"de": "string"
},
"pricing": {
"pricing_type": "FREE",
"billing_frequency": "MONTHLY"
},
"components": [
{
"component_type": "CUSTOM_JOURNEY_BLOCK",
"configuration": {}
}
],
"is_beta": true,
"deprecated_at": "string",
"version": "string",
"role": {
"id": "string",
"grants": [
{}
]
},
"blueprint_ref": {
"manifest_id": "string",
"job_id": "string"
},
"latest_version": "string",
"public": true,
"versions": [
{
"app_id": "string",
"owner_org_id": "string",
"components": [],
"visibility": "private",
"public": false,
"pending": false,
"version": "string",
"is_beta": true,
"deprecated_at": "string",
"changelog": "string",
"review_status": "approved",
"role": {},
"blueprint_ref": {},
"version_audit": {}
}
]
}
getConfigurationโ
Retrieve a specific app configuration
GET /v1/app-configurations/{appId}
const { data } = await client.getConfiguration({
appId: 'example',
version: 'example',
})
Response
{
"app_id": "string",
"name": "string",
"author": {
"name": "string",
"company": "string",
"email": "string"
},
"dev_mode": true,
"versions": ["string"],
"public_versions": ["string"],
"support_email": "string",
"latest_version": "string",
"category": "string",
"icon_url": "string",
"documentation_url": "string",
"description": {
"en": "string",
"de": "string"
},
"notifications": {
"email": "developer@example.com",
"events": ["app.installed"]
},
"owner_org_id": "string",
"internal": false,
"pricing": {
"pricing_type": "FREE",
"billing_frequency": "MONTHLY"
},
"configuration_audit": {
"created_at": "string",
"created_by": "string",
"updated_at": "string",
"updated_by": "string"
},
"components": [
{
"component_type": "CUSTOM_JOURNEY_BLOCK",
"configuration": {
"override_dev_mode": {
"override_url": "http://localhost:3000"
},
"component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",
"component_tag": "string",
"component_args": [
{
"type": "text"
}
],
"component_size": 0,
"component_mapping": {}
}
}
],
"visibility": "private",
"public": false,
"pending": false,
"version": "string",
"is_beta": true,
"deprecated_at": "string",
"changelog": "string",
"review_status": "approved",
"role": {
"id": "string",
"grants": [
{
"action": "string",
"resource": "string"
}
]
},
"blueprint_ref": {
"manifest_id": "string",
"job_id": "string"
},
"version_audit": {
"created_at": "string",
"created_by": "string",
"updated_at": "string",
"updated_by": "string",
"versioned_at": "string",
"versioned_by": "string"
}
}
patchMetadataโ
Patch non-versioned configuration metadata of a given app configuration.
PATCH /v1/app-configurations/{appId}
const { data } = await client.patchMetadata(
{
appId: 'example',
},
{
name: 'string',
description: {
en: 'string',
de: 'string'
},
category: 'string',
documentation_url: 'string',
notifications: {
email: 'developer@example.com',
events: ['app.installed']
},
pricing: {
pricing_type: 'FREE',
billing_frequency: 'MONTHLY'
},
logo_url_key: 'string',
support_email: 'string',
dev_mode: true
},
)
deleteConfigurationโ
Delete app configuration
DELETE /v1/app-configurations/{appId}
const { data } = await client.deleteConfiguration({
appId: 'example',
})
queryEventsโ
Query analytics events for a specific app with flexible filtering
POST /v1/app-configurations/{appId}/events
const { data } = await client.queryEvents(
{
appId: 'example',
},
{
time_range: {
start: '1970-01-01T00:00:00.000Z',
end: '1970-01-01T00:00:00.000Z',
preset: '1h'
},
filters: {
source: ['CUSTOM_JOURNEY_BLOCK'],
component_id: ['string'],
event_type: ['ERROR'],
correlation_id: 'string'
},
aggregation: {
group_by: ['source'],
metrics: ['count']
},
pagination: {
page: 1,
page_size: 100
},
sort: {
field: 'timestamp',
order: 'desc'
}
},
)
Response
{
"query": {
"time_range": {
"start": "1970-01-01T00:00:00.000Z",
"end": "1970-01-01T00:00:00.000Z",
"preset": "1h"
},
"filters": {
"source": ["CUSTOM_JOURNEY_BLOCK"],
"component_id": ["string"],
"event_type": ["ERROR"],
"correlation_id": "string"
},
"aggregation": {
"group_by": ["source"],
"metrics": ["count"]
},
"pagination": {
"page": 1,
"page_size": 100
},
"sort": {
"field": "timestamp",
"order": "desc"
}
},
"results": {
"type": "raw",
"events": [
{
"app_id": "string",
"version": "string",
"event_id": "string",
"component_id": "string",
"timestamp": "string",
"correlation_id": "string",
"event_type": "ERROR",
"source": "CUSTOM_JOURNEY_BLOCK",
"actor": {
"org_id": "string",
"user_id": "string",
"type": "user"
},
"details": {}
}
]
},
"pagination": {
"page": 0,
"page_size": 0,
"total_items": 0,
"has_next": true
}
}
createBundleUploadUrlโ
Generate a presigned URL for uploading app bundle to /<app-id>/bundle.js path
POST /v1/app-configurations/{appId}/bundle
const { data } = await client.createBundleUploadUrl(
{
appId: 'example',
},
{
version: 'string',
component_id: 'string'
},
)
Response
{
"component_id": "string",
"component_url": "string",
"upload_url": "string",
"s3ref": {
"bucket": "my-bucket",
"key": "manifest.json"
},
"expires_at": "1970-01-01T00:00:00.000Z"
}
createZipUploadUrlโ
Generate a presigned URL to upload a zip file with artifacts that will be unpacked in a new directory under the /<app-id>/ path
POST /v1/app-configurations/{appId}/zip
const { data } = await client.createZipUploadUrl(
{
appId: 'example',
},
{
version: '1.0.0',
component_id: 'string',
filename: 'dist.zip'
},
)
Response
{
"component_id": "string",
"upload_url": "string",
"artifact_url": "string",
"s3ref": {
"bucket": "my-bucket",
"key": "manifest.json"
},
"expires_at": "1970-01-01T00:00:00.000Z"
}
createLogoUploadUrlโ
Generate a presigned URL for uploading app logo to /<app-id>/logo.png path
POST /v1/app-configurations/{appId}/logo
const { data } = await client.createLogoUploadUrl(
{
appId: 'example',
},
{
filename: 'company-logo.png',
mime_type: 'image/png'
},
)
Response
{
"upload_url": "string",
"s3ref": {
"bucket": "my-bucket",
"key": "manifest.json"
},
"expires_at": "1970-01-01T00:00:00.000Z"
}
deleteLogoโ
Delete the app logo from /<app-id>/logo.png path
DELETE /v1/app-configurations/{appId}/logo
const { data } = await client.deleteLogo({
appId: 'example',
})
listVersionsโ
Retrieve a list of versions for an app configuration
GET /v1/app-configurations/{appId}/versions
const { data } = await client.listVersions({
appId: 'example',
page: 1,
pageSize: 1,
})
Response
{
"versions": [
{
"app_id": "string",
"owner_org_id": "string",
"components": [
{
"component_type": "CUSTOM_JOURNEY_BLOCK",
"configuration": {
"override_dev_mode": {
"override_url": "http://localhost:3000"
},
"component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",
"component_tag": "string",
"component_args": [
{
"type": "text"
}
],
"component_size": 0,
"component_mapping": {}
}
}
],
"visibility": "private",
"public": false,
"pending": false,
"version": "string",
"is_beta": true,
"deprecated_at": "string",
"changelog": "string",
"review_status": "approved",
"role": {
"id": "string",
"grants": [
{
"action": "string",
"resource": "string"
}
]
},
"blueprint_ref": {
"manifest_id": "string",
"job_id": "string"
},
"version_audit": {
"created_at": "string",
"created_by": "string",
"updated_at": "string",
"updated_by": "string",
"versioned_at": "string",
"versioned_by": "string"
}
}
],
"pagination": {
"total": 0,
"page": 0,
"pageSize": 0
}
}
getVersionโ
Retrieve a specific version of an app configuration
GET /v1/app-configurations/{appId}/versions/{version}
const { data } = await client.getVersion({
appId: 'example',
version: 'example',
})
Response
{
"app_id": "string",
"name": "string",
"author": {
"name": "string",
"company": "string",
"email": "string"
},
"dev_mode": true,
"versions": ["string"],
"public_versions": ["string"],
"support_email": "string",
"latest_version": "string",
"category": "string",
"icon_url": "string",
"documentation_url": "string",
"description": {
"en": "string",
"de": "string"
},
"notifications": {
"email": "developer@example.com",
"events": ["app.installed"]
},
"owner_org_id": "string",
"internal": false,
"pricing": {
"pricing_type": "FREE",
"billing_frequency": "MONTHLY"
},
"configuration_audit": {
"created_at": "string",
"created_by": "string",
"updated_at": "string",
"updated_by": "string"
},
"components": [
{
"component_type": "CUSTOM_JOURNEY_BLOCK",
"configuration": {
"override_dev_mode": {
"override_url": "http://localhost:3000"
},
"component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",
"component_tag": "string",
"component_args": [
{
"type": "text"
}
],
"component_size": 0,
"component_mapping": {}
}
}
],
"visibility": "private",
"public": false,
"pending": false,
"version": "string",
"is_beta": true,
"deprecated_at": "string",
"changelog": "string",
"review_status": "approved",
"role": {
"id": "string",
"grants": [
{
"action": "string",
"resource": "string"
}
]
},
"blueprint_ref": {
"manifest_id": "string",
"job_id": "string"
},
"version_audit": {
"created_at": "string",
"created_by": "string",
"updated_at": "string",
"updated_by": "string",
"versioned_at": "string",
"versioned_by": "string"
}
}
deleteVersionโ
Delete a specific version of an app configuration
DELETE /v1/app-configurations/{appId}/versions/{version}
const { data } = await client.deleteVersion({
appId: 'example',
version: 'example',
})
patchVersionโ
Patch an existing app version
PATCH /v1/app-configurations/{appId}/versions/{version}
const { data } = await client.patchVersion(
{
appId: 'example',
version: 'example',
},
{
manifest_id: 'string',
role_id: 'string',
grants: [
{
action: 'string',
resource: 'string'
}
]
},
)
getReviewโ
Retrieve the review status of a specific app version
GET /v1/app-configurations/{appId}/versions/{version}/review
const { data } = await client.getReview({
appId: 'example',
version: 'example',
})
Response
{
"review": {
"version": "string",
"review_status": "approved",
"requested_at": "string",
"requested_by": "string",
"technical_contact": "string",
"marketing_contact": "string",
"demo_url": "string"
}
}
createReviewโ
Submit an app version for review to make it public
POST /v1/app-configurations/{appId}/versions/{version}/review
const { data } = await client.createReview(
{
appId: 'example',
version: 'example',
},
{
technical_contact: 'string',
marketing_contact: 'string',
demo_url: 'string'
},
)
Response
{
"review": {
"version": "string",
"review_status": "approved",
"requested_at": "string",
"requested_by": "string",
"technical_contact": "string",
"marketing_contact": "string",
"demo_url": "string"
}
}
createComponentโ
Patch an existing app version to create/add a component
POST /v1/app-configurations/{appId}/versions/{version}/components
const { data } = await client.createComponent(
{
appId: 'example',
version: 'example',
},
{
component_type: 'CUSTOM_JOURNEY_BLOCK',
configuration: {
override_dev_mode: {
override_url: 'http://localhost:3000'
},
component_url: 'https://cdn.apps.com/123/v1.0.0/bundle.js',
component_tag: 'string',
component_args: [
{
type: 'text'
}
],
component_size: 0,
component_mapping: {}
}
},
)
Response
{
"component": {
"component_type": "CUSTOM_JOURNEY_BLOCK",
"configuration": {
"override_dev_mode": {
"override_url": "http://localhost:3000"
},
"component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",
"component_tag": "string",
"component_args": [
{
"type": "text"
}
],
"component_size": 0,
"component_mapping": {}
}
}
}
patchComponentโ
Patch an existing app version to update its components
PATCH /v1/app-configurations/{appId}/versions/{version}/components/{componentId}
const { data } = await client.patchComponent(
{
appId: 'example',
version: 'example',
componentId: 'example',
},
{
component_type: 'CUSTOM_JOURNEY_BLOCK',
configuration: {
override_dev_mode: {
override_url: 'http://localhost:3000'
},
component_url: 'https://cdn.apps.com/123/v1.0.0/bundle.js',
component_tag: 'string',
component_args: [
{
type: 'text'
}
],
component_size: 0,
component_mapping: {}
}
},
)
deleteComponentโ
Delete a specific component from an app version
DELETE /v1/app-configurations/{appId}/versions/{version}/components/{componentId}
const { data } = await client.deleteComponent({
appId: 'example',
version: 'example',
componentId: 'example',
})
cloneVersionโ
Clone an existing app version to create a new version
POST /v1/app-configurations/{appId}/versions/{sourceVersion}/clone-to/{targetVersion}
const { data } = await client.cloneVersion({
appId: 'example',
sourceVersion: 'example',
targetVersion: 'example',
})
Response
{
"app_id": "string",
"version": "string",
"status": "pending"
}
listInstallationsโ
Retrieve a list of installed apps for the organization.
GET /v1/app
const { data } = await client.listInstallations({
componentType: 'example',
enabled: true,
page: 1,
pageSize: 1,
})
Response
{
"apps": [
{
"app_id": "string",
"installer_org_id": "string",
"owner_org_id": "string",
"enabled": true,
"name": "string",
"option_values": [
{
"component_id": "string",
"options": [
{
"key": "string",
"value": {}
}
]
}
],
"components": [
{
"component_type": "CUSTOM_JOURNEY_BLOCK",
"configuration": {
"override_dev_mode": {
"override_url": "http://localhost:3000"
},
"component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",
"component_tag": "string",
"component_args": [
{
"type": "text"
}
],
"component_size": 0,
"component_mapping": {}
}
}
],
"installed_version": "string",
"role": "string",
"blueprint_ref": {
"manifest_id": "string",
"job_id": "string"
},
"installation_audit": {
"created_at": "string",
"created_by": "string",
"updated_at": "string",
"updated_by": "string"
},
"_manifest": ["123e4567-e89b-12d3-a456-426614174000"]
}
],
"pagination": {
"total": 0,
"page": 0,
"pageSize": 0
}
}
getInstallationโ
Retrieve details of an installed app by its ID.
GET /v1/app/{appId}
const { data } = await client.getInstallation({
appId: 'example',
})
Response
{
"app_id": "string",
"installer_org_id": "string",
"owner_org_id": "string",
"enabled": true,
"name": "string",
"option_values": [
{
"component_id": "string",
"options": [
{
"key": "string",
"value": {}
}
]
}
],
"components": [
{
"component_type": "CUSTOM_JOURNEY_BLOCK",
"configuration": {
"override_dev_mode": {
"override_url": "http://localhost:3000"
},
"component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",
"component_tag": "string",
"component_args": [
{
"type": "text"
}
],
"component_size": 0,
"component_mapping": {}
}
}
],
"installed_version": "string",
"role": "string",
"blueprint_ref": {
"manifest_id": "string",
"job_id": "string"
},
"installation_audit": {
"created_at": "string",
"created_by": "string",
"updated_at": "string",
"updated_by": "string"
},
"_manifest": ["123e4567-e89b-12d3-a456-426614174000"]
}
installโ
Upsert app installation by its ID.
POST /v1/app/{appId}
const { data } = await client.install(
{
appId: 'example',
},
{
version: 'string',
option_values: [
{
component_id: 'string',
options: [
{
key: 'string',
value: {}
}
]
}
],
_manifest: ['123e4567-e89b-12d3-a456-426614174000']
},
)
Response
{
"app_id": "string",
"installer_org_id": "string",
"owner_org_id": "string",
"enabled": true,
"name": "string",
"option_values": [
{
"component_id": "string",
"options": [
{
"key": "string",
"value": {}
}
]
}
],
"components": [
{
"component_type": "CUSTOM_JOURNEY_BLOCK",
"configuration": {
"override_dev_mode": {
"override_url": "http://localhost:3000"
},
"component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",
"component_tag": "string",
"component_args": [
{
"type": "text"
}
],
"component_size": 0,
"component_mapping": {}
}
}
],
"installed_version": "string",
"role": "string",
"blueprint_ref": {
"manifest_id": "string",
"job_id": "string"
},
"installation_audit": {
"created_at": "string",
"created_by": "string",
"updated_at": "string",
"updated_by": "string"
},
"_manifest": ["123e4567-e89b-12d3-a456-426614174000"]
}
patchInstallationโ
Patch an installed app by its ID.
PATCH /v1/app/{appId}
const { data } = await client.patchInstallation(
{
appId: 'example',
},
{
version: 'string',
option_values: [
{
component_id: 'string',
options: [
{
key: 'string',
value: {}
}
]
}
],
_manifest: ['123e4567-e89b-12d3-a456-426614174000']
},
)
uninstallโ
Uninstall an app by its ID.
DELETE /v1/app/{appId}
const { data } = await client.uninstall({
appId: 'example',
})
promoteVersionโ
Update an installed app to a new version
POST /v1/app/{appId}/promote-to/{version}
const { data } = await client.promoteVersion({
appId: 'example',
version: 'example',
})
Response
{
"app_id": "string",
"installer_org_id": "string",
"owner_org_id": "string",
"enabled": true,
"name": "string",
"option_values": [
{
"component_id": "string",
"options": [
{
"key": "string",
"value": {}
}
]
}
],
"components": [
{
"component_type": "CUSTOM_JOURNEY_BLOCK",
"configuration": {
"override_dev_mode": {
"override_url": "http://localhost:3000"
},
"component_url": "https://cdn.apps.com/123/v1.0.0/bundle.js",
"component_tag": "string",
"component_args": [
{
"type": "text"
}
],
"component_size": 0,
"component_mapping": {}
}
}
],
"installed_version": "string",
"role": "string",
"blueprint_ref": {
"manifest_id": "string",
"job_id": "string"
},
"installation_audit": {
"created_at": "string",
"created_by": "string",
"updated_at": "string",
"updated_by": "string"
},
"_manifest": ["123e4567-e89b-12d3-a456-426614174000"]
}
ingestEventโ
Internal endpoint for services to submit app events for analytic purposes
POST /v1/app-events
const { data } = await client.ingestEvent(
null,
{
app_id: 'string',
version: 'string',
event_id: 'string',
component_id: 'string',
timestamp: 'string',
correlation_id: 'string',
event_type: 'ERROR',
source: 'CUSTOM_JOURNEY_BLOCK',
actor: {
org_id: 'string',
user_id: 'string',
type: 'user'
},
details: {}
},
)
Schemasโ
Roleโ
type Role = {
id?: string
grants?: Array<{
action: string
resource?: string
}>
}
Optionsโ
Options for the component configuration
type Options = {
key: string
label?: string
required?: boolean
description?: string
value?: unknown
type: "text" | "number" | "boolean" | "secret"
}
Optionโ
type Option = {
key: string
value: unknown
}
OptionsRefโ
type OptionsRef = {
component_id: string
options: Array<{
key: string
value: unknown
}>
}
S3Referenceโ
type S3Reference = {
bucket: string
key: string
}
ComponentTypeโ
Type of app component
type ComponentType = "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"
Authorโ
type Author = {
name?: string
company: string
email?: string
}
NotificationConfigโ
type NotificationConfig = {
email?: string // email
events?: "app.installed" | "app.uninstalled"[]
}
NotificationEventโ
type NotificationEvent = "app.installed" | "app.uninstalled"
BaseComponentCommonโ
type BaseComponentCommon = {
id: string
name?: {
en?: string
de: string
}
description?: {
en?: string
de: string
}
options?: Array<{
key: string
label?: string
required?: boolean
description?: string
value?: unknown
type: "text" | "number" | "boolean" | "secret"
}>
surfaces?: object
}
BaseComponentโ
type BaseComponent = {
id: string
name?: {
en?: string
de: string
}
description?: {
en?: string
de: string
}
options?: Array<{
key: string
label?: string
required?: boolean
description?: string
value?: unknown
type: "text" | "number" | "boolean" | "secret"
}>
surfaces?: object
}
CustomCapabilityComponentโ
type CustomCapabilityComponent = {
component_type: "CUSTOM_CAPABILITY"
configuration: {
type?: "tab" | "group"
allowed_schemas?: string[]
}
surfaces?: {
capability_config?: {
app_url?: { ... }
zip_url?: { ... }
override_url?: { ... }
}
}
}
CustomPageComponentโ
type CustomPageComponent = {
component_type: "CUSTOM_PAGE"
configuration: {
slug: string
nav_label?: string
nav_icon?: string
nav_description?: string
}
surfaces?: {
page?: {
app_url?: { ... }
zip_url?: { ... }
override_url?: { ... }
}
}
}
CustomPageConfigโ
type CustomPageConfig = {
slug: string
nav_label?: string
nav_icon?: string
nav_description?: string
}
JourneyBlockComponentโ
type JourneyBlockComponent = {
component_type: "CUSTOM_JOURNEY_BLOCK"
configuration: {
override_dev_mode?: {
override_url?: { ... }
}
component_url: string
component_tag: string
component_args?: Array<{
key: { ... }
type: { ... }
required?: { ... }
description?: { ... }
label: { ... }
}>
component_size?: number
component_mapping?: Record<string, "string" | "boolean" | "date" | "datetime" | "link" | "number">
}
}
PortalBlockComponentโ
type PortalBlockComponent = {
component_type: "CUSTOM_PORTAL_BLOCK"
configuration: object
surfaces?: {
portal_block?: {
app_url?: { ... }
zip_url?: { ... }
override_url?: { ... }
section?: { ... }
}
}
}
ErpInformToolkitComponentโ
type ErpInformToolkitComponent = {
component_type: "ERP_INFORM_TOOLKIT"
configuration: {
type: "inbound" | "outbound"
}
}
CustomFlowActionComponentโ
type CustomFlowActionComponent = {
component_type: "CUSTOM_FLOW_ACTION"
configuration: {
name?: string
description?: string
wait_for_callback?: boolean
type: "external_integration"
external_integration_settings?: {
url?: { ... }
headers?: { ... }
}
} | {
name?: string
description?: string
wait_for_callback?: boolean
type: "sandbox"
sandbox_settings?: {
code?: { ... }
}
}
surfaces?: {
flow_action_config?: {
app_url?: { ... }
zip_url?: { ... }
override_url?: { ... }
}
}
}
BaseCustomActionConfigโ
type BaseCustomActionConfig = {
name?: string
description?: string
wait_for_callback?: boolean
}
ExternalIntegrationCustomActionConfigโ
type ExternalIntegrationCustomActionConfig = {
name?: string
description?: string
wait_for_callback?: boolean
type: "external_integration"
external_integration_settings?: {
url?: string
headers?: Record<string, unknown>
}
}
SandboxCustomActionConfigโ
type SandboxCustomActionConfig = {
name?: string
description?: string
wait_for_callback?: boolean
type: "sandbox"
sandbox_settings?: {
code?: string
}
}
CustomFlowConfigโ
type CustomFlowConfig = {
name?: string
description?: string
wait_for_callback?: boolean
type: "external_integration"
external_integration_settings?: {
url?: string
headers?: Record<string, unknown>
}
} | {
name?: string
description?: string
wait_for_callback?: boolean
type: "sandbox"
sandbox_settings?: {
code?: string
}
}
ExternalProductCatalogComponentโ
type ExternalProductCatalogComponent = {
component_type: "EXTERNAL_PRODUCT_CATALOG"
configuration: {
hooks?: Array<{
id: { ... }
name?: { ... }
type: { ... }
auth?: { ... }
call: { ... }
} | {
id: { ... }
name?: { ... }
type: { ... }
auth?: { ... }
call: { ... }
}>
}
}
ExternalProductCatalogConfigโ
type ExternalProductCatalogConfig = {
hooks?: Array<{
id: string
name?: {
en?: { ... }
de: { ... }
}
type: "products"
auth?: {
method?: { ... }
url: { ... }
params?: { ... }
headers?: { ... }
body?: { ... }
}
call: {
method?: { ... }
url: { ... }
params?: { ... }
headers?: { ... }
body?: { ... }
}
} | {
id: string
name?: {
en?: { ... }
de: { ... }
}
type: "product-recommendations"
auth?: {
method?: { ... }
url: { ... }
params?: { ... }
headers?: { ... }
body?: { ... }
}
call: {
method?: { ... }
url: { ... }
params?: { ... }
headers?: { ... }
body?: { ... }
}
}>
}
ExternalProductCatalogHookProductsโ
Hook 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.
type ExternalProductCatalogHookProducts = {
id: string
name?: {
en?: string
de: string
}
type: "products"
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
}
call: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
}
}
ExternalProductCatalogHookProductRecommendationsโ
Hook 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.
type ExternalProductCatalogHookProductRecommendations = {
id: string
name?: {
en?: string
de: string
}
type: "product-recommendations"
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
}
call: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
}
}
PortalExtensionComponentโ
type PortalExtensionComponent = {
component_type: "PORTAL_EXTENSION"
configuration: {
hooks?: Array<{
id: { ... }
name?: { ... }
type: { ... }
auth?: { ... }
call: { ... }
use_static_ips?: { ... }
} | {
id: { ... }
name?: { ... }
type: { ... }
auth?: { ... }
call: { ... }
assignment_mode?: { ... }
contact_relation_attribute?: { ... }
explanation?: { ... }
use_static_ips?: { ... }
} | {
id: { ... }
name?: { ... }
type: { ... }
intervals?: { ... }
auth?: { ... }
call: { ... }
resolved?: { ... }
use_static_ips?: { ... }
} | {
id: { ... }
name?: { ... }
type: { ... }
intervals?: { ... }
auth?: { ... }
call: { ... }
resolved?: { ... }
use_static_ips?: { ... }
} | {
id: { ... }
name?: { ... }
type: { ... }
intervals?: { ... }
auth?: { ... }
call: { ... }
resolved?: { ... }
use_static_ips?: { ... }
} | {
id: { ... }
name?: { ... }
type: { ... }
plausibility_mode?: { ... }
auth?: { ... }
call: { ... }
resolved: { ... }
use_static_ips?: { ... }
}>
links?: Array<{
id: { ... }
name: { ... }
description?: { ... }
type: { ... }
condition?: { ... }
auth?: { ... }
redirect: { ... }
}>
}
}
PortalExtensionConfigโ
type PortalExtensionConfig = {
hooks?: Array<{
id: string
name?: {
en?: { ... }
de: { ... }
}
type: "registrationIdentifiersCheck"
auth?: {
method?: { ... }
url: { ... }
params?: { ... }
headers?: { ... }
body?: { ... }
cache?: { ... }
}
call: {
method?: { ... }
url: { ... }
params?: { ... }
headers: { ... }
body?: { ... }
result: { ... }
}
use_static_ips?: boolean
} | {
id: string
name?: {
en?: { ... }
de: { ... }
}
type: "contractIdentification"
auth?: {
method?: { ... }
url: { ... }
params?: { ... }
headers?: { ... }
body?: { ... }
cache?: { ... }
}
call: {
method?: { ... }
url: { ... }
params?: { ... }
headers: { ... }
body?: { ... }
result?: { ... }
}
assignment_mode?: "contracts" | "contact_to_contracts" | "contact_to_portal_user"
contact_relation_attribute?: string
explanation?: {
en: { ... }
}
use_static_ips?: boolean
} | {
id: string
name?: {
en?: { ... }
de: { ... }
}
type: "priceDataRetrieval"
intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]
auth?: {
method?: { ... }
url: { ... }
params?: { ... }
headers?: { ... }
body?: { ... }
cache?: { ... }
}
call: {
method?: { ... }
url: { ... }
params?: { ... }
headers?: { ... }
body?: { ... }
}
resolved?: {
dataPath?: { ... }
}
use_static_ips?: boolean
} | {
id: string
name?: {
en?: { ... }
de: { ... }
}
type: "consumptionDataRetrieval"
intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]
auth?: {
method?: { ... }
url: { ... }
params?: { ... }
headers?: { ... }
body?: { ... }
cache?: { ... }
}
call: {
method?: { ... }
url: { ... }
// ...
}
PortalExtensionHookRegistrationIdentifiersCheckโ
Hook 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:
- 200 with contact id if exactly one contact is found
- 404 if no contact is found or more th
type PortalExtensionHookRegistrationIdentifiersCheck = {
id: string
name?: {
en?: string
de: string
}
type: "registrationIdentifiersCheck"
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
cache?: {
key: { ... }
ttl: { ... }
}
}
call: {
method?: string
url: string
params?: Record<string, string>
headers: Record<string, string>
body?: object
result: string
}
use_static_ips?: boolean
}
PortalExtensionHookContractIdentificationโ
Hook 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). The expected response http status code to the call is:
- 200 if found
- 404 if not found
The following assignment modes are suppo
type PortalExtensionHookContractIdentification = {
id: string
name?: {
en?: string
de: string
}
type: "contractIdentification"
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
cache?: {
key: { ... }
ttl: { ... }
}
}
call: {
method?: string
url: string
params?: Record<string, string>
headers: Record<string, string>
body?: object
result?: string
}
assignment_mode?: "contracts" | "contact_to_contracts" | "contact_to_portal_user"
contact_relation_attribute?: string
explanation?: {
en: string
}
use_static_ips?: boolean
}
PortalExtensionHookMeterReadingPlausibilityCheckโ
Hook 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:
- 200:
If meter reading is plausible, the response should contain:
- valid: true If meter re
type PortalExtensionHookMeterReadingPlausibilityCheck = {
id: string
name?: {
en?: string
de: string
}
type: "meterReadingPlausibilityCheck"
plausibility_mode?: "check" | "range"
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
cache?: {
key: { ... }
ttl: { ... }
}
}
call: {
url: string
body: Record<string, unknown>
headers: Record<string, string>
}
resolved: {
dataPath?: string
counter_identifiers?: Record<string, string>
valid?: string
upper_limit?: string
lower_limit?: string
}
use_static_ips?: boolean
}
PortalExtensionHookPriceDataRetrievalโ
Hook 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:
- 200 with the time series data
type PortalExtensionHookPriceDataRetrieval = {
id: string
name?: {
en?: string
de: string
}
type: "priceDataRetrieval"
intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
cache?: {
key: { ... }
ttl: { ... }
}
}
call: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
}
resolved?: {
dataPath?: string
}
use_static_ips?: boolean
}
PortalExtensionHookConsumptionDataRetrievalโ
Hook 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:
- 200 with the time series data
type PortalExtensionHookConsumptionDataRetrieval = {
id: string
name?: {
en?: string
de: string
}
type: "consumptionDataRetrieval"
intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
cache?: {
key: { ... }
ttl: { ... }
}
}
call: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
}
resolved?: {
dataPath?: string
}
use_static_ips?: boolean
}
PortalExtensionHookCostDataRetrievalโ
Hook 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:
- 200 with the time series data
type PortalExtensionHookCostDataRetrieval = {
id: string
name?: {
en?: string
de: string
}
type: "costDataRetrieval"
intervals?: "PT15M" | "PT1H" | "P1D" | "P1M"[]
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
cache?: {
key: { ... }
ttl: { ... }
}
}
call: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
}
resolved?: {
dataPath?: string
}
use_static_ips?: boolean
}
PortalExtensionSeamlessLinkโ
type PortalExtensionSeamlessLink = {
id: string
name: {
en?: string
de: string
}
description?: {
en?: string
de: string
}
type: "seamless"
condition?: string
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
cache?: {
key: { ... }
ttl: { ... }
}
}
redirect: {
url?: string
params?: Record<string, string>
}
}
PortalExtensionAuthBlockโ
type PortalExtensionAuthBlock = {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
cache?: {
key: string
ttl: string
}
}
ExternalProductCatalogAuthBlockโ
type ExternalProductCatalogAuthBlock = {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, unknown>
}
OverrideDevModeโ
Override URL when app is in dev mode
type OverrideDevMode = {
override_url?: string
}
JourneyBlockConfigโ
type JourneyBlockConfig = {
override_dev_mode?: {
override_url?: string
}
component_url: string
component_tag: string
component_args?: Array<{
key: string
type: "text" | "boolean" | "enum"
required?: boolean
description?: {
en?: { ... }
de: { ... }
}
label: {
en?: { ... }
de: { ... }
}
}>
component_size?: number
component_mapping?: Record<string, "string" | "boolean" | "date" | "datetime" | "link" | "number">
}
PortalBlockConfigโ
type PortalBlockConfig = object
AppBridgeSurfaceConfigโ
type AppBridgeSurfaceConfig = {
app_url?: string
zip_url?: string
override_url?: string
}
PortalBlockSurfaceConfigโ
type PortalBlockSurfaceConfig = {
app_url?: string
zip_url?: string
override_url?: string
section?: "main" | "footer"
}
JourneyBlockComponentArgsโ
type JourneyBlockComponentArgs = {
key: string
type: "text" | "boolean" | "enum"
required?: boolean
description?: {
en?: string
de: string
}
label: {
en?: string
de: string
}
}
TextArgโ
type TextArg = {
type?: "text"
}
BooleanArgโ
type BooleanArg = {
type?: "boolean"
}
EnumArgโ
type EnumArg = {
type?: "enum"
isMulti?: boolean
options: Array<{
id: string
label: {
en?: { ... }
de: { ... }
}
}>
}
BillingFrequencyโ
How often the subscription is billed
type BillingFrequency = "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"
Pricingโ
type Pricing = {
pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"
billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"
}
Auditโ
type Audit = {
created_at?: string
created_by?: string
updated_at?: string
updated_by?: string
}
Reviewโ
type Review = {
version?: string
review_status?: "approved" | "rejected" | "pending"
requested_at?: string
requested_by?: string
technical_contact?: string
marketing_contact?: string
demo_url?: string
}
ConfigurationMetadataโ
Basic metadata about your app configuration which does not get versioned
type ConfigurationMetadata = {
app_id: string
name: string
author?: {
name?: string
company: string
email?: string
}
dev_mode?: boolean
versions: string[]
public_versions?: string[]
support_email?: string
latest_version: string
category?: string
icon_url?: string
documentation_url?: string
description: {
en?: string
de: string
}
notifications?: {
email?: string // email
events?: "app.installed" | "app.uninstalled"[]
}
owner_org_id: string
internal?: boolean
pricing?: {
pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"
billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"
}
configuration_audit?: {
created_at?: string
created_by?: string
updated_at?: string
updated_by?: string
}
}
ConfigurationVersionโ
Configuration data about your app which is versionable
type ConfigurationVersion = {
app_id: string
owner_org_id: string
components: Array<{
id: string
name?: {
en?: { ... }
de: { ... }
}
description?: {
en?: { ... }
de: { ... }
}
options?: Array<{
key: { ... }
label?: { ... }
required?: { ... }
description?: { ... }
value?: { ... }
type: { ... }
}>
surfaces?: object
}>
visibility?: "public" | "private"
public?: boolean
pending?: boolean
version: string
is_beta?: boolean
deprecated_at?: string
changelog?: string
review_status?: "approved" | "rejected" | "pending"
role?: {
id?: string
grants?: Array<{
action: { ... }
resource?: { ... }
}>
}
blueprint_ref?: {
manifest_id?: string
job_id?: string
}
version_audit: {
created_at?: string
created_by?: string
updated_at?: string
updated_by?: string
versioned_at?: string
versioned_by?: string
}
}
Grantsโ
Required grants for the app in order to call APIs for the installing tenant
type Grants = Array<{
action: string
resource?: string
}>
BlueprintRefโ
type BlueprintRef = {
manifest_id?: string
job_id?: string
}
Installationโ
Information about the installed app. Has configuration data of the installed version
type Installation = {
app_id: string
installer_org_id: string
owner_org_id?: string
enabled: boolean
name: string
option_values?: Array<{
component_id: string
options: Array<{
key: { ... }
value: { ... }
}>
}>
components: Array<{
id: string
name?: {
en?: { ... }
de: { ... }
}
description?: {
en?: { ... }
de: { ... }
}
options?: Array<{
key: { ... }
label?: { ... }
required?: { ... }
description?: { ... }
value?: { ... }
type: { ... }
}>
surfaces?: object
}>
installed_version: string
role?: string
blueprint_ref?: {
manifest_id?: string
job_id?: string
}
installation_audit?: {
created_at?: string
created_by?: string
updated_at?: string
updated_by?: string
}
_manifest?: string // uuid[]
}
PublicConfigurationโ
Public configuration of the published app
type PublicConfiguration = {
app_id: string
support_email?: string
owner_org_id: string
name: string
author?: {
name?: string
company: string
email?: string
}
dev_mode?: boolean
category?: string
icon_url?: string
documentation_url?: string
description?: {
en?: string
de: string
}
pricing?: {
pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"
billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"
}
components: Array<{
id: string
name?: {
en?: { ... }
de: { ... }
}
description?: {
en?: { ... }
de: { ... }
}
options?: Array<{
key: { ... }
label?: { ... }
required?: { ... }
description?: { ... }
value?: { ... }
type: { ... }
}>
surfaces?: object
}>
is_beta?: boolean
deprecated_at?: string
version: string
role?: {
id?: string
grants?: Array<{
action: { ... }
resource?: { ... }
}>
}
blueprint_ref?: {
manifest_id?: string
job_id?: string
}
latest_version?: string
public?: boolean
versions?: Array<{
app_id: string
owner_org_id: string
components: Array<{
id: { ... }
name?: { ... }
description?: { ... }
options?: { ... }
surfaces?: { ... }
}>
visibility?: "public" | "private"
public?: boolean
pending?: boolean
version: string
is_beta?: boolean
deprecated_at?: string
changelog?: string
review_status?: "approved" | "rejected" | "pending"
role?: {
id?: { ... }
grants?: { ... }
}
blueprint_ref?: {
manifest_id?: { ... }
job_id?: { ... }
}
version_audit: {
created_at?: { ... }
created_by?: { ... }
updated_at?: { ... }
updated_by?: { ... }
versioned_at?: { ... }
versioned_by?: { ... }
}
}>
}
Configurationโ
Configuration of the published app
type Configuration = {
app_id: string
name: string
author?: {
name?: string
company: string
email?: string
}
dev_mode?: boolean
versions: string[]
public_versions?: string[]
support_email?: string
latest_version: string
category?: string
icon_url?: string
documentation_url?: string
description: {
en?: string
de: string
}
notifications?: {
email?: string // email
events?: "app.installed" | "app.uninstalled"[]
}
owner_org_id: string
internal?: boolean
pricing?: {
pricing_type?: "FREE" | "SUBSCRIPTION" | "USAGE_BASED" | "ONE_TIME" | "CUSTOM" | "UNKNOWN"
billing_frequency?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "CUSTOM"
}
configuration_audit?: {
created_at?: string
created_by?: string
updated_at?: string
updated_by?: string
}
components: Array<{
id: string
name?: {
en?: { ... }
de: { ... }
}
description?: {
en?: { ... }
de: { ... }
}
options?: Array<{
key: { ... }
label?: { ... }
required?: { ... }
description?: { ... }
value?: { ... }
type: { ... }
}>
surfaces?: object
}>
visibility?: "public" | "private"
public?: boolean
pending?: boolean
version: string
is_beta?: boolean
deprecated_at?: string
changelog?: string
review_status?: "approved" | "rejected" | "pending"
role?: {
id?: string
grants?: Array<{
action: { ... }
resource?: { ... }
}>
}
blueprint_ref?: {
manifest_id?: string
job_id?: string
}
version_audit: {
created_at?: string
created_by?: string
updated_at?: string
updated_by?: string
versioned_at?: string
versioned_by?: string
}
}
TranslatedStringโ
type TranslatedString = {
en?: string
de: string
}
CallerIdentityโ
type CallerIdentity = {
name?: unknown
org_id: string
user_id?: string
token_id?: string
}
BatchEventRequestโ
type BatchEventRequest = {
events: Array<{
app_id: string
version: string
event_id?: string
component_id: string
timestamp?: string
correlation_id?: string
event_type: "ERROR" | "WARNING" | "INFO"
source: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"
actor: {
org_id?: { ... }
user_id?: { ... }
type: { ... }
}
details?: Record<string, unknown>
}>
}
Actorโ
type Actor = {
org_id?: string
user_id?: string
type: "user" | "system"
}
AppEventDataโ
type AppEventData = {
app_id: string
version: string
event_id?: string
component_id: string
timestamp?: string
correlation_id?: string
event_type: "ERROR" | "WARNING" | "INFO"
source: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"
actor: {
org_id?: string
user_id?: string
type: "user" | "system"
}
details?: Record<string, unknown>
}
EventsQueryโ
type EventsQuery = {
time_range?: {
start?: string // date-time
end?: string // date-time
preset?: "1h" | "6h" | "24h" | "7d" | "30d"
}
filters?: {
source?: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"[]
component_id?: string[]
event_type?: "ERROR" | "WARNING" | "INFO"[]
correlation_id?: string
}
aggregation?: {
group_by?: "source" | "component_id" | "event_type" | "hour" | "day"[]
metrics?: "count" | "error_rate" | "unique_users"[]
}
pagination?: {
page?: number
page_size?: number
}
sort?: {
field?: "timestamp" | "event_type" | "component_id"
order?: "asc" | "desc"
}
}
EventsQueryResponseโ
type EventsQueryResponse = {
query?: {
time_range?: {
start?: { ... }
end?: { ... }
preset?: { ... }
}
filters?: {
source?: { ... }
component_id?: { ... }
event_type?: { ... }
correlation_id?: { ... }
}
aggregation?: {
group_by?: { ... }
metrics?: { ... }
}
pagination?: {
page?: { ... }
page_size?: { ... }
}
sort?: {
field?: { ... }
order?: { ... }
}
}
results?: {
type?: "raw"
events?: Array<{
app_id: { ... }
version: { ... }
event_id?: { ... }
component_id: { ... }
timestamp?: { ... }
correlation_id?: { ... }
event_type: { ... }
source: { ... }
actor: { ... }
details?: { ... }
}>
} | {
type?: "aggregated"
groups?: Array<{
dimensions?: { ... }
metrics?: { ... }
}>
}
pagination?: {
page?: number
page_size?: number
total_items?: number
has_next?: boolean
}
}
RawEventsโ
type RawEvents = {
type?: "raw"
events?: Array<{
app_id: string
version: string
event_id?: string
component_id: string
timestamp?: string
correlation_id?: string
event_type: "ERROR" | "WARNING" | "INFO"
source: "CUSTOM_JOURNEY_BLOCK" | "CUSTOM_PORTAL_BLOCK" | "PORTAL_EXTENSION" | "CUSTOM_FLOW_ACTION" | "ERP_INFORM_TOOLKIT" | "CUSTOM_CAPABILITY" | "EXTERNAL_PRODUCT_CATALOG" | "CUSTOM_PAGE"
actor: {
org_id?: { ... }
user_id?: { ... }
type: { ... }
}
details?: Record<string, unknown>
}>
}
AggregatedEventsโ
type AggregatedEvents = {
type?: "aggregated"
groups?: Array<{
dimensions?: Record<string, unknown>
metrics?: {
count?: { ... }
error_rate?: { ... }
}
}>
}