Skip to main content

Portal API

Usageโ€‹

import { epilot } from '@epilot/sdk'

epilot.authorize(() => '<token>')
const { data } = await epilot.customerPortal.upsertPortal(...)

Tree-shakeable importโ€‹

import { getClient, authorize } from '@epilot/sdk/customer-portal'

const customerPortalClient = getClient()
authorize(customerPortalClient, () => '<token>')
const { data } = await customerPortalClient.upsertPortal(...)

Operationsโ€‹

ECP Admin

Public

ECP

Activity

Balance

Billing Accounts

Login

Schemas

upsertPortalโ€‹

Upserts the settings for a portal of an organization.

POST /v2/portal/portal

const { data } = await client.upsertPortal(
{
origin: 'example',
portal_id: 'example',
},
{
entity_actions: [
{
journey_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
slug: 'contact',
action_Label: { /* ... */ }
}
],
extensions: [
{
id: 'string',
status: 'installed',
options: {}
}
],
extension_hooks: {},
default_user_to_notify: {
onPendingUser: [
{ /* ... */ }
]
},
enabled: true,
name: 'Installer Portal',
domain: 'abc.com',
is_epilot_domain: true,
epilot_domain: 'example-portal-12345.ecp.epilot.cloud',
domain_settings: {
is_custom_domain_enabled: true,
is_epilot_domain_enabled: true,
is_redirection_enabled: true
},
design_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
self_registration_setting: 'ALLOW_WITH_CONTACT_CREATION',
user_account_self_management: false,
feature_settings: {
start_page: true,
billing: true,
change_due_date: true,
new_design: true
},
accessToken: 'string',
advanced_mfa: {
enabled: true
},
auth_settings: {
passwordless_login: {
enabled: true
},
entry_point: 'PASSWORD',
preferred_sso_providers: ['office-365-login'],
auto_redirect_to_sso: true
},
cognito_details: {
cognito_user_pool_client_id: '6bsd0jkgoie74k2i8mrhc1vest',
cognito_user_pool_arn: 'arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341',
cognito_user_pool_id: 'eu-central-1_CUEQRNbUb',
password_policy: {
minimum_length: 8,
maximum_length: 256,
require_lowercase: true,
require_uppercase: true,
require_numbers: true,
require_symbols: true
}
},
config: 'string',
contact_identifiers: ['email', 'last_name'],
approval_state_attributes: {
contact: ['name', 'address'],
contract: ['installment_amount']
},
email_templates: {
confirmAccount: '5da0a718-c822-403d-9f5d-20d4584e0528',
advancedAuth: '5da0a718-c822-403d-9f5d-20d4584e0528',
advancedMFA: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeySignUp: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeySignInOneTimePassword: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeyLoginOTP: '5da0a718-c822-403d-9f5d-20d4584e0528',
forgotPassword: '5da0a718-c822-403d-9f5d-20d4584e0528',
invitation: '5da0a718-c822-403d-9f5d-20d4584e0528',
partnerInvitation: '5da0a718-c822-403d-9f5d-20d4584e0528',
onNewQuote: '5da0a718-c822-403d-9f5d-20d4584e0528',
onMapAPendingUser: '5da0a718-c822-403d-9f5d-20d4584e0528',
onDocUpload: '5da0a718-c822-403d-9f5d-20d4584e0528',
onWorkflowStepAssigned: '5da0a718-c822-403d-9f5d-20d4584e0528',
confirmEmailUpdate: '5da0a718-c822-403d-9f5d-20d4584e0528',
verifyCodeToSetPassword: '5da0a718-c822-403d-9f5d-20d4584e0528'
},
images: {
orderLeftTeaser: 'https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg',
orderRightTeaser: 'https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg',
welcomeBanner: 'https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg'
},
entity_identifiers: {
type: {
isEnabled: true,
attributes: ['contract_number']
}
},
contract_identifiers: [
{
name: 'email',
schema: 'contact'
},
{
name: 'last_name',
schema: 'contact'
},
/* ... 1 more */
],
contract_selector_config: {
show_inactive: true,
title_path: 'string'
},
registration_identifiers: [
{
name: 'last_name',
schema: 'contact'
},
{
name: 'contract_number',
schema: 'contract'
}
],
triggered_journeys: [
{
trigger_name: 'FIRST_LOGIN',
journey_id: '5da0a718-c822-403d-9f5d-20d4584e0528'
}
],
entity_edit_rules: [
{
slug: 'contact',
attribute: 'first_name',
rule_type: 'cadence',
cadence_period_type: 'days',
cadence_period: 1,
changes_allowed: 1,
grace_period: 1,
allowed_increment: '10%',
allowed_decrement: '10%',
number_of_days_before_restriction: 10
}
],
allowed_file_extensions: {
document: ['pdf'],
image: ['jpg'],
spreadsheet: ['xls'],
presentation: ['ppt'],
audioVideo: ['mp4'],
email: ['eml'],
archive: ['zip'],
cad: ['cad'],
calendar: ['ics'],
other: ['txt']
},
prevent_search_engine_indexing: true,
meter_reading_grace_period: 0,
inactive_contract_cutoff_years: 0,
is_dummy: true,
is_v3_item: true,
portal_id: '453ad7bf-86d5-46c8-8252-bcc868df5e3c',
portal_sk_v3: 'PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c',
origin: 'string',
pages: {}
},
)
Response
{
"enabled": true,
"name": "Installer Portal",
"domain": "abc.com",
"is_epilot_domain": true,
"epilot_domain": "example-portal-12345.ecp.epilot.cloud",
"domain_settings": {
"is_custom_domain_enabled": true,
"is_epilot_domain_enabled": true,
"is_redirection_enabled": true
},
"design_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"self_registration_setting": "ALLOW_WITH_CONTACT_CREATION",
"user_account_self_management": false,
"feature_settings": {
"start_page": true,
"billing": true,
"change_due_date": true,
"new_design": true
},
"accessToken": "string",
"advanced_mfa": {
"enabled": true
},
"auth_settings": {
"passwordless_login": {
"enabled": true
},
"entry_point": "PASSWORD",
"preferred_sso_providers": ["office-365-login"],
"auto_redirect_to_sso": true
},
"cognito_details": {
"cognito_user_pool_client_id": "6bsd0jkgoie74k2i8mrhc1vest",
"cognito_user_pool_arn": "arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341",
"cognito_user_pool_id": "eu-central-1_CUEQRNbUb",
"password_policy": {
"minimum_length": 8,
"maximum_length": 256,
"require_lowercase": true,
"require_uppercase": true,
"require_numbers": true,
"require_symbols": true
}
},
"config": "string",
"contact_identifiers": ["email", "last_name"],
"approval_state_attributes": {
"contact": ["name", "address"],
"contract": ["installment_amount"]
},
"email_templates": {
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
},
"images": {
"orderLeftTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg",
"orderRightTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg",
"welcomeBanner": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg"
},
"entity_identifiers": {
"type": {
"isEnabled": true,
"attributes": ["contract_number"]
}
},
"contract_identifiers": [
{
"name": "email",
"schema": "contact"
},
{
"name": "last_name",
"schema": "contact"
}
],
"contract_selector_config": {
"show_inactive": true,
"title_path": "string"
},
"registration_identifiers": [
{
"name": "last_name",
"schema": "contact"
},
{
"name": "contract_number",
"schema": "contract"
}
],
"triggered_journeys": [
{
"trigger_name": "FIRST_LOGIN",
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
],
"entity_edit_rules": [
{
"slug": "contact",
"attribute": "first_name",
"rule_type": "cadence",
"cadence_period_type": "days",
"cadence_period": 1,
"changes_allowed": 1,
"grace_period": 1,
"allowed_increment": "10%",
"allowed_decrement": "10%",
"number_of_days_before_restriction": 10
}
],
"allowed_file_extensions": {
"document": ["pdf"],
"image": ["jpg"],
"spreadsheet": ["xls"],
"presentation": ["ppt"],
"audioVideo": ["mp4"],
"email": ["eml"],
"archive": ["zip"],
"cad": ["cad"],
"calendar": ["ics"],
"other": ["txt"]
},
"prevent_search_engine_indexing": true,
"meter_reading_grace_period": 0,
"inactive_contract_cutoff_years": 0,
"is_dummy": true,
"is_v3_item": true,
"portal_id": "453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"portal_sk_v3": "PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"origin": "string",
"pages": {},
"id": 12345,
"organization_id": 12345,
"org_settings": {
"canary": {
"enabled": true
},
"notracking": {
"enabled": true
}
},
"feature_flags": {},
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947",
"effect": "allow"
}
],
"identity_providers": [
{
"slug": "office-365-login",
"display_name": "Office 365 Login",
"oidc_config": {},
"mobile_oidc_config": {}
}
]
}

createUserโ€‹

Registers a portal user

POST /v2/portal/public/user

const { data } = await client.createUser(
{
origin: 'example',
},
{
email: 'testemail921@yopmail.com',
first_name: 'John',
last_name: 'Doe',
contactId: '5da0a718-c822-403d-9f5d-20d4584e0528',
orgId: 728,
password: '124n$aAJs*d41h4',
contactIdentifiers: {},
registration_identifiers: {
contact: {
email: 'john.doe@example.com'
},
contract: {
contract_number: '123456'
}
},
account_id: 'string'
},
)
Response
{
"message": "User created successfully"
}

createUserV3โ€‹

Registers a portal user with portal id

POST /v3/portal/public/user

const { data } = await client.createUserV3(
{
portal_id: 'example',
},
{
email: 'testemail921@yopmail.com',
first_name: 'John',
last_name: 'Doe',
contactId: '5da0a718-c822-403d-9f5d-20d4584e0528',
orgId: 728,
password: '124n$aAJs*d41h4',
contactIdentifiers: {},
registration_identifiers: {
contact: {
email: 'john.doe@example.com'
},
contract: {
contract_number: '123456'
}
},
account_id: 'string'
},
)
Response
{
"message": "User created successfully"
}

validateTokenโ€‹

Validates Portal Token is valid. Pass the token via Authorization Header.

POST /v2/portal/token/validate

const { data } = await client.validateToken()

revokeTokenโ€‹

Revokes all of the access tokens for the given Refresh Token.

POST /v2/portal/token/revoke

const { data } = await client.revokeToken(
null,
{
refresh_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
},
)
Response
{
"message": "Token revoked successfully"
}

getPortalConfigByDomainโ€‹

Retrieves the portal configuration by domain.

GET /v2/portal/public/config

const { data } = await client.getPortalConfigByDomain({
domain: 'example',
})
Response
{
"enabled": true,
"name": "Installer Portal",
"domain": "abc.com",
"is_epilot_domain": true,
"epilot_domain": "example-portal-12345.ecp.epilot.cloud",
"domain_settings": {
"is_custom_domain_enabled": true,
"is_epilot_domain_enabled": true,
"is_redirection_enabled": true
},
"design_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"self_registration_setting": "ALLOW_WITH_CONTACT_CREATION",
"user_account_self_management": false,
"feature_settings": {
"start_page": true,
"billing": true,
"change_due_date": true,
"new_design": true
},
"accessToken": "string",
"advanced_mfa": {
"enabled": true
},
"auth_settings": {
"passwordless_login": {
"enabled": true
},
"entry_point": "PASSWORD",
"preferred_sso_providers": ["office-365-login"],
"auto_redirect_to_sso": true
},
"cognito_details": {
"cognito_user_pool_client_id": "6bsd0jkgoie74k2i8mrhc1vest",
"cognito_user_pool_arn": "arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341",
"cognito_user_pool_id": "eu-central-1_CUEQRNbUb",
"password_policy": {
"minimum_length": 8,
"maximum_length": 256,
"require_lowercase": true,
"require_uppercase": true,
"require_numbers": true,
"require_symbols": true
}
},
"config": "string",
"contact_identifiers": ["email", "last_name"],
"approval_state_attributes": {
"contact": ["name", "address"],
"contract": ["installment_amount"]
},
"email_templates": {
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
},
"images": {
"orderLeftTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg",
"orderRightTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg",
"welcomeBanner": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg"
},
"entity_identifiers": {
"type": {
"isEnabled": true,
"attributes": ["contract_number"]
}
},
"contract_identifiers": [
{
"name": "email",
"schema": "contact"
},
{
"name": "last_name",
"schema": "contact"
}
],
"contract_selector_config": {
"show_inactive": true,
"title_path": "string"
},
"registration_identifiers": [
{
"name": "last_name",
"schema": "contact"
},
{
"name": "contract_number",
"schema": "contract"
}
],
"triggered_journeys": [
{
"trigger_name": "FIRST_LOGIN",
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
],
"entity_edit_rules": [
{
"slug": "contact",
"attribute": "first_name",
"rule_type": "cadence",
"cadence_period_type": "days",
"cadence_period": 1,
"changes_allowed": 1,
"grace_period": 1,
"allowed_increment": "10%",
"allowed_decrement": "10%",
"number_of_days_before_restriction": 10
}
],
"allowed_file_extensions": {
"document": ["pdf"],
"image": ["jpg"],
"spreadsheet": ["xls"],
"presentation": ["ppt"],
"audioVideo": ["mp4"],
"email": ["eml"],
"archive": ["zip"],
"cad": ["cad"],
"calendar": ["ics"],
"other": ["txt"]
},
"prevent_search_engine_indexing": true,
"meter_reading_grace_period": 0,
"inactive_contract_cutoff_years": 0,
"is_dummy": true,
"is_v3_item": true,
"portal_id": "453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"portal_sk_v3": "PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"origin": "string",
"pages": {},
"id": 12345,
"organization_id": 12345,
"org_settings": {
"canary": {
"enabled": true
},
"notracking": {
"enabled": true
}
},
"feature_flags": {},
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947",
"effect": "allow"
}
],
"identity_providers": [
{
"slug": "office-365-login",
"display_name": "Office 365 Login",
"oidc_config": {},
"mobile_oidc_config": {}
}
]
}

getPortalConfigโ€‹

Retrieves the portal configuration.

GET /v2/portal/config

const { data } = await client.getPortalConfig({
origin: 'example',
})
Response
{
"enabled": true,
"name": "Installer Portal",
"domain": "abc.com",
"is_epilot_domain": true,
"epilot_domain": "example-portal-12345.ecp.epilot.cloud",
"domain_settings": {
"is_custom_domain_enabled": true,
"is_epilot_domain_enabled": true,
"is_redirection_enabled": true
},
"design_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"self_registration_setting": "ALLOW_WITH_CONTACT_CREATION",
"user_account_self_management": false,
"feature_settings": {
"start_page": true,
"billing": true,
"change_due_date": true,
"new_design": true
},
"accessToken": "string",
"advanced_mfa": {
"enabled": true
},
"auth_settings": {
"passwordless_login": {
"enabled": true
},
"entry_point": "PASSWORD",
"preferred_sso_providers": ["office-365-login"],
"auto_redirect_to_sso": true
},
"cognito_details": {
"cognito_user_pool_client_id": "6bsd0jkgoie74k2i8mrhc1vest",
"cognito_user_pool_arn": "arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341",
"cognito_user_pool_id": "eu-central-1_CUEQRNbUb",
"password_policy": {
"minimum_length": 8,
"maximum_length": 256,
"require_lowercase": true,
"require_uppercase": true,
"require_numbers": true,
"require_symbols": true
}
},
"config": "string",
"contact_identifiers": ["email", "last_name"],
"approval_state_attributes": {
"contact": ["name", "address"],
"contract": ["installment_amount"]
},
"email_templates": {
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
},
"images": {
"orderLeftTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg",
"orderRightTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg",
"welcomeBanner": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg"
},
"entity_identifiers": {
"type": {
"isEnabled": true,
"attributes": ["contract_number"]
}
},
"contract_identifiers": [
{
"name": "email",
"schema": "contact"
},
{
"name": "last_name",
"schema": "contact"
}
],
"contract_selector_config": {
"show_inactive": true,
"title_path": "string"
},
"registration_identifiers": [
{
"name": "last_name",
"schema": "contact"
},
{
"name": "contract_number",
"schema": "contract"
}
],
"triggered_journeys": [
{
"trigger_name": "FIRST_LOGIN",
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
],
"entity_edit_rules": [
{
"slug": "contact",
"attribute": "first_name",
"rule_type": "cadence",
"cadence_period_type": "days",
"cadence_period": 1,
"changes_allowed": 1,
"grace_period": 1,
"allowed_increment": "10%",
"allowed_decrement": "10%",
"number_of_days_before_restriction": 10
}
],
"allowed_file_extensions": {
"document": ["pdf"],
"image": ["jpg"],
"spreadsheet": ["xls"],
"presentation": ["ppt"],
"audioVideo": ["mp4"],
"email": ["eml"],
"archive": ["zip"],
"cad": ["cad"],
"calendar": ["ics"],
"other": ["txt"]
},
"prevent_search_engine_indexing": true,
"meter_reading_grace_period": 0,
"inactive_contract_cutoff_years": 0,
"is_dummy": true,
"is_v3_item": true,
"portal_id": "453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"portal_sk_v3": "PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"origin": "string",
"pages": {},
"id": 12345,
"organization_id": 12345,
"org_settings": {
"canary": {
"enabled": true
},
"notracking": {
"enabled": true
}
},
"feature_flags": {},
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947",
"effect": "allow"
}
],
"identity_providers": [
{
"slug": "office-365-login",
"display_name": "Office 365 Login",
"oidc_config": {},
"mobile_oidc_config": {}
}
]
}

deletePortalโ€‹

Deletes the portal.

DELETE /v2/portal/config

const { data } = await client.deletePortal({
origin: 'example',
})

getPortalExtensionsโ€‹

Retrieves the installed portal extensions.

GET /v2/portal/extensions

const { data } = await client.getPortalExtensions({
origin: 'example',
})
Response
[
{
"id": "string",
"app_id": "string",
"app_name": "string",
"name": {
"en": "string"
},
"description": {
"en": "string"
},
"version": "string",
"options": [
{
"id": "string",
"name": {
"en": "string"
},
"type": "text",
"description": {
"en": "string"
},
"default": "string",
"required": false
}
],
"links": [
{
"id": "string",
"name": {
"en": "string"
},
"description": {
"en": "string"
},
"type": "seamless",
"condition": "{{Contact.customer_number | is_not_empty}}",
"auth": {
"method": "GET",
"url": "string",
"params": {},
"headers": {},
"body": {},
"cache": {
"key": "{{Options.api_key}}",
"ttl": "{{AuthResponse.data.expires_in}}"
}
},
"redirect": {
"url": "string",
"params": {}
}
}
],
"hooks": [
{
"type": "registrationIdentifiersCheck",
"auth": {
"method": "GET",
"url": "string",
"params": {},
"headers": {},
"body": {},
"cache": {
"key": "{{Options.api_key}}",
"ttl": "{{AuthResponse.data.expires_in}}"
}
},
"call": {
"method": "POST",
"url": "string",
"params": {},
"headers": {},
"body": {},
"result": "string"
},
"use_static_ips": false
}
]
}
]

getPublicPortalExtensionDetailsโ€‹

Get public extension details shown to end customers and configuring users.

GET /v2/portal/public/extensions

const { data } = await client.getPublicPortalExtensionDetails({
org_id: 'example',
origin: 'example',
})
Response
{
"consumptionDataRetrieval": [
{
"extension": {
"id": "string",
"name": {
"en": "string"
}
},
"hook": {
"id": "string",
"name": {
"en": "string"
},
"intervals": ["string"]
}
}
],
"priceDataRetrieval": [
{
"extension": {
"id": "string",
"name": {
"en": "string"
}
},
"hook": {
"id": "string",
"name": {
"en": "string"
},
"intervals": ["string"]
}
}
],
"costDataRetrieval": [
{
"extension": {
"id": "string",
"name": {
"en": "string"
}
},
"hook": {
"id": "string",
"name": {
"en": "string"
},
"intervals": ["string"]
}
}
],
"contractIdentification": {
"extension": {
"id": "string",
"name": {
"en": "string"
}
},
"hook": {
"explanation": {
"en": "This process will give you access to all Contracts kept"
}
}
},
"meterReadingPlausibilityCheck": {
"extension": {
"id": "string",
"name": {
"en": "string"
}
},
"hook": {
"plausibility_mode": "check"
}
}
}

getPortalExtensionsV3โ€‹

Retrieves the installed portal extensions.

GET /v3/portal/extensions

const { data } = await client.getPortalExtensionsV3({
portal_id: 'example',
})
Response
[
{
"id": "string",
"app_id": "string",
"app_name": "string",
"name": {
"en": "string"
},
"description": {
"en": "string"
},
"version": "string",
"options": [
{
"id": "string",
"name": {
"en": "string"
},
"type": "text",
"description": {
"en": "string"
},
"default": "string",
"required": false
}
],
"links": [
{
"id": "string",
"name": {
"en": "string"
},
"description": {
"en": "string"
},
"type": "seamless",
"condition": "{{Contact.customer_number | is_not_empty}}",
"auth": {
"method": "GET",
"url": "string",
"params": {},
"headers": {},
"body": {},
"cache": {
"key": "{{Options.api_key}}",
"ttl": "{{AuthResponse.data.expires_in}}"
}
},
"redirect": {
"url": "string",
"params": {}
}
}
],
"hooks": [
{
"type": "registrationIdentifiersCheck",
"auth": {
"method": "GET",
"url": "string",
"params": {},
"headers": {},
"body": {},
"cache": {
"key": "{{Options.api_key}}",
"ttl": "{{AuthResponse.data.expires_in}}"
}
},
"call": {
"method": "POST",
"url": "string",
"params": {},
"headers": {},
"body": {},
"result": "string"
},
"use_static_ips": false
}
]
}
]

getPublicPortalExtensionDetailsV3โ€‹

Get public extension details shown to end customers and configuring users. Supports two identification methods:

  1. Using org_id + portal_id
  2. Using domain

GET /v3/portal/public/extensions

const { data } = await client.getPublicPortalExtensionDetailsV3({
org_id: 'example',
portal_id: 'example',
domain: 'example',
})
Response
{
"consumptionDataRetrieval": [
{
"extension": {
"id": "string",
"name": {
"en": "string"
}
},
"hook": {
"id": "string",
"name": {
"en": "string"
},
"intervals": ["string"]
}
}
],
"priceDataRetrieval": [
{
"extension": {
"id": "string",
"name": {
"en": "string"
}
},
"hook": {
"id": "string",
"name": {
"en": "string"
},
"intervals": ["string"]
}
}
],
"costDataRetrieval": [
{
"extension": {
"id": "string",
"name": {
"en": "string"
}
},
"hook": {
"id": "string",
"name": {
"en": "string"
},
"intervals": ["string"]
}
}
],
"contractIdentification": {
"extension": {
"id": "string",
"name": {
"en": "string"
}
},
"hook": {
"explanation": {
"en": "This process will give you access to all Contracts kept"
}
}
},
"meterReadingPlausibilityCheck": {
"extension": {
"id": "string",
"name": {
"en": "string"
}
},
"hook": {
"plausibility_mode": "check"
}
}
}

getConsumptionโ€‹

Get Consumption

GET /v2/portal/consumption

const { data } = await client.getConsumption({
app_id: 'example',
extensionId: 'example',
hookId: 'example',
meter_id: 'example',
from: 'example',
to: 'example',
interval: 'example',
context_entities: 'example',
})
Response
{
"consumptions": [
{
"timestamp": "1970-01-01T00:00:00.000Z",
"value": 0,
"type": "string"
}
]
}

getCostsโ€‹

Get Costs

GET /v2/portal/costs

const { data } = await client.getCosts({
app_id: 'example',
extensionId: 'example',
hookId: 'example',
meter_id: 'example',
from: 'example',
to: 'example',
interval: 'example',
context_entities: 'example',
})
Response
{
"costs": [
{
"timestamp": "1970-01-01T00:00:00.000Z",
"unit_amount": 1234,
"unit_amount_currency": "EUR",
"unit_amount_decimal": "12.34",
"tax_behavior": "exclusive",
"tax_rate": 19
}
]
}

getPricesโ€‹

Get Prices

GET /v2/portal/prices

const { data } = await client.getPrices({
app_id: 'example',
extensionId: 'example',
hookId: 'example',
meter_id: 'example',
from: 'example',
to: 'example',
interval: 'example',
context_entities: 'example',
})
Response
{
"prices": [
{
"timestamp": "1970-01-01T00:00:00.000Z",
"unit_amount": 1234,
"unit_amount_currency": "EUR",
"unit_amount_decimal": "12.34",
"components": {
"auction_price_amount": 1000,
"auction_price_amount_decimal": "10.00",
"taxes_levies_amount": 50,
"taxes_levies_amount_decimal": "0.50",
"source_fee_amount": 50,
"source_fee_amount_decimal": "0.50",
"grid_fee_amount": 100,
"grid_fee_amount_decimal": "1.00",
"margin_amount": 34,
"margin_amount_decimal": "0.34"
},
"tax_behavior": "exclusive",
"tax_rate": 19
}
]
}

Retrieves the portal configuration external links.

GET /v2/portal/external-links

const { data } = await client.getExternalLinks({
origin: 'example',
contactId: 'example',
})
Response
[
{
"id": "string",
"label": {},
"type": "link",
"link": "string",
"rules": [
{}
],
"attribute": "string",
"entity": "string",
"attribute_value": "string",
"icon": {
"name": "string",
"color": "string",
"size": 0
},
"extension_link_id": ["string"]
}
]

getExternalLinksV3โ€‹

Retrieves the portal configuration external links.

GET /v3/portal/external-links

const { data } = await client.getExternalLinksV3({
portal_id: 'example',
contactId: 'example',
})
Response
[
{
"id": "string",
"label": {},
"type": "link",
"link": "string",
"rules": [
{}
],
"attribute": "string",
"entity": "string",
"attribute_value": "string",
"icon": {
"name": "string",
"color": "string",
"size": 0
},
"extension_link_id": ["string"]
}
]

Retrieves a resolved seamless portal link.

GET /v2/portal/resolve:seamless-link

const { data } = await client.getResolvedSeamlessLink({
app_id: 'example',
extension_id: 'example',
link_id: 'example',
context_entities: 'example',
})
Response
{
"link": "string"
}

getPublicPortalConfigโ€‹

Retrieves the public portal configuration.

GET /v2/portal/public/portal/config

const { data } = await client.getPublicPortalConfig({
org_id: 'example',
origin: 'example',
})
Response
{
"enabled": true,
"name": "Installer Portal",
"domain": "abc.com",
"is_epilot_domain": true,
"epilot_domain": "example-portal-12345.ecp.epilot.cloud",
"domain_settings": {
"is_custom_domain_enabled": true,
"is_epilot_domain_enabled": true,
"is_redirection_enabled": true
},
"design_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"self_registration_setting": "ALLOW_WITH_CONTACT_CREATION",
"user_account_self_management": false,
"feature_settings": {
"start_page": true,
"billing": true,
"change_due_date": true,
"new_design": true
},
"accessToken": "string",
"advanced_mfa": {
"enabled": true
},
"auth_settings": {
"passwordless_login": {
"enabled": true
},
"entry_point": "PASSWORD",
"preferred_sso_providers": ["office-365-login"],
"auto_redirect_to_sso": true
},
"cognito_details": {
"cognito_user_pool_client_id": "6bsd0jkgoie74k2i8mrhc1vest",
"cognito_user_pool_arn": "arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341",
"cognito_user_pool_id": "eu-central-1_CUEQRNbUb",
"password_policy": {
"minimum_length": 8,
"maximum_length": 256,
"require_lowercase": true,
"require_uppercase": true,
"require_numbers": true,
"require_symbols": true
}
},
"config": "string",
"contact_identifiers": ["email", "last_name"],
"approval_state_attributes": {
"contact": ["name", "address"],
"contract": ["installment_amount"]
},
"email_templates": {
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
},
"images": {
"orderLeftTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg",
"orderRightTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg",
"welcomeBanner": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg"
},
"entity_identifiers": {
"type": {
"isEnabled": true,
"attributes": ["contract_number"]
}
},
"contract_identifiers": [
{
"name": "email",
"schema": "contact"
},
{
"name": "last_name",
"schema": "contact"
}
],
"contract_selector_config": {
"show_inactive": true,
"title_path": "string"
},
"registration_identifiers": [
{
"name": "last_name",
"schema": "contact"
},
{
"name": "contract_number",
"schema": "contract"
}
],
"triggered_journeys": [
{
"trigger_name": "FIRST_LOGIN",
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
],
"entity_edit_rules": [
{
"slug": "contact",
"attribute": "first_name",
"rule_type": "cadence",
"cadence_period_type": "days",
"cadence_period": 1,
"changes_allowed": 1,
"grace_period": 1,
"allowed_increment": "10%",
"allowed_decrement": "10%",
"number_of_days_before_restriction": 10
}
],
"allowed_file_extensions": {
"document": ["pdf"],
"image": ["jpg"],
"spreadsheet": ["xls"],
"presentation": ["ppt"],
"audioVideo": ["mp4"],
"email": ["eml"],
"archive": ["zip"],
"cad": ["cad"],
"calendar": ["ics"],
"other": ["txt"]
},
"prevent_search_engine_indexing": true,
"meter_reading_grace_period": 0,
"inactive_contract_cutoff_years": 0,
"is_dummy": true,
"is_v3_item": true,
"portal_id": "453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"portal_sk_v3": "PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"origin": "string",
"pages": {},
"id": 12345,
"organization_id": 12345,
"org_settings": {
"canary": {
"enabled": true
},
"notracking": {
"enabled": true
}
},
"feature_flags": {},
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947",
"effect": "allow"
}
],
"identity_providers": [
{
"slug": "office-365-login",
"display_name": "Office 365 Login",
"oidc_config": {},
"mobile_oidc_config": {}
}
]
}

getOrgPortalConfigโ€‹

Retrieves the portal configuration for the organization.

GET /v2/portal/org/portal/config

const { data } = await client.getOrgPortalConfig({
origin: 'example',
})
Response
{
"enabled": true,
"name": "Installer Portal",
"domain": "abc.com",
"is_epilot_domain": true,
"epilot_domain": "example-portal-12345.ecp.epilot.cloud",
"domain_settings": {
"is_custom_domain_enabled": true,
"is_epilot_domain_enabled": true,
"is_redirection_enabled": true
},
"design_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"self_registration_setting": "ALLOW_WITH_CONTACT_CREATION",
"user_account_self_management": false,
"feature_settings": {
"start_page": true,
"billing": true,
"change_due_date": true,
"new_design": true
},
"accessToken": "string",
"advanced_mfa": {
"enabled": true
},
"auth_settings": {
"passwordless_login": {
"enabled": true
},
"entry_point": "PASSWORD",
"preferred_sso_providers": ["office-365-login"],
"auto_redirect_to_sso": true
},
"cognito_details": {
"cognito_user_pool_client_id": "6bsd0jkgoie74k2i8mrhc1vest",
"cognito_user_pool_arn": "arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341",
"cognito_user_pool_id": "eu-central-1_CUEQRNbUb",
"password_policy": {
"minimum_length": 8,
"maximum_length": 256,
"require_lowercase": true,
"require_uppercase": true,
"require_numbers": true,
"require_symbols": true
}
},
"config": "string",
"contact_identifiers": ["email", "last_name"],
"approval_state_attributes": {
"contact": ["name", "address"],
"contract": ["installment_amount"]
},
"email_templates": {
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
},
"images": {
"orderLeftTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg",
"orderRightTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg",
"welcomeBanner": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg"
},
"entity_identifiers": {
"type": {
"isEnabled": true,
"attributes": ["contract_number"]
}
},
"contract_identifiers": [
{
"name": "email",
"schema": "contact"
},
{
"name": "last_name",
"schema": "contact"
}
],
"contract_selector_config": {
"show_inactive": true,
"title_path": "string"
},
"registration_identifiers": [
{
"name": "last_name",
"schema": "contact"
},
{
"name": "contract_number",
"schema": "contract"
}
],
"triggered_journeys": [
{
"trigger_name": "FIRST_LOGIN",
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
],
"entity_edit_rules": [
{
"slug": "contact",
"attribute": "first_name",
"rule_type": "cadence",
"cadence_period_type": "days",
"cadence_period": 1,
"changes_allowed": 1,
"grace_period": 1,
"allowed_increment": "10%",
"allowed_decrement": "10%",
"number_of_days_before_restriction": 10
}
],
"allowed_file_extensions": {
"document": ["pdf"],
"image": ["jpg"],
"spreadsheet": ["xls"],
"presentation": ["ppt"],
"audioVideo": ["mp4"],
"email": ["eml"],
"archive": ["zip"],
"cad": ["cad"],
"calendar": ["ics"],
"other": ["txt"]
},
"prevent_search_engine_indexing": true,
"meter_reading_grace_period": 0,
"inactive_contract_cutoff_years": 0,
"is_dummy": true,
"is_v3_item": true,
"portal_id": "453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"portal_sk_v3": "PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"origin": "string",
"pages": {},
"id": 12345,
"organization_id": 12345,
"org_settings": {
"canary": {
"enabled": true
},
"notracking": {
"enabled": true
}
},
"feature_flags": {},
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947",
"effect": "allow"
}
],
"identity_providers": [
{
"slug": "office-365-login",
"display_name": "Office 365 Login",
"oidc_config": {},
"mobile_oidc_config": {}
}
],
"certificate_details": {
"status": "PENDING_VALIDATION",
"failed_reason": "CAA_ERROR"
}
}

getPublicPortalConfigV3โ€‹

Retrieves the public portal configuration.

GET /v3/portal/public/portal/config

const { data } = await client.getPublicPortalConfigV3({
org_id: 'example',
portal_id: 'example',
})
Response
{
"enabled": true,
"name": "Installer Portal",
"domain": "abc.com",
"is_epilot_domain": true,
"epilot_domain": "example-portal-12345.ecp.epilot.cloud",
"domain_settings": {
"is_custom_domain_enabled": true,
"is_epilot_domain_enabled": true,
"is_redirection_enabled": true
},
"design_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"self_registration_setting": "ALLOW_WITH_CONTACT_CREATION",
"user_account_self_management": false,
"feature_settings": {
"start_page": true,
"billing": true,
"change_due_date": true,
"new_design": true
},
"accessToken": "string",
"advanced_mfa": {
"enabled": true
},
"auth_settings": {
"passwordless_login": {
"enabled": true
},
"entry_point": "PASSWORD",
"preferred_sso_providers": ["office-365-login"],
"auto_redirect_to_sso": true
},
"cognito_details": {
"cognito_user_pool_client_id": "6bsd0jkgoie74k2i8mrhc1vest",
"cognito_user_pool_arn": "arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341",
"cognito_user_pool_id": "eu-central-1_CUEQRNbUb",
"password_policy": {
"minimum_length": 8,
"maximum_length": 256,
"require_lowercase": true,
"require_uppercase": true,
"require_numbers": true,
"require_symbols": true
}
},
"config": "string",
"contact_identifiers": ["email", "last_name"],
"approval_state_attributes": {
"contact": ["name", "address"],
"contract": ["installment_amount"]
},
"email_templates": {
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
},
"images": {
"orderLeftTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg",
"orderRightTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg",
"welcomeBanner": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg"
},
"entity_identifiers": {
"type": {
"isEnabled": true,
"attributes": ["contract_number"]
}
},
"contract_identifiers": [
{
"name": "email",
"schema": "contact"
},
{
"name": "last_name",
"schema": "contact"
}
],
"contract_selector_config": {
"show_inactive": true,
"title_path": "string"
},
"registration_identifiers": [
{
"name": "last_name",
"schema": "contact"
},
{
"name": "contract_number",
"schema": "contract"
}
],
"triggered_journeys": [
{
"trigger_name": "FIRST_LOGIN",
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
],
"entity_edit_rules": [
{
"slug": "contact",
"attribute": "first_name",
"rule_type": "cadence",
"cadence_period_type": "days",
"cadence_period": 1,
"changes_allowed": 1,
"grace_period": 1,
"allowed_increment": "10%",
"allowed_decrement": "10%",
"number_of_days_before_restriction": 10
}
],
"allowed_file_extensions": {
"document": ["pdf"],
"image": ["jpg"],
"spreadsheet": ["xls"],
"presentation": ["ppt"],
"audioVideo": ["mp4"],
"email": ["eml"],
"archive": ["zip"],
"cad": ["cad"],
"calendar": ["ics"],
"other": ["txt"]
},
"prevent_search_engine_indexing": true,
"meter_reading_grace_period": 0,
"inactive_contract_cutoff_years": 0,
"is_dummy": true,
"is_v3_item": true,
"portal_id": "453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"portal_sk_v3": "PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"origin": "string",
"pages": {},
"id": 12345,
"organization_id": 12345,
"org_settings": {
"canary": {
"enabled": true
},
"notracking": {
"enabled": true
}
},
"feature_flags": {},
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947",
"effect": "allow"
}
],
"identity_providers": [
{
"slug": "office-365-login",
"display_name": "Office 365 Login",
"oidc_config": {},
"mobile_oidc_config": {}
}
]
}

getOrgPortalConfigV3โ€‹

Retrieves the portal configuration for the organization.

GET /v3/portal/org/portal/config

const { data } = await client.getOrgPortalConfigV3({
portal_id: 'example',
})
Response
{
"enabled": true,
"name": "Installer Portal",
"domain": "abc.com",
"is_epilot_domain": true,
"epilot_domain": "example-portal-12345.ecp.epilot.cloud",
"domain_settings": {
"is_custom_domain_enabled": true,
"is_epilot_domain_enabled": true,
"is_redirection_enabled": true
},
"design_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"self_registration_setting": "ALLOW_WITH_CONTACT_CREATION",
"user_account_self_management": false,
"feature_settings": {
"start_page": true,
"billing": true,
"change_due_date": true,
"new_design": true
},
"accessToken": "string",
"advanced_mfa": {
"enabled": true
},
"auth_settings": {
"passwordless_login": {
"enabled": true
},
"entry_point": "PASSWORD",
"preferred_sso_providers": ["office-365-login"],
"auto_redirect_to_sso": true
},
"cognito_details": {
"cognito_user_pool_client_id": "6bsd0jkgoie74k2i8mrhc1vest",
"cognito_user_pool_arn": "arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341",
"cognito_user_pool_id": "eu-central-1_CUEQRNbUb",
"password_policy": {
"minimum_length": 8,
"maximum_length": 256,
"require_lowercase": true,
"require_uppercase": true,
"require_numbers": true,
"require_symbols": true
}
},
"config": "string",
"contact_identifiers": ["email", "last_name"],
"approval_state_attributes": {
"contact": ["name", "address"],
"contract": ["installment_amount"]
},
"email_templates": {
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
},
"images": {
"orderLeftTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg",
"orderRightTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg",
"welcomeBanner": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg"
},
"entity_identifiers": {
"type": {
"isEnabled": true,
"attributes": ["contract_number"]
}
},
"contract_identifiers": [
{
"name": "email",
"schema": "contact"
},
{
"name": "last_name",
"schema": "contact"
}
],
"contract_selector_config": {
"show_inactive": true,
"title_path": "string"
},
"registration_identifiers": [
{
"name": "last_name",
"schema": "contact"
},
{
"name": "contract_number",
"schema": "contract"
}
],
"triggered_journeys": [
{
"trigger_name": "FIRST_LOGIN",
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
],
"entity_edit_rules": [
{
"slug": "contact",
"attribute": "first_name",
"rule_type": "cadence",
"cadence_period_type": "days",
"cadence_period": 1,
"changes_allowed": 1,
"grace_period": 1,
"allowed_increment": "10%",
"allowed_decrement": "10%",
"number_of_days_before_restriction": 10
}
],
"allowed_file_extensions": {
"document": ["pdf"],
"image": ["jpg"],
"spreadsheet": ["xls"],
"presentation": ["ppt"],
"audioVideo": ["mp4"],
"email": ["eml"],
"archive": ["zip"],
"cad": ["cad"],
"calendar": ["ics"],
"other": ["txt"]
},
"prevent_search_engine_indexing": true,
"meter_reading_grace_period": 0,
"inactive_contract_cutoff_years": 0,
"is_dummy": true,
"is_v3_item": true,
"portal_id": "453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"portal_sk_v3": "PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"origin": "string",
"pages": {},
"id": 12345,
"organization_id": 12345,
"org_settings": {
"canary": {
"enabled": true
},
"notracking": {
"enabled": true
}
},
"feature_flags": {},
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947",
"effect": "allow"
}
],
"identity_providers": [
{
"slug": "office-365-login",
"display_name": "Office 365 Login",
"oidc_config": {},
"mobile_oidc_config": {}
}
],
"certificate_details": {
"status": "PENDING_VALIDATION",
"failed_reason": "CAA_ERROR"
}
}

getAllPortalConfigsโ€‹

Retrieves all portal configurations.

GET /v2/portal/configs

const { data } = await client.getAllPortalConfigs()
Response
{
"data": [
{
"enabled": true,
"name": "Installer Portal",
"domain": "abc.com",
"is_epilot_domain": true,
"epilot_domain": "example-portal-12345.ecp.epilot.cloud",
"domain_settings": {},
"design_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"self_registration_setting": "ALLOW_WITH_CONTACT_CREATION",
"user_account_self_management": false,
"feature_settings": {},
"accessToken": "string",
"advanced_mfa": {},
"auth_settings": {},
"cognito_details": {},
"config": "string",
"contact_identifiers": ["email", "last_name"],
"approval_state_attributes": {},
"email_templates": {},
"images": {},
"entity_identifiers": {},
"contract_identifiers": [],
"contract_selector_config": {},
"registration_identifiers": [],
"triggered_journeys": [],
"entity_edit_rules": [],
"allowed_file_extensions": {},
"prevent_search_engine_indexing": true,
"meter_reading_grace_period": 0,
"inactive_contract_cutoff_years": 0,
"is_dummy": true,
"is_v3_item": true,
"portal_id": "453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"portal_sk_v3": "PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"origin": "string",
"pages": {},
"id": 12345,
"organization_id": 12345,
"org_settings": {},
"feature_flags": {},
"grants": [],
"identity_providers": []
}
]
}

upsertEmailTemplatesโ€‹

Upserts the email templates of a portal

POST /v2/portal/email-templates

const { data } = await client.upsertEmailTemplates(
{
origin: 'example',
},
{
confirmAccount: '5da0a718-c822-403d-9f5d-20d4584e0528',
advancedAuth: '5da0a718-c822-403d-9f5d-20d4584e0528',
advancedMFA: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeySignUp: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeySignInOneTimePassword: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeyLoginOTP: '5da0a718-c822-403d-9f5d-20d4584e0528',
forgotPassword: '5da0a718-c822-403d-9f5d-20d4584e0528',
invitation: '5da0a718-c822-403d-9f5d-20d4584e0528',
partnerInvitation: '5da0a718-c822-403d-9f5d-20d4584e0528',
onNewQuote: '5da0a718-c822-403d-9f5d-20d4584e0528',
onMapAPendingUser: '5da0a718-c822-403d-9f5d-20d4584e0528',
onDocUpload: '5da0a718-c822-403d-9f5d-20d4584e0528',
onWorkflowStepAssigned: '5da0a718-c822-403d-9f5d-20d4584e0528',
confirmEmailUpdate: '5da0a718-c822-403d-9f5d-20d4584e0528',
verifyCodeToSetPassword: '5da0a718-c822-403d-9f5d-20d4584e0528'
},
)
Response
{
"message": "Email Templates upserted successfully",
"emailTemplates": {
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
}

getEmailTemplatesโ€‹

Retrieves the email templates of a portal

GET /v2/portal/email-templates

const { data } = await client.getEmailTemplates({
origin: 'example',
})
Response
{
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
}

upsertEmailTemplatesByPortalIdโ€‹

Upserts the email templates of a portal by portal ID

POST /v3/portal/email-templates/{portal_id}

const { data } = await client.upsertEmailTemplatesByPortalId(
{
portal_id: 'example',
},
{
confirmAccount: '5da0a718-c822-403d-9f5d-20d4584e0528',
advancedAuth: '5da0a718-c822-403d-9f5d-20d4584e0528',
advancedMFA: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeySignUp: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeySignInOneTimePassword: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeyLoginOTP: '5da0a718-c822-403d-9f5d-20d4584e0528',
forgotPassword: '5da0a718-c822-403d-9f5d-20d4584e0528',
invitation: '5da0a718-c822-403d-9f5d-20d4584e0528',
partnerInvitation: '5da0a718-c822-403d-9f5d-20d4584e0528',
onNewQuote: '5da0a718-c822-403d-9f5d-20d4584e0528',
onMapAPendingUser: '5da0a718-c822-403d-9f5d-20d4584e0528',
onDocUpload: '5da0a718-c822-403d-9f5d-20d4584e0528',
onWorkflowStepAssigned: '5da0a718-c822-403d-9f5d-20d4584e0528',
confirmEmailUpdate: '5da0a718-c822-403d-9f5d-20d4584e0528',
verifyCodeToSetPassword: '5da0a718-c822-403d-9f5d-20d4584e0528'
},
)
Response
{
"message": "Email Templates upserted successfully",
"emailTemplates": {
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
}

getEmailTemplatesByPortalIdโ€‹

Retrieves the email templates of a portal by portal ID

GET /v3/portal/email-templates/{portal_id}

const { data } = await client.getEmailTemplatesByPortalId({
portal_id: 'example',
})
Response
{
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
}

getPublicPortalWidgetsโ€‹

Retrieves the public widgets of a portal

GET /v2/portal/public-widgets

const { data } = await client.getPublicPortalWidgets({
org_id: 'example',
origin: 'example',
})
Response
{
"widgets": [
{
"id": "string",
"type": "ACTION_WIDGET",
"listIndex": 0,
"headline": {
"en": "string",
"de": "string"
},
"subHeadline": {
"en": "string",
"de": "string"
},
"schema": "string"
},
{
"id": "string",
"type": "ACTION_WIDGET",
"listIndex": 0,
"headline": {
"en": "string",
"de": "string"
},
"subHeadline": {
"en": "string",
"de": "string"
},
"content": "string"
}
]
}

upsertPortalWidgetโ€‹

Upsert widget for a portal of an organization.

POST /v2/portal/widgets

const { data } = await client.upsertPortalWidget(
{
origin: 'example',
},
{
widgets: [
{
id: 'string',
type: 'ACTION_WIDGET',
listIndex: 0,
headline: {
en: 'string',
de: 'string'
},
subHeadline: {
en: 'string',
de: 'string'
},
schema: 'string'
},
{
id: 'string',
type: 'ACTION_WIDGET',
listIndex: 0,
headline: {
en: 'string',
de: 'string'
},
subHeadline: {
en: 'string',
de: 'string'
},
content: 'string'
},
/* ... 7 more */
]
},
)
Response
{
"widgets": [
{
"id": "string",
"type": "ACTION_WIDGET",
"listIndex": 0,
"headline": {
"en": "string",
"de": "string"
},
"subHeadline": {
"en": "string",
"de": "string"
},
"schema": "string"
},
{
"id": "string",
"type": "ACTION_WIDGET",
"listIndex": 0,
"headline": {
"en": "string",
"de": "string"
},
"subHeadline": {
"en": "string",
"de": "string"
},
"content": "string"
}
]
}

getPortalWidgetsโ€‹

Retrieves the widgets of a portal

GET /v2/portal/widgets

const { data } = await client.getPortalWidgets({
origin: 'example',
contract_id: 'example',
})
Response
{
"widgets": [
{
"id": "string",
"type": "ACTION_WIDGET",
"listIndex": 0,
"headline": {
"en": "string",
"de": "string"
},
"subHeadline": {
"en": "string",
"de": "string"
},
"schema": "string"
},
{
"id": "string",
"type": "ACTION_WIDGET",
"listIndex": 0,
"headline": {
"en": "string",
"de": "string"
},
"subHeadline": {
"en": "string",
"de": "string"
},
"content": "string"
}
]
}

replaceECPTemplateVariablesโ€‹

Replaces the template variables of a portal

POST /v2/portal/replace-ecp-template-variables

const { data } = await client.replaceECPTemplateVariables(
null,
{
template_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
entity_context: {}
},
)
Response
{
"customerPortal": {
"invitationLink": "https://end-customer-portal.ecp.dev.epilot.io/register?contactId=7aa44fb8-d60e-40cc-9a3a-ba09a1ff7f51&email=john@doe.com",
"newDocumentLink": "https://end-customer-portal.ecp.dev.epilot.io/requests/opportunities/b8fef220-abe0-4382-a704-26848f60977b",
"entityLink": "https://end-customer-portal.ecp.dev.epilot.io/requests/opportunities/b8fef220-abe0-4382-a704-26848f60977b",
"userEmailsOnEntity": ["john@doe.com", "mary@doe.com"]
},
"installerPortal": {
"invitationLink": "https://installer-portal.ecp.dev.epilot.io/register?contactId=7aa44fb8-d60e-40cc-9a3a-ba09a1ff7f51&email=john@doe.com",
"newDocumentLink": "https://installer-portal.ecp.dev.epilot.io/requests/opportunities/b8fef220-abe0-4382-a704-26848f60977b",
"entityLink": "https://installer-portal.ecp.dev.epilot.io/requests/opportunities/b8fef220-abe0-4382-a704-26848f60977b",
"userEmailsOnEntity": ["peter@doe.com", "jane@doe.com"]
},
"portalUser": {
"invitationLink": "https://employee-portal.ecp.dev.epilot.io/register?contactId=7aa44fb8-d60e-40cc-9a3a-ba09a1ff7f51&email=john@doe.com",
"newDocumentLink": "https://employee-portal.ecp.dev.epilot.io/requests/opportunities/b8fef220-abe0-4382-a704-26848f60977b",
"entityLink": "https://employee-portal.ecp.dev.epilot.io/requests/opportunities/b8fef220-abe0-4382-a704-26848f60977b",
"userEmailsOnEntity": ["peter@doe.com", "jane@doe.com"]
}
}

getSchemasโ€‹

Retrieves the schemas. Only schemas usable in the private part of the portal are returned.

GET /v2/portal/schemas

const { data } = await client.getSchemas()
Response
{
"schemas": [
{
"slug": "contact"
}
]
}

getSchemasByDomainโ€‹

Retrieves schemas by domain. Only schemas and attributes used on public pages are returned.

GET /v2/portal/public/schemas

const { data } = await client.getSchemasByDomain({
domain: 'example',
})
Response
{
"schemas": [
{
"slug": "contact"
}
]
}

getOrganizationSettingsByDomainโ€‹

Retrieves organization settings by domain. Only public organization settings are returned.

GET /v2/portal/public/org/settings

const { data } = await client.getOrganizationSettingsByDomain({
domain: 'example',
})
Response
{
"data": {
"automation_entity_mapping": {
"enabled": true
},
"automation_preview": {
"enabled": true
},
"central_inbox_preview_setting": {
"enabled": true
},
"contracts_preview_setting": {
"enabled": true
},
"disable_ivy": {
"enabled": true
},
"double_opt_in": {
"enabled": true
},
"ecommerce_catalog_preview": {
"enabled": true
},
"ecommerce_opportunities_preview": {
"enabled": true
},
"ecommerce_preview": {
"enabled": true
},
"end_customer_portal": {
"enabled": true
},
"installer_portal": {
"enabled": true
},
"entity_schema_builder": {
"enabled": true
},
"logic_editor_preview": {
"enabled": true
},
"new_navigation": {
"enabled": true
},
"partnering": {
"enabled": true
},
"product-availability": {
"enabled": true
},
"sso": {
"enabled": true
},
"submission_preview": {
"enabled": true
},
"user_roles_preview": {
"enabled": true
}
}
}

extraPermissionAttributesโ€‹

Retrieves the extra permission attributes.

GET /v2/portal/extra-permission-attributes

const { data } = await client.extraPermissionAttributes()
Response
{
"data": {
"contact": [
{
"name": "string",
"label": "string",
"group": "string"
}
],
"contract": [
{
"name": "string",
"label": "string",
"group": "string"
}
],
"order": [
{
"name": "string",
"label": "string",
"group": "string"
}
],
"opportunity": [
{
"name": "string",
"label": "string",
"group": "string"
}
],
"meter": [
{
"name": "string",
"label": "string",
"group": "string"
}
],
"meter_counter": [
{
"name": "string",
"label": "string",
"group": "string"
}
]
}
}

validateCaaRecordsโ€‹

Validates the CAA records of a portal

POST /v2/portal/validate/caa-records

const { data } = await client.validateCaaRecords({
origin: 'example',
})
Response
{
"retry": true,
"message": "string",
"isDNSConfigured": true
}

validateCaaRecordsV3โ€‹

Validates the CAA records of a portal

POST /v3/portal/validate/caa-records

const { data } = await client.validateCaaRecordsV3({
portal_id: 'example',
})
Response
{
"retry": true,
"message": "string",
"isDNSConfigured": true
}

getContactโ€‹

Retrieves the contact of the logged in user.

GET /v2/portal/contact

const { data } = await client.getContact()
Response
{
"entity": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "contact"
},
"files": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "file"
}
],
"relations": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"templates_output": {
"content_top_name": "Customer #123456",
"main_content_name": "Orange Flexible A2 (654321)",
"content_bottom_name": "Porscheplatz 1, 70435 Stuttgart, Germany",
"nested_content": {
"title": "Orange Flexible A2",
"subtitle": "654321"
}
},
"_schema": "contact"
}
],
"journey_actions": [
{
"journey_id": "string",
"action_label": {
"en": "string",
"de": "string"
},
"slug": "string",
"rules": [
{
"entity": "string",
"attribute": "string",
"attribute_value": "string"
}
]
}
]
}

updateContactโ€‹

Updates the contact details.

PATCH /v2/portal/contact

const { data } = await client.updateContact(
null,
{},
)
Response
{
"data": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "contact"
}
}

getECPContactโ€‹

Get the Contact by id

GET /v2/portal/ecp/contact

const { data } = await client.getECPContact({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"data": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "contact"
}
}

checkContactExistsโ€‹

True if contact with given identifiers exists.

POST /v2/portal/public/contact/exists

const { data } = await client.checkContactExists(
{
origin: 'example',
},
{
org_id: 728,
registration_identifiers: {
contact: {
email: 'john.doe@example.com'
},
contract: {
contract_number: '123456'
}
}
},
)
Response
{
"exists": true,
"contactId": "5da0a718-c822-403d-9f5d-20d4584e0528"
}

checkContactExistsV3โ€‹

True if contact with given identifiers exists.

POST /v3/portal/public/contact/exists

const { data } = await client.checkContactExistsV3(
{
portal_id: 'example',
},
{
org_id: 728,
registration_identifiers: {
contact: {
email: 'john.doe@example.com'
},
contract: {
contract_number: '123456'
}
}
},
)
Response
{
"exists": true,
"contactId": "5da0a718-c822-403d-9f5d-20d4584e0528"
}

getValidSecondaryAttributesโ€‹

Get valid secondary attributes that are used while mapping a contact on registration

GET /v2/portal/contact/valid/secondary/attributes

const { data } = await client.getValidSecondaryAttributes()
Response
{
"data": [
{
"name": "first_name",
"type": "string"
}
]
}

getPortalUserโ€‹

Get the portal user details

GET /v2/portal/user

const { data } = await client.getPortalUser()
Response
{
"data": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "portal_user"
}
}

updatePortalUserโ€‹

Update the portal user details

PATCH /v2/portal/user

const { data } = await client.updatePortalUser(
null,
{},
)
Response
{
"data": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "portal_user"
}
}

deletePortalUserโ€‹

Delete the portal user

DELETE /v2/portal/user

const { data } = await client.deletePortalUser()
Response
{
"message": "User Succesfully Deleted",
"data": "5da0a718-c822-403d-9f5d-20d4584e0528"
}

updatePortalUserEmailโ€‹

Update portal user email

PUT /v2/portal/user/update/email

const { data } = await client.updatePortalUserEmail(
null,
{
email: 'john@doe.com',
password: 'string'
},
)
Response
{
"message": "You will receive a confirmation mail soon on your updated email address."
}

resendConfirmationEmailโ€‹

Resend confirmation email

POST /v2/portal/user/resend/confirmation-email/{id}

const { data } = await client.resendConfirmationEmail({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"message": "Confirmation email sent successfully."
}

fetchPortalUsersByRelatedEntityโ€‹

Get all users for a given entity

GET /v2/portal/users/by-related-entity

const { data } = await client.fetchPortalUsersByRelatedEntity({
entity_id: 'example',
slug: 'example',
})
Response
{
"portalUsers": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "portal_user"
}
]
}

confirmUserโ€‹

Confirm a portal user

GET /v2/portal/user/confirm

const { data } = await client.confirmUser({
confirmation_link_token: 'example',
use_redirect: true,
})
Response
{
"confirmed": true,
"user_already_confirmed": true
}

confirmUserWithUserIdโ€‹

Confirm a portal user

GET /v2/portal/user/confirm/{id}

const { data } = await client.confirmUserWithUserId({
origin: 'example',
id: '123e4567-e89b-12d3-a456-426614174000',
org_id: 'example',
})

userExistsโ€‹

Checks whether a user exists in the portal

GET /v2/portal/public/user/exists

const { data } = await client.userExists({
email: 'example',
org_id: 'example',
origin: 'example',
})
Response
{
"exists": true
}

userExistsV3โ€‹

Checks whether a user exists in the portal

GET /v3/portal/public/user/exists

const { data } = await client.userExistsV3({
email: 'example',
org_id: 'example',
portal_id: 'example',
})
Response
{
"exists": true
}

getRecipientsToNotifyOnAutomationโ€‹

Get recipients to notify on automation

POST /v2/portal/recipients-to-notify

const { data } = await client.getRecipientsToNotifyOnAutomation(
null,
{
emails: ['john@doe.com'],
template_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
context_id: '5da0a718-c822-403d-9f5d-20d4584e0528'
},
)
Response
{
"recipients": [
{
"email": "john@doe.com",
"recipient_id": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
],
"message": "string"
}

configureDistributionโ€‹

Configure the distribution for the portal's custom domain

GET /v2/portal/configure-distribution

const { data } = await client.configureDistribution({
origin: 'example',
})
Response
{
"domainName": "dsj8op4ha01jha23.cloudfront.net"
}

configureDistributionV3โ€‹

Configure the distribution for the portal's custom domain

GET /v3/portal/configure-distribution

const { data } = await client.configureDistributionV3({
portal_id: 'example',
})
Response
{
"domainName": "dsj8op4ha01jha23.cloudfront.net"
}

getAllOrdersโ€‹

Get all orders for the portal user

GET /v2/portal/order

const { data } = await client.getAllOrders({
from: 1,
size: 1,
})
Response
{
"data": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "order",
"journey_actions": {
"journey_id": "string",
"action_label": {
"en": "string",
"de": "string"
},
"slug": "string",
"rules": [
{
"entity": "string",
"attribute": "string",
"attribute_value": "string"
}
]
}
}
]
}

postOrderAcceptanceโ€‹

Accept/decline an offer by id

POST /v2/portal/order/{id}/acceptance

const { data } = await client.postOrderAcceptance(
{
id: '123e4567-e89b-12d3-a456-426614174000',
},
{
decision: 'accept'
},
)
Response
{
"data": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "order"
}
}

getOrderโ€‹

Get an order by id

GET /v2/portal/order/{id}

const { data } = await client.getOrder({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"entity": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "order"
},
"files": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "file"
}
],
"relations": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"templates_output": {},
"_schema": "contact"
}
],
"products": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "product"
}
],
"crossSellableProducts": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "product"
}
],
"workflow": [
{
"id": "8gja72h6kas6h",
"name": "Lead Qualification",
"trigger": "MANUAL",
"status": "STARTED",
"creationTime": "2021-04-27T12:01:13.000Z",
"lastUpdateTime": "2021-04-27T12:01:13.000Z",
"dueDate": "2021-04-27T12:01:13.000Z",
"assignedTo": ["252", "29052"],
"flow": []
}
],
"journey_actions": [
{
"journey_id": "string",
"action_label": {},
"slug": "string",
"rules": []
}
]
}

updateOrderโ€‹

Update an order by id

PATCH /v2/portal/order/{id}

const { data } = await client.updateOrder(
{
id: '123e4567-e89b-12d3-a456-426614174000',
},
{},
)
Response
{
"data": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "order"
}
}

getAllOpportunitiesโ€‹

Get all opportunities of a portal user

GET /v2/portal/opportunity

const { data } = await client.getAllOpportunities({
from: 1,
size: 1,
})
Response
{
"data": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "opportunity",
"journey_actions": {
"journey_id": "string",
"action_label": {
"en": "string",
"de": "string"
},
"slug": "string",
"rules": [
{
"entity": "string",
"attribute": "string",
"attribute_value": "string"
}
]
}
}
]
}

getSearchableAttributesForOpportunitiesโ€‹

Get all opportunity searchable attributes for a portal user

GET /v2/portal/opportunities/searchable-attributes

const { data } = await client.getSearchableAttributesForOpportunities({
from: 1,
size: 1,
})
Response
{
"data": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "opportunity"
}
]
}

getSearchResultsForOpportunitiesโ€‹

Get all opportunity with the given serached attributes

POST /v2/portal/opportunities/search

const { data } = await client.getSearchResultsForOpportunities(
{
from: 1,
size: 1,
},
{
addresses: ['string'],
customers: ['string'],
purposes: ['5da0a718-c822-403d-9f5d-20d4584e0528'],
workflows: [
{}
]
},
)
Response
{
"data": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "opportunity"
}
]
}

getOpportunityโ€‹

Get an opportunity by id

GET /v2/portal/opportunities/{id}

const { data } = await client.getOpportunity({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"entity": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "opportunity"
},
"orders": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "order"
}
],
"files": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "file"
}
],
"relations": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"templates_output": {},
"_schema": "contact"
}
],
"workflow": [
{
"id": "8gja72h6kas6h",
"name": "Lead Qualification",
"trigger": "MANUAL",
"status": "STARTED",
"creationTime": "2021-04-27T12:01:13.000Z",
"lastUpdateTime": "2021-04-27T12:01:13.000Z",
"dueDate": "2021-04-27T12:01:13.000Z",
"assignedTo": ["252", "29052"],
"flow": []
}
],
"journey_actions": [
{
"journey_id": "string",
"action_label": {},
"slug": "string",
"rules": []
}
]
}

updateOpportunityโ€‹

Update an opportunity by id

PATCH /v2/portal/opportunities/{id}

const { data } = await client.updateOpportunity(
{
id: '123e4567-e89b-12d3-a456-426614174000',
},
{},
)
Response
{
"data": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "opportunity"
}
}

getAllRequestsโ€‹

Get all opportunities & orders of a portal user

GET /v2/portal/request

const { data } = await client.getAllRequests({
from: 1,
size: 1,
})
Response
{
"hits": 1,
"results": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "opportunity"
}
]
}

getAllContractsโ€‹

Get all contracts for a portal user

GET /v2/portal/contract

const { data } = await client.getAllContracts({
from: 1,
size: 1,
})
Response
{
"data": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"contract_name": "Grid Contract",
"contract_number": "12345",
"status": "approved",
"description": "This contract is for the supply of widgets.",
"account_number": "67890",
"branch": "power",
"billing_address": "123 Main St, Anytown",
"delivery_address": "456 Elm St, Anytown",
"additional_addresses": "789 Oak St, Anytown",
"termination_date": "2022-01-01",
"termination_reason": "Non-payment",
"billing_period": "monthly",
"billing_duration_amount": 30,
"renewal_duration_amount": 365,
"renewal_duration_unit": "years",
"notice_time_amount": 30,
"notice_time_unit": "months",
"start_date": "2021-01-01",
"billing_due_day": 2,
"installment_amount": 10050,
"balance": 8990,
"balance_currency": "EUR",
"journey_actions": {
"journey_id": "string",
"action_label": {
"en": "string",
"de": "string"
},
"slug": "string",
"rules": [
{
"entity": "string",
"attribute": "string",
"attribute_value": "string"
}
]
}
}
]
}

getContractโ€‹

Get a contract by id

GET /v2/portal/contract/{id}

const { data } = await client.getContract({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"entity": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"contract_name": "Grid Contract",
"contract_number": "12345",
"status": "approved",
"description": "This contract is for the supply of widgets.",
"account_number": "67890",
"branch": "power",
"billing_address": "123 Main St, Anytown",
"delivery_address": "456 Elm St, Anytown",
"additional_addresses": "789 Oak St, Anytown",
"termination_date": "2022-01-01",
"termination_reason": "Non-payment",
"billing_period": "monthly",
"billing_duration_amount": 30,
"renewal_duration_amount": 365,
"renewal_duration_unit": "years",
"notice_time_amount": 30,
"notice_time_unit": "months",
"start_date": "2021-01-01",
"billing_due_day": 2,
"installment_amount": 10050,
"balance": 8990,
"balance_currency": "EUR"
},
"orders": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "order"
}
],
"meters": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "meter"
}
],
"files": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "file"
}
],
"relations": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"templates_output": {},
"_schema": "contact"
}
],
"workflow": [
{
"id": "8gja72h6kas6h",
"name": "Lead Qualification",
"trigger": "MANUAL",
"status": "STARTED",
"creationTime": "2021-04-27T12:01:13.000Z",
"lastUpdateTime": "2021-04-27T12:01:13.000Z",
"dueDate": "2021-04-27T12:01:13.000Z",
"assignedTo": ["252", "29052"],
"flow": []
}
],
"journey_actions": [
{
"journey_id": "string",
"action_label": {},
"slug": "string",
"rules": []
}
]
}

updateContractโ€‹

Update a contract by id

PATCH /v2/portal/contract/{id}

const { data } = await client.updateContract(
{
id: '123e4567-e89b-12d3-a456-426614174000',
},
{},
)
Response
{
"data": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"contract_name": "Grid Contract",
"contract_number": "12345",
"status": "approved",
"description": "This contract is for the supply of widgets.",
"account_number": "67890",
"branch": "power",
"billing_address": "123 Main St, Anytown",
"delivery_address": "456 Elm St, Anytown",
"additional_addresses": "789 Oak St, Anytown",
"termination_date": "2022-01-01",
"termination_reason": "Non-payment",
"billing_period": "monthly",
"billing_duration_amount": 30,
"renewal_duration_amount": 365,
"renewal_duration_unit": "years",
"notice_time_amount": 30,
"notice_time_unit": "months",
"start_date": "2021-01-01",
"billing_due_day": 2,
"installment_amount": 10050,
"balance": 8990,
"balance_currency": "EUR"
}
}

addContractByIdentifiersโ€‹

Self-assign contract(s) by pre-configured identifiers.

POST /v2/portal/contract/by-identifiers

const { data } = await client.addContractByIdentifiers(
null,
{
contract: {
contract_number: '123456'
},
meter: {
meter_number: '123456'
}
},
)
Response
{
"data": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"templates_output": {
"content_top_name": "Customer #123456",
"main_content_name": "Orange Flexible A2 (654321)",
"content_bottom_name": "Porscheplatz 1, 70435 Stuttgart, Germany",
"nested_content": {
"title": "Orange Flexible A2",
"subtitle": "654321"
}
},
"_schema": "contact"
}
],
"hits": 0
}

getEntityIdentifiersโ€‹

Retrieve a list of entity identifiers used for entity search by portal users.

GET /v2/portal/entity/identifiers/{slug}

const { data } = await client.getEntityIdentifiers({
slug: 'example',
})
Response
{
"data": [
{
"name": "contract_number",
"type": "string"
}
]
}

getEntityActivityFeedโ€‹

Get activity feed for an entity

GET /v2/portal/entity/{slug}/{id}/activity

const { data } = await client.getEntityActivityFeed({
slug: 'example',
id: '123e4567-e89b-12d3-a456-426614174000',
after: 'example',
before: 'example',
from: 1,
size: 1,
type: 'example',
include_relations: true,
})
Response
{
"total": 1,
"results": [
{
"_id": "01F130Q52Q6MWSNS8N2AVXV4JN",
"timestamp": "1970-01-01T00:00:00.000Z",
"type": "MyCustomActivity",
"title": "My custom activity",
"message": "{{caller}} did something with {{entity payload.entity.id}}.",
"payload": {
"entity": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"schema": "contact"
}
}
}
]
}

validateCadenceEntityEditRulesโ€‹

Validate if cadence rule is valid for an entity

GET /v2/portal/{slug}/{id}:validateRule

const { data } = await client.validateCadenceEntityEditRules({
slug: 'example',
id: '123e4567-e89b-12d3-a456-426614174000',
attribute: 'example',
})
Response
{
"isBlockedByRules": false,
"failedRule": {
"slug": "contact",
"attribute": "string",
"rule_type": "string",
"cadence_period_type": "string",
"changes_allowed": 0,
"cadence_period": 0,
"allowed_decrement": "string",
"allowed_increment": "string",
"number_of_days_before_restriction": 0,
"grace_period": 0
}
}

searchPaymentRelationsInEntitiesโ€‹

Search for entities that have the payment relation with the given payment id

GET /v2/portal/entities-by-payment/{id}

const { data } = await client.searchPaymentRelationsInEntities({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"results": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"templates_output": {
"content_top_name": "Customer #123456",
"main_content_name": "Orange Flexible A2 (654321)",
"content_bottom_name": "Porscheplatz 1, 70435 Stuttgart, Germany",
"nested_content": {
"title": "Orange Flexible A2",
"subtitle": "654321"
}
},
"_schema": "contact"
}
],
"hits": 50
}

createCustomEntityActivityโ€‹

Create a custom activity that can be displayed in activity feed of an entity.

PUT /v2/portal/entity/activity

const { data } = await client.createCustomEntityActivity(
{
entities: ['...'],
},
{
type: 'PortalUserResetPassword'
},
)
Response
{
"_id": "01F130Q52Q6MWSNS8N2AVXV4JN",
"timestamp": "1970-01-01T00:00:00.000Z",
"type": "MyCustomActivity",
"title": "My custom activity",
"message": "{{caller}} did something with {{entity payload.entity.id}}.",
"payload": {
"entity": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"schema": "contact"
}
}
}

saveEntityFileโ€‹

Add files to an entity

POST /v2/portal/entity/file

const { data } = await client.saveEntityFile(
null,
{
entity_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
entity_type: 'order',
files: [
{
filename: 'document.pdf',
access_control: 'private',
s3ref: {
bucket: 12345,
key: 12345
}
}
]
},
)
Response
{
"createdFiles": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "file"
}
]
}

deleteEntityFileโ€‹

Delete files from an entity

DELETE /v2/portal/entity/file

const { data } = await client.deleteEntityFile(
null,
{
entity_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
entity_type: 'order',
file_entity_ids: ['5da0a718-c822-403d-9f5d-20d4584e0528']
},
)

savePortalFilesโ€‹

Add files to portal

POST /v2/portal/portal/files

const { data } = await client.savePortalFiles(
null,
{
origin: 'string',
files: [
{
filename: 12345,
file_type: 'orderRightTeaser',
_tags: 12345,
s3ref: {
bucket: 12345,
key: 12345
}
}
]
},
)
Response
{
"createdFiles": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "file"
}
]
}

getRegistrationIdentifiersโ€‹

Get valid attributes from entities that can be used as identifier to map contact to user on registration

GET /v2/portal/registration/identifiers

const { data } = await client.getRegistrationIdentifiers()
Response
{
"data": {
"contact": [
{
"label": "First name",
"name": "first_name",
"type": "string"
}
],
"contract": [
{
"label": "Contract number",
"name": "contract_number",
"type": "string"
}
]
}
}

getFileByIdโ€‹

Fetch a document with ID

GET /v2/portal/user/file/{id}

const { data } = await client.getFileById({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"file": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "file",
"filename": "document.pdf",
"access_control": "private",
"file_date": "2021-02-09T12:41:43.662Z",
"public_url": "https://epilot-files-prod.s3.eu-central-1.amazonaws.com/123/4d689aeb-1497-4410-a9fe-b36ca9ac4389/document.pdf",
"type": "document",
"mime_type": "application/pdf",
"_relations": [
{
"entity_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_schema": "contact",
"_title": "Opportunity ABC"
}
],
"is_new": true
}
}

trackFileDownloadedโ€‹

Track that user has downloaded a file

POST /v2/portal/user/file/{id}/downloaded

const { data } = await client.trackFileDownloaded({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"file": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"_schema": "file",
"filename": "document.pdf",
"access_control": "private",
"file_date": "2021-02-09T12:41:43.662Z",
"public_url": "https://epilot-files-prod.s3.eu-central-1.amazonaws.com/123/4d689aeb-1497-4410-a9fe-b36ca9ac4389/document.pdf",
"type": "document",
"mime_type": "application/pdf",
"_relations": [
{
"entity_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_schema": "contact",
"_title": "Opportunity ABC"
}
],
"is_new": true
}
}

getBillingEventsโ€‹

Fetch billing events for a portal user

GET /v2/portal/billing/events

const { data } = await client.getBillingEvents({
from: 1,
size: 1,
entity_id: ['...'],
event_type: 'example',
paid: true,
date_after: 'example',
date_before: 'example',
sort: 'example',
})
Response
{
"results": [
{
"billing_amount_decimal": "100.50",
"billing_amount": 10050,
"billing_currency": "EUR",
"external_id": "d4fb2a4e-3f74-4fc4-8fba-6fdaaaa3b08e",
"contract": {
"$relation": [
{
"entity_id": "f589786b-3024-43cd-9cb3-5a3c953f2896"
}
]
},
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"type": "installment",
"due_date": "string",
"paid_date": "string"
}
],
"hits": 50
}

getCustomerBalanceโ€‹

Get total balance across all contracts and orders of a customer entity.

GET /v2/portal/billing/customers/balance

const { data } = await client.getCustomerBalance()
Response
{
"balance": 8990,
"balance_decimal": "89.90",
"balance_currency": "EUR"
}

getBillingAccountโ€‹

Get a billing account by id.

GET /v2/portal/billing/accounts/{id}

const { data } = await client.getBillingAccount({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"entity": {
"billing_account_number": "string",
"balance": 0,
"balance_decimal": "string",
"balance_currency": "EUR",
"billing_contact": {
"$relation": [
{
"entity_id": "f589786b-3024-43cd-9cb3-5a3c953f2896"
}
]
},
"billing_address": {
"$relation_ref": [
{
"entity_id": "f589786b-3024-43cd-9cb3-5a3c953f2896",
"path": "address",
"_id": "f589786b-3024-43cd-9cb3-5a3c953f2896"
}
]
},
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z"
},
"relations": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"templates_output": {
"content_top_name": "Customer #123456",
"main_content_name": "Orange Flexible A2 (654321)",
"content_bottom_name": "Porscheplatz 1, 70435 Stuttgart, Germany",
"nested_content": {
"title": "Orange Flexible A2",
"subtitle": "654321"
}
},
"_schema": "contact"
}
]
}

loginToPortalAsUserโ€‹

Generate a token to log in to a portal impersonating a users.

POST /v2/portal/admin:login-as-user

const { data } = await client.loginToPortalAsUser(
null,
{
email: 'portal-customer@email.com',
origin: 'string'
},
)
Response
{
"login_as_token": "string"
}

triggerEntityAccessEventโ€‹

Trigger entity access event for a portal user

POST /v2/portal/entity/{schema}/access

const { data } = await client.triggerEntityAccessEvent({
schema: 'example',
entity_id: 'example',
origin: 'example',
})
Response
{
"eventId": "string"
}

triggerEntityAccessEventV3โ€‹

Trigger entity access event for a portal user

POST /v3/portal/entity/{schema}/access

const { data } = await client.triggerEntityAccessEventV3({
schema: 'example',
entity_id: 'example',
portal_id: 'example',
})
Response
{
"eventId": "string"
}

getPortalUserEntityโ€‹

Get a single entity for a portal user

POST /v2/portal/entity:get

const { data } = await client.getPortalUserEntity(
null,
{
slug: 'contact',
entity_id: '3ec28ab5-8598-41ef-9486-b57fca1d5e2a',
hydrate: false,
fields: ['_id', '_title'],
templates: {
content_top_name: 'Customer #{{contract.customer_number}}',
main_content_name: '{{contract.contract_name}} ({{contract.contract_number}})',
content_bottom_name: '{{custom_contract_delivery_address}}',
nested_content: {
title: '{{contract.contract_name}}',
subtitle: '{{contract.contract_number}}'
}
},
filters: [
{
term: {
'status.keyword': 'active'
}
},
{
range: {
_created_at: {
gte: '2023-01-01'
}
}
}
],
filters_context: [
{
portal_user: true
},
{
contact: true
},
/* ... 1 more */
],
targets: ['3ec28ab5-8598-41ef-9486-b57fca1d5e2a']
},
)
Response
{
"result": {
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"templates_output": {
"content_top_name": "Customer #123456",
"main_content_name": "Orange Flexible A2 (654321)",
"content_bottom_name": "Porscheplatz 1, 70435 Stuttgart, Germany",
"nested_content": {
"title": "Orange Flexible A2",
"subtitle": "654321"
}
},
"_schema": "contact"
}
}

searchPortalUserEntitiesโ€‹

Search all entities of a portal user

POST /v2/portal/entity:search

const { data } = await client.searchPortalUserEntities(
null,
{
slug: 'contact',
q: 'contract',
q_fields: ['_title', 'customer._title', 'customer.first_name', 'customer.last_name'],
group: 'customer._title',
group_title: '{{customer[Primary].first_name}} {{customer[Primary].last_name}}',
group_size: 100,
group_sort: 'desc',
group_after_key: {},
sort: '_created_at:desc',
from: 0,
size: 100,
hydrate: false,
fields: ['_id', '_title'],
templates: {
content_top_name: 'Customer #{{contract.customer_number}}',
main_content_name: '{{contract.contract_name}} ({{contract.contract_number}})',
content_bottom_name: '{{custom_contract_delivery_address}}'
},
filters: [
{
term: {
'status.keyword': 'active'
}
},
{
range: {
_created_at: {
gte: '2023-01-01'
}
}
}
],
filters_context: [
{
portal_user: true
},
{
contact: true
},
/* ... 1 more */
],
targets: ['3ec28ab5-8598-41ef-9486-b57fca1d5e2a']
},
)
Response
{
"results": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"_title": "Example Entity",
"_org": "123",
"_tags": ["example", "mock"],
"_created_at": "2021-02-09T12:41:43.662Z",
"_updated_at": "2021-02-09T12:41:43.662Z",
"templates_output": {
"content_top_name": "Customer #123456",
"main_content_name": "Orange Flexible A2 (654321)",
"content_bottom_name": "Porscheplatz 1, 70435 Stuttgart, Germany",
"nested_content": {
"title": "Orange Flexible A2",
"subtitle": "654321"
}
},
"_schema": "contact"
}
],
"pagination": {
"from": 0,
"size": 10,
"total": 50,
"has_more": true
},
"hits": 10
}

canTriggerPortalFlowโ€‹

Returns whether the user can trigger a portal flow

POST /v2/portal/can-trigger-portal-flow

const { data } = await client.canTriggerPortalFlow(
{
origin: 'example',
portal_id: 'example',
},
{
activity_id: '01F130Q52Q6MWSNS8N2AVXV4JN',
ecp_config: {
file_config: {
shared_with_end_customer: true,
_tags: ['example', 'mock']
}
}
},
)
Response
{
"can_trigger": true
}

getAutomationContextโ€‹

Retrieves the automation context.

GET /v2/portal/automation-context

const { data } = await client.getAutomationContext({
activity_id: 'example',
type: 'example',
})
Response
{}

updateWorkflowStepAsDoneโ€‹

Update a workflow step as done

PUT /v2/portal/workflow/{workflow_id}/{step_id}:markDone

const { data } = await client.updateWorkflowStepAsDone({
workflow_id: 'example',
step_id: 'example',
})
Response
{
"startedTime": "2024-01-12T13:29:55.942Z",
"requirements": [],
"created": "2023-10-20T17:41:10.256Z",
"executionType": "MANUAL",
"assignedToInProgress": "-",
"sectionId": "lzxsw2sblj7",
"type": "STEP",
"entityRefId": "q1d6vcbsqvn",
"assignedTo": ["10014532"],
"lastUpdated": "2024-01-13T05:18:43.838Z",
"ecp": {},
"userIds": [],
"name": "Hinterlege den vereinbarten LIC Termin",
"id": "q1d6vcbsqvn",
"definitionId": "9UjHKq",
"status": "COMPLETED",
"manuallyCreated": false,
"enabled": true,
"completedTime": "2024-01-13T05:18:43.827Z"
}

getEntityWorkflowsโ€‹

Get workflows for an entity

GET /v2/portal/entity/{slug}/{id}/workflows

const { data } = await client.getEntityWorkflows({
slug: 'example',
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"workflow_executions": [
{
"id": "8gja72h6kas6h",
"name": "Lead Qualification",
"trigger": "MANUAL",
"status": "STARTED",
"creationTime": "2021-04-27T12:01:13.000Z",
"lastUpdateTime": "2021-04-27T12:01:13.000Z",
"dueDate": "2021-04-27T12:01:13.000Z",
"assignedTo": ["252", "29052"],
"flow": [
{
"id": "sectionId1",
"name": "Initial Information Gathering",
"steps": [
{
"id": "sada5641f3a21",
"name": "Call client and confirm address and product",
"status": "ASSIGNED",
"assignedTo": ["11"]
},
{
"id": "sada5641f3a22",
"name": "Check product availability",
"status": "UNASSIGNED"
}
]
},
{
"id": "firstLevelStepId1",
"name": "Print and send catalog",
"status": "SKIPPED",
"dueDate": "2023-01-15T20:00:00"
}
]
}
]
}

uploadMeterReadingPhotoโ€‹

Upload Meter Reading Photo

POST /v2/portal/metering/reading/photo

const { data } = await client.uploadMeterReadingPhoto(
null,
{
filename: 'Reading 10.01.2025.jpg',
mime_type: 'image/jpeg',
contents: 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMTEhUTExMWFhUXGBgYGBgYGBgYGBgYGBgYFxgYFxgYHSggGBolHRgXITEhJSkrLi4uFx8zODMtNygtLisBCgoKDg0OGhAQGy0lHyUt',
meter_id: '5da0a718-c822-403d-9f5d-20d4584e0528'
},
)
Response
{
"data": {
"filename": "Reading 10.01.2025.jpg",
"s3ref": {
"bucket": "meter-readings",
"key": "uuid/reading-10.01.2025.jpg"
},
"reading": "000123.45",
"sector": "water",
"meter_numbers": ["00123456"]
}
}

createMeterReadingโ€‹

Create Meter Reading

POST /v2/portal/metering/reading

const { data } = await client.createMeterReading(
{
override_plausibility: true,
},
{
value: 240,
read_by: 'John Doe',
reason: 'Storing the feed-in record',
meter_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
counter_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
direction: 'feed-in',
timestamp: '2022-10-10T00:00:00.000Z',
source: 'ECP',
status: 'valid',
external_id: 'string',
remark: 'Customer reported unusual consumption',
metadata: {
registration_id: '1234567890',
business_unit: 'ABC'
}
},
)
Response
{
"data": {
"value": 240,
"read_by": "John Doe",
"reason": "Storing the feed-in record",
"meter_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"counter_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"direction": "feed-in",
"timestamp": "2022-10-10T00:00:00.000Z",
"source": "ECP",
"status": "valid",
"external_id": "string",
"remark": "Customer reported unusual consumption",
"metadata": {
"registration_id": "1234567890",
"business_unit": "ABC"
}
}
}

getAllowedMeterReadingRangeโ€‹

GET /v2/portal/metering/reading/allowed-range/{meter_id}

const { data } = await client.getAllowedMeterReadingRange({
meter_id: 'example',
origin: 'example',
timestamp: 'example',
context_entities: 'example',
})
Response
{
"data": [
{
"meter_counter_id": "string",
"min_value": 0,
"max_value": 0
}
]
}

ssoLoginโ€‹

Initiate login using external SSO identity.

POST /v2/portal/public/sso/login

const { data } = await client.ssoLogin(
{
origin: 'example',
org_id: 'example',
contact_id: 'example',
},
{
provider_slug: 'office-365-login'
},
)
Response
{
"token": "string",
"email": "portal-customer@email.com"
}

ssoLoginV3โ€‹

Initiate login using external SSO identity.

POST /v3/portal/public/sso/login

const { data } = await client.ssoLoginV3(
{
portal_id: 'example',
org_id: 'example',
contact_id: 'example',
},
{
provider_slug: 'office-365-login'
},
)
Response
{
"token": "string",
"email": "portal-customer@email.com"
}

ssoRedirectโ€‹

Handles the redirect from the external SSO provider. Validates the authorization code and state received from the provider. Redirects the user to the provided web_uri with the validated credenti

POST /v2/portal/public/sso/redirect

const { data } = await client.ssoRedirect({
web_uri: 'example',
})

ssoCallbackโ€‹

Handles the callback from the external SSO provider, validates the authorization code and generates a external provider token to be used with the CUSTOM_AUTH flow against Cognito.

POST /v2/portal/public/sso/callback

const { data } = await client.ssoCallback(
{
domain: 'example',
},
{
provider_slug: 'office-365-login',
token_endpoint: 'https://www.facebook.com/v12.0/dialog/oauth',
grant_type: 'authorization_code',
code: '123456',
redirect_uri: 'https://customer-portal.com/login',
client_id: '123456',
code_verifier: '123456'
},
)
Response
{
"access_token": "123456",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "123456",
"id_token": "123456",
"scope": "openid email"
}

getPortalPageโ€‹

Fetch a portal page by id

GET /v2/portal/pages/{id}

const { data } = await client.getPortalPage({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"slug": "dashboard",
"path": "/dashboard",
"schema": ["string"],
"visibility": {},
"content": {},
"design": {},
"blocks": {},
"order": 1,
"is_system": false,
"is_detail": false,
"detail_schema": "contact",
"is_public": true,
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"is_entry_route": false,
"is_deleted": false,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b",
"last_modified_at": "2021-02-09T12:41:43.662Z"
}

updatePortalPageโ€‹

Update a portal page by id

PUT /v2/portal/pages/{id}

const { data } = await client.updatePortalPage(
{
id: '123e4567-e89b-12d3-a456-426614174000',
},
{
slug: 'dashboard',
path: '/dashboard',
schema: ['string'],
visibility: {},
content: {},
design: {},
blocks: {},
order: 1,
is_system: false,
is_detail: false,
detail_schema: 'contact',
is_public: true,
parentId: 'c495fef9-eeca-4019-a989-8390dcd9825b',
is_entry_route: false,
is_deleted: false
},
)
Response
{
"slug": "dashboard",
"path": "/dashboard",
"schema": ["string"],
"visibility": {},
"content": {},
"design": {},
"blocks": {},
"order": 1,
"is_system": false,
"is_detail": false,
"detail_schema": "contact",
"is_public": true,
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"is_entry_route": false,
"is_deleted": false,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b",
"last_modified_at": "2021-02-09T12:41:43.662Z"
}

deletePortalPageโ€‹

Delete a portal page by id

DELETE /v2/portal/pages/{id}

const { data } = await client.deletePortalPage({
id: '123e4567-e89b-12d3-a456-426614174000',
})

getPortalPagesโ€‹

Fetch all portal pages

GET /v2/portal/pages

const { data } = await client.getPortalPages({
domain: 'example',
fields: 'example',
filter: 'example',
contract_id: 'example',
context_entities: 'example',
})
Response
[
{
"slug": "dashboard",
"path": "/dashboard",
"schema": ["string"],
"visibility": {},
"content": {},
"design": {},
"blocks": {},
"order": 1,
"is_system": false,
"is_detail": false,
"detail_schema": "contact",
"is_public": true,
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"is_entry_route": false,
"is_deleted": false,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b",
"last_modified_at": "2021-02-09T12:41:43.662Z"
}
]

createPortalPageโ€‹

Create a new portal page

POST /v2/portal/pages

const { data } = await client.createPortalPage(
{
domain: 'example',
},
{
slug: 'dashboard',
path: '/dashboard',
schema: ['string'],
visibility: {},
content: {},
design: {},
blocks: {},
order: 1,
is_system: false,
is_detail: false,
detail_schema: 'contact',
is_public: true,
parentId: 'c495fef9-eeca-4019-a989-8390dcd9825b',
is_entry_route: false,
is_deleted: false
},
)
Response
{
"slug": "dashboard",
"path": "/dashboard",
"schema": ["string"],
"visibility": {},
"content": {},
"design": {},
"blocks": {},
"order": 1,
"is_system": false,
"is_detail": false,
"detail_schema": "contact",
"is_public": true,
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"is_entry_route": false,
"is_deleted": false,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b",
"last_modified_at": "2021-02-09T12:41:43.662Z"
}

getPublicPagesโ€‹

Fetch all public portal pages

GET /v2/portal/public/pages

const { data } = await client.getPublicPages({
domain: 'example',
fields: 'example',
filter: 'example',
})
Response
[
{
"slug": "dashboard",
"path": "/dashboard",
"schema": ["string"],
"visibility": {},
"content": {},
"design": {},
"blocks": {},
"order": 1,
"is_system": false,
"is_detail": false,
"detail_schema": "contact",
"is_public": true,
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"is_entry_route": false,
"is_deleted": false,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b",
"last_modified_at": "2021-02-09T12:41:43.662Z"
}
]

getDefaultPagesโ€‹

Fetch all default portal pages

GET /v2/portal/pages/default

const { data } = await client.getDefaultPages()
Response
[
{
"slug": "dashboard",
"path": "/dashboard",
"schema": ["string"],
"visibility": {},
"content": {},
"design": {},
"blocks": {},
"order": 1,
"is_system": false,
"is_detail": false,
"detail_schema": "contact",
"is_public": true,
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"is_entry_route": false,
"is_deleted": false,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b",
"last_modified_at": "2021-02-09T12:41:43.662Z"
}
]

createPortalPageBlockโ€‹

Create a new portal page block

POST /v2/portal/pages/{id}/blocks

const { data } = await client.createPortalPageBlock(
{
id: '123e4567-e89b-12d3-a456-426614174000',
},
{
props: {
visibility: {},
content: {},
design: {}
},
parentId: 'c495fef9-eeca-4019-a989-8390dcd9825b',
type: 'tab',
order: 1
},
)
Response
{
"props": {
"visibility": {},
"content": {},
"design": {}
},
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"type": "tab",
"order": 1,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b"
}

getPortalPageBlocksโ€‹

Fetch all portal page blocks

GET /v2/portal/pages/{id}/blocks

const { data } = await client.getPortalPageBlocks({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
[
{
"props": {
"visibility": {},
"content": {},
"design": {}
},
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"type": "tab",
"order": 1,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b"
}
]

getPortalPageBlockโ€‹

Fetch a portal page block by id

GET /v2/portal/pages/{id}/blocks/{block_id}

const { data } = await client.getPortalPageBlock({
id: '123e4567-e89b-12d3-a456-426614174000',
block_id: 'example',
})
Response
{
"props": {
"visibility": {},
"content": {},
"design": {}
},
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"type": "tab",
"order": 1,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b"
}

updatePortalPageBlockโ€‹

Update a portal page block by id

PUT /v2/portal/pages/{id}/blocks/{block_id}

const { data } = await client.updatePortalPageBlock(
{
id: '123e4567-e89b-12d3-a456-426614174000',
block_id: 'example',
},
{
props: {
visibility: {},
content: {},
design: {}
},
parentId: 'c495fef9-eeca-4019-a989-8390dcd9825b',
type: 'tab',
order: 1
},
)
Response
{
"props": {
"visibility": {},
"content": {},
"design": {}
},
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"type": "tab",
"order": 1,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b"
}

deletePortalPageBlockโ€‹

Delete a portal page block by id

DELETE /v2/portal/pages/{id}/blocks/{block_id}

const { data } = await client.deletePortalPageBlock({
id: '123e4567-e89b-12d3-a456-426614174000',
block_id: 'example',
})

getUserEntryPointโ€‹

Get the entry point for the user

GET /v2/portal/public/user/entry-point

const { data } = await client.getUserEntryPoint({
email: 'example',
domain: 'example',
})
Response
{
"user_exists": true,
"entry_point": "PASSWORD",
"preferred_sso_providers": ["office-365-login"],
"is_soft_deleted": true
}

updateCampaignPortalBlockStatusโ€‹

Update Campaign Portal Block Status

PUT /v2/portal/campaign/{campaign_id}/entity:status

const { data } = await client.updateCampaignPortalBlockStatus(
{
campaign_id: 'example',
},
{
status: 'seen',
entity_refs: [
{
entity_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
entity_schema: 'string'
}
]
},
)
Response
{
"success": true,
"updated": 2,
"failed": 0,
"total": 2
}

updateNotificationsStatusโ€‹

Updates the statuses of multiple notifications at once.

PUT /v2/portal/notifications/entity:status

const { data } = await client.updateNotificationsStatus(
null,
{
notifications: [
{
id: 'string',
status: 'read'
}
]
},
)
Response
{
"message": "Notifications status updated successfully."
}

deRegisterMLoginUserโ€‹

Deregisters a user from the M Login client

DELETE /v2/portal/public/m-login/deregister/{client_id}/{user_id}

const { data } = await client.deRegisterMLoginUser({
client_id: 'example',
user_id: 'example',
})

notifyMLoginInterestChangeโ€‹

Notifies the interest change of a user in the M Login client

POST /v2/portal/public/m-login/notify-interest-change/{client_id}/{user_id}

const { data } = await client.notifyMLoginInterestChange(
{
client_id: 'example',
user_id: 'example',
},
{
resource_id: 'string',
user_id: 'string',
interest_tag: 'string',
action: 'string',
resource: {
resource_id: 'string',
description: 'string',
contact: 'string',
kind: 'string'
}
},
)

createPortalConfigโ€‹

Creates a new portal configuration.

POST /v3/portal/config

const { data } = await client.createPortalConfig(
null,
{
entity_actions: [
{
journey_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
slug: 'contact',
action_Label: { /* ... */ }
}
],
extensions: [
{
id: 'string',
status: 'installed',
options: {}
}
],
extension_hooks: {},
default_user_to_notify: {
onPendingUser: [
{ /* ... */ }
]
},
enabled: true,
name: 'Installer Portal',
domain: 'abc.com',
is_epilot_domain: true,
epilot_domain: 'example-portal-1.ecp.epilot.io',
domain_settings: {
is_custom_domain_enabled: true,
is_epilot_domain_enabled: true,
is_redirection_enabled: true
},
design_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
self_registration_setting: 'ALLOW_WITH_CONTACT_CREATION',
user_account_self_management: false,
feature_settings: {
start_page: true,
billing: true,
change_due_date: true,
new_design: true
},
accessToken: 'string',
advanced_mfa: {
enabled: true
},
auth_settings: {
passwordless_login: {
enabled: true
},
entry_point: 'PASSWORD',
preferred_sso_providers: ['office-365-login'],
auto_redirect_to_sso: true
},
cognito_details: {
cognito_user_pool_client_id: '6bsd0jkgoie74k2i8mrhc1vest',
cognito_user_pool_arn: 'arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341',
cognito_user_pool_id: 'eu-central-1_CUEQRNbUb',
password_policy: {
minimum_length: 8,
maximum_length: 256,
require_lowercase: true,
require_uppercase: true,
require_numbers: true,
require_symbols: true
}
},
config: 'string',
contact_identifiers: ['email', 'last_name'],
approval_state_attributes: {
contact: ['name', 'address'],
contract: ['installment_amount']
},
email_templates: {
confirmAccount: '5da0a718-c822-403d-9f5d-20d4584e0528',
advancedAuth: '5da0a718-c822-403d-9f5d-20d4584e0528',
advancedMFA: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeySignUp: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeySignInOneTimePassword: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeyLoginOTP: '5da0a718-c822-403d-9f5d-20d4584e0528',
forgotPassword: '5da0a718-c822-403d-9f5d-20d4584e0528',
invitation: '5da0a718-c822-403d-9f5d-20d4584e0528',
partnerInvitation: '5da0a718-c822-403d-9f5d-20d4584e0528',
onNewQuote: '5da0a718-c822-403d-9f5d-20d4584e0528',
onMapAPendingUser: '5da0a718-c822-403d-9f5d-20d4584e0528',
onDocUpload: '5da0a718-c822-403d-9f5d-20d4584e0528',
onWorkflowStepAssigned: '5da0a718-c822-403d-9f5d-20d4584e0528',
confirmEmailUpdate: '5da0a718-c822-403d-9f5d-20d4584e0528',
verifyCodeToSetPassword: '5da0a718-c822-403d-9f5d-20d4584e0528'
},
images: {
orderLeftTeaser: 'https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg',
orderRightTeaser: 'https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg',
welcomeBanner: 'https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg'
},
entity_identifiers: {
type: {
isEnabled: true,
attributes: ['contract_number']
}
},
contract_identifiers: [
{
name: 'email',
schema: 'contact'
},
{
name: 'last_name',
schema: 'contact'
},
/* ... 1 more */
],
contract_selector_config: {
show_inactive: true,
title_path: 'string'
},
registration_identifiers: [
{
name: 'last_name',
schema: 'contact'
},
{
name: 'contract_number',
schema: 'contract'
}
],
triggered_journeys: [
{
trigger_name: 'FIRST_LOGIN',
journey_id: '5da0a718-c822-403d-9f5d-20d4584e0528'
}
],
entity_edit_rules: [
{
slug: 'contact',
attribute: 'first_name',
rule_type: 'cadence',
cadence_period_type: 'days',
cadence_period: 1,
changes_allowed: 1,
grace_period: 1,
allowed_increment: '10%',
allowed_decrement: '10%',
number_of_days_before_restriction: 10
}
],
allowed_file_extensions: {
document: ['pdf'],
image: ['jpg'],
spreadsheet: ['xls'],
presentation: ['ppt'],
audioVideo: ['mp4'],
email: ['eml'],
archive: ['zip'],
cad: ['cad'],
calendar: ['ics'],
other: ['txt']
},
prevent_search_engine_indexing: true,
meter_reading_grace_period: 0,
inactive_contract_cutoff_years: 0,
is_dummy: true,
is_v3_item: true,
portal_id: '453ad7bf-86d5-46c8-8252-bcc868df5e3c',
portal_sk_v3: 'PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c',
origin: 'string',
pages: [
{
slug: 'dashboard',
path: '/dashboard',
schema: ['string'],
visibility: {},
content: {},
design: {},
blocks: {},
order: 1,
is_system: false,
is_detail: false,
detail_schema: 'contact',
is_public: true,
parentId: 'c495fef9-eeca-4019-a989-8390dcd9825b',
is_entry_route: false,
is_deleted: false
}
]
},
)
Response
{
"entity_actions": [
{
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"slug": "contact",
"action_Label": {}
}
],
"extensions": [
{
"id": "string",
"status": "installed",
"options": {}
}
],
"extension_hooks": {},
"default_user_to_notify": {
"onPendingUser": [
{}
]
},
"enabled": true,
"name": "Installer Portal",
"domain": "abc.com",
"is_epilot_domain": true,
"epilot_domain": "example-portal-1.ecp.epilot.io",
"domain_settings": {
"is_custom_domain_enabled": true,
"is_epilot_domain_enabled": true,
"is_redirection_enabled": true
},
"design_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"self_registration_setting": "ALLOW_WITH_CONTACT_CREATION",
"user_account_self_management": false,
"feature_settings": {
"start_page": true,
"billing": true,
"change_due_date": true,
"new_design": true
},
"accessToken": "string",
"advanced_mfa": {
"enabled": true
},
"auth_settings": {
"passwordless_login": {
"enabled": true
},
"entry_point": "PASSWORD",
"preferred_sso_providers": ["office-365-login"],
"auto_redirect_to_sso": true
},
"cognito_details": {
"cognito_user_pool_client_id": "6bsd0jkgoie74k2i8mrhc1vest",
"cognito_user_pool_arn": "arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341",
"cognito_user_pool_id": "eu-central-1_CUEQRNbUb",
"password_policy": {
"minimum_length": 8,
"maximum_length": 256,
"require_lowercase": true,
"require_uppercase": true,
"require_numbers": true,
"require_symbols": true
}
},
"config": "string",
"contact_identifiers": ["email", "last_name"],
"approval_state_attributes": {
"contact": ["name", "address"],
"contract": ["installment_amount"]
},
"email_templates": {
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
},
"images": {
"orderLeftTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg",
"orderRightTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg",
"welcomeBanner": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg"
},
"entity_identifiers": {
"type": {
"isEnabled": true,
"attributes": ["contract_number"]
}
},
"contract_identifiers": [
{
"name": "email",
"schema": "contact"
},
{
"name": "last_name",
"schema": "contact"
}
],
"contract_selector_config": {
"show_inactive": true,
"title_path": "string"
},
"registration_identifiers": [
{
"name": "last_name",
"schema": "contact"
},
{
"name": "contract_number",
"schema": "contract"
}
],
"triggered_journeys": [
{
"trigger_name": "FIRST_LOGIN",
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
],
"entity_edit_rules": [
{
"slug": "contact",
"attribute": "first_name",
"rule_type": "cadence",
"cadence_period_type": "days",
"cadence_period": 1,
"changes_allowed": 1,
"grace_period": 1,
"allowed_increment": "10%",
"allowed_decrement": "10%",
"number_of_days_before_restriction": 10
}
],
"allowed_file_extensions": {
"document": ["pdf"],
"image": ["jpg"],
"spreadsheet": ["xls"],
"presentation": ["ppt"],
"audioVideo": ["mp4"],
"email": ["eml"],
"archive": ["zip"],
"cad": ["cad"],
"calendar": ["ics"],
"other": ["txt"]
},
"prevent_search_engine_indexing": true,
"meter_reading_grace_period": 0,
"inactive_contract_cutoff_years": 0,
"is_dummy": true,
"is_v3_item": true,
"portal_id": "453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"portal_sk_v3": "PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"origin": "string",
"organization_id": 12345,
"org_settings": {
"canary": {
"enabled": true
},
"notracking": {
"enabled": true
}
},
"feature_flags": {},
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947",
"effect": "allow"
}
],
"identity_providers": [
{
"slug": "office-365-login",
"display_name": "Office 365 Login",
"oidc_config": {},
"mobile_oidc_config": {}
}
],
"pages": [
{
"slug": "dashboard",
"path": "/dashboard",
"schema": ["string"],
"visibility": {},
"content": {},
"design": {},
"blocks": {},
"order": 1,
"is_system": false,
"is_detail": false,
"detail_schema": "contact",
"is_public": true,
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"is_entry_route": false,
"is_deleted": false,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b",
"last_modified_at": "2021-02-09T12:41:43.662Z"
}
]
}

getPortalConfigV3โ€‹

Retrieves a specific portal configuration by ID.

GET /v3/portal/config/{portal_id}

const { data } = await client.getPortalConfigV3({
portal_id: 'example',
})
Response
{
"entity_actions": [
{
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"slug": "contact",
"action_Label": {}
}
],
"extensions": [
{
"id": "string",
"status": "installed",
"options": {}
}
],
"extension_hooks": {},
"default_user_to_notify": {
"onPendingUser": [
{}
]
},
"enabled": true,
"name": "Installer Portal",
"domain": "abc.com",
"is_epilot_domain": true,
"epilot_domain": "example-portal-1.ecp.epilot.io",
"domain_settings": {
"is_custom_domain_enabled": true,
"is_epilot_domain_enabled": true,
"is_redirection_enabled": true
},
"design_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"self_registration_setting": "ALLOW_WITH_CONTACT_CREATION",
"user_account_self_management": false,
"feature_settings": {
"start_page": true,
"billing": true,
"change_due_date": true,
"new_design": true
},
"accessToken": "string",
"advanced_mfa": {
"enabled": true
},
"auth_settings": {
"passwordless_login": {
"enabled": true
},
"entry_point": "PASSWORD",
"preferred_sso_providers": ["office-365-login"],
"auto_redirect_to_sso": true
},
"cognito_details": {
"cognito_user_pool_client_id": "6bsd0jkgoie74k2i8mrhc1vest",
"cognito_user_pool_arn": "arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341",
"cognito_user_pool_id": "eu-central-1_CUEQRNbUb",
"password_policy": {
"minimum_length": 8,
"maximum_length": 256,
"require_lowercase": true,
"require_uppercase": true,
"require_numbers": true,
"require_symbols": true
}
},
"config": "string",
"contact_identifiers": ["email", "last_name"],
"approval_state_attributes": {
"contact": ["name", "address"],
"contract": ["installment_amount"]
},
"email_templates": {
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
},
"images": {
"orderLeftTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg",
"orderRightTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg",
"welcomeBanner": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg"
},
"entity_identifiers": {
"type": {
"isEnabled": true,
"attributes": ["contract_number"]
}
},
"contract_identifiers": [
{
"name": "email",
"schema": "contact"
},
{
"name": "last_name",
"schema": "contact"
}
],
"contract_selector_config": {
"show_inactive": true,
"title_path": "string"
},
"registration_identifiers": [
{
"name": "last_name",
"schema": "contact"
},
{
"name": "contract_number",
"schema": "contract"
}
],
"triggered_journeys": [
{
"trigger_name": "FIRST_LOGIN",
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
],
"entity_edit_rules": [
{
"slug": "contact",
"attribute": "first_name",
"rule_type": "cadence",
"cadence_period_type": "days",
"cadence_period": 1,
"changes_allowed": 1,
"grace_period": 1,
"allowed_increment": "10%",
"allowed_decrement": "10%",
"number_of_days_before_restriction": 10
}
],
"allowed_file_extensions": {
"document": ["pdf"],
"image": ["jpg"],
"spreadsheet": ["xls"],
"presentation": ["ppt"],
"audioVideo": ["mp4"],
"email": ["eml"],
"archive": ["zip"],
"cad": ["cad"],
"calendar": ["ics"],
"other": ["txt"]
},
"prevent_search_engine_indexing": true,
"meter_reading_grace_period": 0,
"inactive_contract_cutoff_years": 0,
"is_dummy": true,
"is_v3_item": true,
"portal_id": "453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"portal_sk_v3": "PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"origin": "string",
"organization_id": 12345,
"org_settings": {
"canary": {
"enabled": true
},
"notracking": {
"enabled": true
}
},
"feature_flags": {},
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947",
"effect": "allow"
}
],
"identity_providers": [
{
"slug": "office-365-login",
"display_name": "Office 365 Login",
"oidc_config": {},
"mobile_oidc_config": {}
}
],
"pages": [
{
"slug": "dashboard",
"path": "/dashboard",
"schema": ["string"],
"visibility": {},
"content": {},
"design": {},
"blocks": {},
"order": 1,
"is_system": false,
"is_detail": false,
"detail_schema": "contact",
"is_public": true,
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"is_entry_route": false,
"is_deleted": false,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b",
"last_modified_at": "2021-02-09T12:41:43.662Z"
}
]
}

putPortalConfigโ€‹

Updates a specific portal configuration by ID.

PUT /v3/portal/config/{portal_id}

const { data } = await client.putPortalConfig(
{
portal_id: 'example',
},
{
entity_actions: [
{
journey_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
slug: 'contact',
action_Label: { /* ... */ }
}
],
extensions: [
{
id: 'string',
status: 'installed',
options: {}
}
],
extension_hooks: {},
default_user_to_notify: {
onPendingUser: [
{ /* ... */ }
]
},
enabled: true,
name: 'Installer Portal',
domain: 'abc.com',
is_epilot_domain: true,
epilot_domain: 'example-portal-1.ecp.epilot.io',
domain_settings: {
is_custom_domain_enabled: true,
is_epilot_domain_enabled: true,
is_redirection_enabled: true
},
design_id: '5da0a718-c822-403d-9f5d-20d4584e0528',
self_registration_setting: 'ALLOW_WITH_CONTACT_CREATION',
user_account_self_management: false,
feature_settings: {
start_page: true,
billing: true,
change_due_date: true,
new_design: true
},
accessToken: 'string',
advanced_mfa: {
enabled: true
},
auth_settings: {
passwordless_login: {
enabled: true
},
entry_point: 'PASSWORD',
preferred_sso_providers: ['office-365-login'],
auto_redirect_to_sso: true
},
cognito_details: {
cognito_user_pool_client_id: '6bsd0jkgoie74k2i8mrhc1vest',
cognito_user_pool_arn: 'arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341',
cognito_user_pool_id: 'eu-central-1_CUEQRNbUb',
password_policy: {
minimum_length: 8,
maximum_length: 256,
require_lowercase: true,
require_uppercase: true,
require_numbers: true,
require_symbols: true
}
},
config: 'string',
contact_identifiers: ['email', 'last_name'],
approval_state_attributes: {
contact: ['name', 'address'],
contract: ['installment_amount']
},
email_templates: {
confirmAccount: '5da0a718-c822-403d-9f5d-20d4584e0528',
advancedAuth: '5da0a718-c822-403d-9f5d-20d4584e0528',
advancedMFA: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeySignUp: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeySignInOneTimePassword: '5da0a718-c822-403d-9f5d-20d4584e0528',
journeyLoginOTP: '5da0a718-c822-403d-9f5d-20d4584e0528',
forgotPassword: '5da0a718-c822-403d-9f5d-20d4584e0528',
invitation: '5da0a718-c822-403d-9f5d-20d4584e0528',
partnerInvitation: '5da0a718-c822-403d-9f5d-20d4584e0528',
onNewQuote: '5da0a718-c822-403d-9f5d-20d4584e0528',
onMapAPendingUser: '5da0a718-c822-403d-9f5d-20d4584e0528',
onDocUpload: '5da0a718-c822-403d-9f5d-20d4584e0528',
onWorkflowStepAssigned: '5da0a718-c822-403d-9f5d-20d4584e0528',
confirmEmailUpdate: '5da0a718-c822-403d-9f5d-20d4584e0528',
verifyCodeToSetPassword: '5da0a718-c822-403d-9f5d-20d4584e0528'
},
images: {
orderLeftTeaser: 'https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg',
orderRightTeaser: 'https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg',
welcomeBanner: 'https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg'
},
entity_identifiers: {
type: {
isEnabled: true,
attributes: ['contract_number']
}
},
contract_identifiers: [
{
name: 'email',
schema: 'contact'
},
{
name: 'last_name',
schema: 'contact'
},
/* ... 1 more */
],
contract_selector_config: {
show_inactive: true,
title_path: 'string'
},
registration_identifiers: [
{
name: 'last_name',
schema: 'contact'
},
{
name: 'contract_number',
schema: 'contract'
}
],
triggered_journeys: [
{
trigger_name: 'FIRST_LOGIN',
journey_id: '5da0a718-c822-403d-9f5d-20d4584e0528'
}
],
entity_edit_rules: [
{
slug: 'contact',
attribute: 'first_name',
rule_type: 'cadence',
cadence_period_type: 'days',
cadence_period: 1,
changes_allowed: 1,
grace_period: 1,
allowed_increment: '10%',
allowed_decrement: '10%',
number_of_days_before_restriction: 10
}
],
allowed_file_extensions: {
document: ['pdf'],
image: ['jpg'],
spreadsheet: ['xls'],
presentation: ['ppt'],
audioVideo: ['mp4'],
email: ['eml'],
archive: ['zip'],
cad: ['cad'],
calendar: ['ics'],
other: ['txt']
},
prevent_search_engine_indexing: true,
meter_reading_grace_period: 0,
inactive_contract_cutoff_years: 0,
is_dummy: true,
is_v3_item: true,
portal_id: '453ad7bf-86d5-46c8-8252-bcc868df5e3c',
portal_sk_v3: 'PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c',
origin: 'string',
organization_id: 12345,
org_settings: {
canary: {
enabled: true
},
notracking: {
enabled: true
}
},
feature_flags: {},
grants: [
{
action: 'entity-read',
resource: 'entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947',
effect: 'allow'
}
],
identity_providers: [
{
slug: 'office-365-login',
display_name: 'Office 365 Login',
oidc_config: { /* ... */ },
mobile_oidc_config: { /* ... */ }
}
],
pages: [
{
slug: 'dashboard',
path: '/dashboard',
schema: ['string'],
visibility: {},
content: {},
design: {},
blocks: {},
order: 1,
is_system: false,
is_detail: false,
detail_schema: 'contact',
is_public: true,
parentId: 'c495fef9-eeca-4019-a989-8390dcd9825b',
is_entry_route: false,
is_deleted: false,
id: 'c495fef9-eeca-4019-a989-8390dcd9825b',
last_modified_at: '2021-02-09T12:41:43.662Z'
}
]
},
)
Response
{
"entity_actions": [
{
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"slug": "contact",
"action_Label": {}
}
],
"extensions": [
{
"id": "string",
"status": "installed",
"options": {}
}
],
"extension_hooks": {},
"default_user_to_notify": {
"onPendingUser": [
{}
]
},
"enabled": true,
"name": "Installer Portal",
"domain": "abc.com",
"is_epilot_domain": true,
"epilot_domain": "example-portal-1.ecp.epilot.io",
"domain_settings": {
"is_custom_domain_enabled": true,
"is_epilot_domain_enabled": true,
"is_redirection_enabled": true
},
"design_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"self_registration_setting": "ALLOW_WITH_CONTACT_CREATION",
"user_account_self_management": false,
"feature_settings": {
"start_page": true,
"billing": true,
"change_due_date": true,
"new_design": true
},
"accessToken": "string",
"advanced_mfa": {
"enabled": true
},
"auth_settings": {
"passwordless_login": {
"enabled": true
},
"entry_point": "PASSWORD",
"preferred_sso_providers": ["office-365-login"],
"auto_redirect_to_sso": true
},
"cognito_details": {
"cognito_user_pool_client_id": "6bsd0jkgoie74k2i8mrhc1vest",
"cognito_user_pool_arn": "arn:aws:cognito-idp:us-east-1:123412341234:userpool/us-east-1_123412341",
"cognito_user_pool_id": "eu-central-1_CUEQRNbUb",
"password_policy": {
"minimum_length": 8,
"maximum_length": 256,
"require_lowercase": true,
"require_uppercase": true,
"require_numbers": true,
"require_symbols": true
}
},
"config": "string",
"contact_identifiers": ["email", "last_name"],
"approval_state_attributes": {
"contact": ["name", "address"],
"contract": ["installment_amount"]
},
"email_templates": {
"confirmAccount": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedAuth": "5da0a718-c822-403d-9f5d-20d4584e0528",
"advancedMFA": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignUp": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeySignInOneTimePassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"journeyLoginOTP": "5da0a718-c822-403d-9f5d-20d4584e0528",
"forgotPassword": "5da0a718-c822-403d-9f5d-20d4584e0528",
"invitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"partnerInvitation": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onNewQuote": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onMapAPendingUser": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onDocUpload": "5da0a718-c822-403d-9f5d-20d4584e0528",
"onWorkflowStepAssigned": "5da0a718-c822-403d-9f5d-20d4584e0528",
"confirmEmailUpdate": "5da0a718-c822-403d-9f5d-20d4584e0528",
"verifyCodeToSetPassword": "5da0a718-c822-403d-9f5d-20d4584e0528"
},
"images": {
"orderLeftTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-left-teaser.jpeg",
"orderRightTeaser": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/order-right-teaser.jpeg",
"welcomeBanner": "https://epilot-bucket.s3.eu-central-1.amazonaws.com/12344/6538fddb-f0e9-4f0f-af51-6e57891ff20a/welcome-banner.jpeg"
},
"entity_identifiers": {
"type": {
"isEnabled": true,
"attributes": ["contract_number"]
}
},
"contract_identifiers": [
{
"name": "email",
"schema": "contact"
},
{
"name": "last_name",
"schema": "contact"
}
],
"contract_selector_config": {
"show_inactive": true,
"title_path": "string"
},
"registration_identifiers": [
{
"name": "last_name",
"schema": "contact"
},
{
"name": "contract_number",
"schema": "contract"
}
],
"triggered_journeys": [
{
"trigger_name": "FIRST_LOGIN",
"journey_id": "5da0a718-c822-403d-9f5d-20d4584e0528"
}
],
"entity_edit_rules": [
{
"slug": "contact",
"attribute": "first_name",
"rule_type": "cadence",
"cadence_period_type": "days",
"cadence_period": 1,
"changes_allowed": 1,
"grace_period": 1,
"allowed_increment": "10%",
"allowed_decrement": "10%",
"number_of_days_before_restriction": 10
}
],
"allowed_file_extensions": {
"document": ["pdf"],
"image": ["jpg"],
"spreadsheet": ["xls"],
"presentation": ["ppt"],
"audioVideo": ["mp4"],
"email": ["eml"],
"archive": ["zip"],
"cad": ["cad"],
"calendar": ["ics"],
"other": ["txt"]
},
"prevent_search_engine_indexing": true,
"meter_reading_grace_period": 0,
"inactive_contract_cutoff_years": 0,
"is_dummy": true,
"is_v3_item": true,
"portal_id": "453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"portal_sk_v3": "PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"origin": "string",
"organization_id": 12345,
"org_settings": {
"canary": {
"enabled": true
},
"notracking": {
"enabled": true
}
},
"feature_flags": {},
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:f7c22299-ca72-4bca-8538-0a88eeefc947",
"effect": "allow"
}
],
"identity_providers": [
{
"slug": "office-365-login",
"display_name": "Office 365 Login",
"oidc_config": {},
"mobile_oidc_config": {}
}
],
"pages": [
{
"slug": "dashboard",
"path": "/dashboard",
"schema": ["string"],
"visibility": {},
"content": {},
"design": {},
"blocks": {},
"order": 1,
"is_system": false,
"is_detail": false,
"detail_schema": "contact",
"is_public": true,
"parentId": "c495fef9-eeca-4019-a989-8390dcd9825b",
"is_entry_route": false,
"is_deleted": false,
"id": "c495fef9-eeca-4019-a989-8390dcd9825b",
"last_modified_at": "2021-02-09T12:41:43.662Z"
}
]
}

deletePortalConfigโ€‹

Deletes a specific portal configuration by ID.

DELETE /v3/portal/config/{portal_id}

const { data } = await client.deletePortalConfig({
portal_id: 'example',
})

listAllPortalConfigsโ€‹

Retrieves all portal configurations.

GET /v3/portal/configs

const { data } = await client.listAllPortalConfigs()
Response
{
"data": [
{
"entity_actions": [],
"extensions": [],
"extension_hooks": {},
"default_user_to_notify": {},
"enabled": true,
"name": "Installer Portal",
"domain": "abc.com",
"is_epilot_domain": true,
"epilot_domain": "example-portal-1.ecp.epilot.io",
"domain_settings": {},
"design_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"self_registration_setting": "ALLOW_WITH_CONTACT_CREATION",
"user_account_self_management": false,
"feature_settings": {},
"accessToken": "string",
"advanced_mfa": {},
"auth_settings": {},
"cognito_details": {},
"config": "string",
"contact_identifiers": ["email", "last_name"],
"approval_state_attributes": {},
"email_templates": {},
"images": {},
"entity_identifiers": {},
"contract_identifiers": [],
"contract_selector_config": {},
"registration_identifiers": [],
"triggered_journeys": [],
"entity_edit_rules": [],
"allowed_file_extensions": {},
"prevent_search_engine_indexing": true,
"meter_reading_grace_period": 0,
"inactive_contract_cutoff_years": 0,
"is_dummy": true,
"is_v3_item": true,
"portal_id": "453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"portal_sk_v3": "PORTAL_CONFIG#453ad7bf-86d5-46c8-8252-bcc868df5e3c",
"origin": "string",
"organization_id": 12345,
"org_settings": {},
"feature_flags": {},
"grants": [],
"identity_providers": [],
"pages": []
}
]
}

swapPortalConfigโ€‹

Swaps the portal configuration of two portals.

POST /v3/portal/config/swap

const { data } = await client.swapPortalConfig(
null,
{
source_portal_id: '453ad7bf-86d5-46c8-8252-bcc868df5e3c',
target_portal_id: '453ad7bf-86d5-46c8-8252-bcc868df5e3c',
items_to_swap: ['all']
},
)
Response
{
"message": "Domain and users swapped successfully."
}

invitePartnerโ€‹

Invites a partner to a portal

POST /v3/portal/partner/invite

const { data } = await client.invitePartner(
null,
{
email: 'string',
represents_contact_list: ['5da0a718-c822-403d-9f5d-20d4584e0528']
},
)
Response
{
"message": "User invited successfully"
}

listBusinessPartnersโ€‹

Lists all business partners linked to the businessaccount

GET /v3/portal/partner/list

const { data } = await client.listBusinessPartners()
Response
{
"data": [
{
"_id": "5da0a718-c822-403d-9f5d-20d4584e0528",
"has_portal_user": true,
"registration_status": "Registration Pending",
"email": "john.doe@example.com",
"_title": "John Doe",
"first_name": "John",
"last_name": "Doe",
"access_status": true
}
]
}

resendPartnerInvitationโ€‹

Resends an invitation email to a partner

POST /v3/portal/partner/{partner_id}/resend-invitation

const { data } = await client.resendPartnerInvitation({
partner_id: 'example',
})
Response
{
"message": "Partner invitation resent successfully"
}

revokePartnerโ€‹

Revokes a partner from a portal

DELETE /v3/portal/partner/{partner_id}/revoke

const { data } = await client.revokePartner({
partner_id: 'example',
})
Response
{
"message": "Partner revoked from portal successfully"
}

disablePartnerโ€‹

Disables a partner from a portal

POST /v3/portal/partner/{partner_id}/disable

const { data } = await client.disablePartner({
partner_id: 'example',
})
Response
{
"message": "Partner disabled from portal successfully"
}

enablePartnerโ€‹

Enables a partner from a portal

POST /v3/portal/partner/{partner_id}/enable

const { data } = await client.enablePartner({
partner_id: 'example',
})
Response
{
"message": "Partner enabled from portal successfully"
}

Schemasโ€‹

ContextEntityโ€‹

An entity reference for context-aware operations

type ContextEntity = {
entity_schema: string
entity_id: string // uuid
}

ContextEntitiesโ€‹

Additional entities to include in the context for variable interpolation. Portal User and Contact entities are automatically part of the context.

type ContextEntities = Array<{
entity_schema: string
entity_id: string // uuid
}>

ErrorRespโ€‹

type ErrorResp = {
message?: string
}

FailedRuleErrorRespโ€‹

type FailedRuleErrorResp = {
message?: string
failed_rule?: object
}

EmailTemplatesโ€‹

Email templates used for authentication and internal processes

type EmailTemplates = {
confirmAccount?: string // uuid
advancedAuth?: string // uuid
advancedMFA?: string // uuid
journeySignUp?: string // uuid
journeySignInOneTimePassword?: string // uuid
journeyLoginOTP?: string // uuid
forgotPassword?: string // uuid
invitation?: string // uuid
partnerInvitation?: string // uuid
onNewQuote?: string // uuid
onMapAPendingUser?: string // uuid
onDocUpload?: string // uuid
onWorkflowStepAssigned?: string // uuid
confirmEmailUpdate?: string // uuid
verifyCodeToSetPassword?: string // uuid
}

DeleteEntityFileโ€‹

type DeleteEntityFile = {
entity_id: string // uuid
entity_type: string
file_entity_ids: string // uuid[]
}

SaveEntityFileโ€‹

type SaveEntityFile = {
entity_id: string // uuid
entity_type: string
files: Array<{
filename: string
access_control?: "private" | "public-read"
s3ref: {
bucket: { ... }
key: { ... }
}
}>
}

SavePortalFileโ€‹

type SavePortalFile = {
origin: string
files: Array<{
filename?: string
file_type: string
_tags?: string[]
s3ref?: {
bucket: { ... }
key: { ... }
}
}>
}

ExtraSchemaAttributesโ€‹

type ExtraSchemaAttributes = Array<{
name: string
label: string
group: string
}>

Originโ€‹

Origin of the portal

type Origin = string

AllowedFileExtensionsโ€‹

Allowed file extensions for upload

type AllowedFileExtensions = {
document?: string[]
image?: string[]
spreadsheet?: string[]
presentation?: string[]
audioVideo?: string[]
email?: string[]
archive?: string[]
cad?: string[]
calendar?: string[]
other?: string[]
}

UpdateOnlyPortalConfigAttributesโ€‹

type UpdateOnlyPortalConfigAttributes = {
entity_actions?: Array<{
journey_id?: string // uuid
slug?: string
action_Label?: {
en?: { ... }
de?: { ... }
}
}>
extensions?: Array<{
id: string
status: "installed" | "enabled"
options?: Record<string, string>
}>
extension_hooks?: Record<string, {
app_id: string
extension_id: string
hook_id: string
}>
default_user_to_notify?: {
onPendingUser?: Array<{
type?: { ... }
user_id?: { ... }
display_name?: { ... }
image_uri?: { ... }
org_id?: { ... }
email?: { ... }
phone?: { ... }
}>
}
}

CommonConfigAttributesโ€‹

type CommonConfigAttributes = {
enabled?: boolean
name?: string
domain: string
is_epilot_domain?: boolean
epilot_domain?: string
domain_settings?: {
is_custom_domain_enabled?: boolean
is_epilot_domain_enabled?: boolean
is_redirection_enabled?: boolean
}
design_id?: string // uuid
self_registration_setting?: "ALLOW_WITH_CONTACT_CREATION" | "ALLOW_WITHOUT_CONTACT_CREATION" | "DENY" | "ALWAYS_CREATE_CONTACT" | "DISALLOW_COMPLETELY" | "BLOCK_IF_PORTAL_USER_EXISTS"
user_account_self_management?: boolean
feature_settings?: {
start_page?: boolean
billing?: boolean
change_due_date?: boolean
new_design?: boolean
}
accessToken?: string
advanced_mfa?: {
enabled?: boolean
}
auth_settings?: {
passwordless_login?: {
enabled?: { ... }
}
entry_point?: "PASSWORD" | "SSO"
preferred_sso_providers?: string[]
auto_redirect_to_sso?: boolean
}
cognito_details?: {
cognito_user_pool_client_id?: string
cognito_user_pool_arn?: string
cognito_user_pool_id?: string
password_policy?: {
minimum_length?: { ... }
maximum_length?: { ... }
require_lowercase?: { ... }
require_uppercase?: { ... }
require_numbers?: { ... }
require_symbols?: { ... }
}
}
config?: string
contact_identifiers?: string[]
approval_state_attributes?: Record<string, string[]>
email_templates?: {
confirmAccount?: string // uuid
advancedAuth?: string // uuid
advancedMFA?: string // uuid
journeySignUp?: string // uuid
journeySignInOneTimePassword?: string // uuid
journeyLoginOTP?: string // uuid
forgotPassword?: string // uuid
invitation?: string // uuid
partnerInvitation?: string // uuid
onNewQuote?: string // uuid
onMapAPendingUser?: string // uuid
onDocUpload?: string // uuid
onWorkflowStepAssigned?: string // uuid
confirmEmailUpdate?: string // uuid
verifyCodeToSetPassword?: string // uuid
}
images?: {
orderLeftTeaser?: string
orderRightTeaser?: string
welcomeBanner?: string
}
entity_identifiers?: {
type?: {
isEnabled?: { ... }
attributes?: { ... }
}
}
contract_identifiers?: Array<{
name?: string
schema?: string
}>
contract_selector_config?: {
show_inactive?: boolean
title_path?: string
}
registration_identifiers?: Array<{
name?: string
schema?: string
}>
triggered_journeys?: Array<{
trigger_name?: "FIRST_LOGIN" | "ACCEPT_ORDER" | "DECLINE_ORDER"
journey_id?: string // uuid
}>
entity_edit_rules?: Array<{
slug?: string
attribute?: string
rule_type?: "cadence" | "relative_to_current_value" | "days_before_date" | "overdue_payments"
cadence_period_type?: "days" | "weeks" | "months"
cadence_period?: number
changes_allowed?: number
grace_period?: number
// ...
}

UpsertPortalConfigโ€‹

type UpsertPortalConfig = {
entity_actions?: Array<{
journey_id?: string // uuid
slug?: string
action_Label?: {
en?: { ... }
de?: { ... }
}
}>
extensions?: Array<{
id: string
status: "installed" | "enabled"
options?: Record<string, string>
}>
extension_hooks?: Record<string, {
app_id: string
extension_id: string
hook_id: string
}>
default_user_to_notify?: {
onPendingUser?: Array<{
type?: { ... }
user_id?: { ... }
display_name?: { ... }
image_uri?: { ... }
org_id?: { ... }
email?: { ... }
phone?: { ... }
}>
}
enabled?: boolean
name?: string
domain: string
is_epilot_domain?: boolean
epilot_domain?: string
domain_settings?: {
is_custom_domain_enabled?: boolean
is_epilot_domain_enabled?: boolean
is_redirection_enabled?: boolean
}
design_id?: string // uuid
self_registration_setting?: "ALLOW_WITH_CONTACT_CREATION" | "ALLOW_WITHOUT_CONTACT_CREATION" | "DENY" | "ALWAYS_CREATE_CONTACT" | "DISALLOW_COMPLETELY" | "BLOCK_IF_PORTAL_USER_EXISTS"
user_account_self_management?: boolean
feature_settings?: {
start_page?: boolean
billing?: boolean
change_due_date?: boolean
new_design?: boolean
}
accessToken?: string
advanced_mfa?: {
enabled?: boolean
}
auth_settings?: {
passwordless_login?: {
enabled?: { ... }
}
entry_point?: "PASSWORD" | "SSO"
preferred_sso_providers?: string[]
auto_redirect_to_sso?: boolean
}
cognito_details?: {
cognito_user_pool_client_id?: string
cognito_user_pool_arn?: string
cognito_user_pool_id?: string
password_policy?: {
minimum_length?: { ... }
maximum_length?: { ... }
require_lowercase?: { ... }
require_uppercase?: { ... }
require_numbers?: { ... }
require_symbols?: { ... }
}
}
config?: string
contact_identifiers?: string[]
approval_state_attributes?: Record<string, string[]>
email_templates?: {
confirmAccount?: string // uuid
advancedAuth?: string // uuid
advancedMFA?: string // uuid
journeySignUp?: string // uuid
journeySignInOneTimePassword?: string // uuid
journeyLoginOTP?: string // uuid
forgotPassword?: string // uuid
invitation?: string // uuid
partnerInvitation?: string // uuid
onNewQuote?: string // uuid
onMapAPendingUser?: string // uuid
onDocUpload?: string // uuid
onWorkflowStepAssigned?: string // uuid
confirmEmailUpdate?: string // uuid
verifyCodeToSetPassword?: string // uuid
}
images?: {
orderLeftTeaser?: string
orderRightTeaser?: string
welcomeBanner?: string
}
entity_identifiers?: {
// ...
}

PortalConfigโ€‹

type PortalConfig = {
enabled?: boolean
name?: string
domain: string
is_epilot_domain?: boolean
epilot_domain?: string
domain_settings?: {
is_custom_domain_enabled?: boolean
is_epilot_domain_enabled?: boolean
is_redirection_enabled?: boolean
}
design_id?: string // uuid
self_registration_setting?: "ALLOW_WITH_CONTACT_CREATION" | "ALLOW_WITHOUT_CONTACT_CREATION" | "DENY" | "ALWAYS_CREATE_CONTACT" | "DISALLOW_COMPLETELY" | "BLOCK_IF_PORTAL_USER_EXISTS"
user_account_self_management?: boolean
feature_settings?: {
start_page?: boolean
billing?: boolean
change_due_date?: boolean
new_design?: boolean
}
accessToken?: string
advanced_mfa?: {
enabled?: boolean
}
auth_settings?: {
passwordless_login?: {
enabled?: { ... }
}
entry_point?: "PASSWORD" | "SSO"
preferred_sso_providers?: string[]
auto_redirect_to_sso?: boolean
}
cognito_details?: {
cognito_user_pool_client_id?: string
cognito_user_pool_arn?: string
cognito_user_pool_id?: string
password_policy?: {
minimum_length?: { ... }
maximum_length?: { ... }
require_lowercase?: { ... }
require_uppercase?: { ... }
require_numbers?: { ... }
require_symbols?: { ... }
}
}
config?: string
contact_identifiers?: string[]
approval_state_attributes?: Record<string, string[]>
email_templates?: {
confirmAccount?: string // uuid
advancedAuth?: string // uuid
advancedMFA?: string // uuid
journeySignUp?: string // uuid
journeySignInOneTimePassword?: string // uuid
journeyLoginOTP?: string // uuid
forgotPassword?: string // uuid
invitation?: string // uuid
partnerInvitation?: string // uuid
onNewQuote?: string // uuid
onMapAPendingUser?: string // uuid
onDocUpload?: string // uuid
onWorkflowStepAssigned?: string // uuid
confirmEmailUpdate?: string // uuid
verifyCodeToSetPassword?: string // uuid
}
images?: {
orderLeftTeaser?: string
orderRightTeaser?: string
welcomeBanner?: string
}
entity_identifiers?: {
type?: {
isEnabled?: { ... }
attributes?: { ... }
}
}
contract_identifiers?: Array<{
name?: string
schema?: string
}>
contract_selector_config?: {
show_inactive?: boolean
title_path?: string
}
registration_identifiers?: Array<{
name?: string
schema?: string
}>
triggered_journeys?: Array<{
trigger_name?: "FIRST_LOGIN" | "ACCEPT_ORDER" | "DECLINE_ORDER"
journey_id?: string // uuid
}>
entity_edit_rules?: Array<{
slug?: string
attribute?: string
rule_type?: "cadence" | "relative_to_current_value" | "days_before_date" | "overdue_payments"
cadence_period_type?: "days" | "weeks" | "months"
cadence_period?: number
changes_allowed?: number
grace_period?: number
// ...
}

UpsertPortalWidgetโ€‹

type UpsertPortalWidget = {
widgets: Array<{
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: { ... }
de?: { ... }
}
subHeadline?: {
en?: { ... }
de?: { ... }
}
schema?: string
} | {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: { ... }
de?: { ... }
}
subHeadline?: {
en?: { ... }
de?: { ... }
}
content?: string
} | {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: { ... }
de?: { ... }
}
subHeadline?: {
en?: { ... }
de?: { ... }
}
actions?: Array<{
_id: { ... }
type: { ... }
label: { ... }
url: { ... }
rules?: { ... }
}>
} | {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: { ... }
de?: { ... }
}
subHeadline?: {
en?: { ... }
de?: { ... }
}
imageUrl?: string
button?: {
label?: { ... }
url?: { ... }
}
} | {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: { ... }
de?: { ... }
}
subHeadline?: {
en?: { ... }
de?: { ... }
}
} | {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: { ... }
de?: { ... }
}
subHeadline?: {
en?: { ... }
de?: { ... }
}
} | {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: { ... }
de?: { ... }
}
subHeadline?: {
en?: { ... }
de?: { ... }
}
schema?: string
// ...
}

DomainSettingsโ€‹

Domain settings for the portal

type DomainSettings = {
is_custom_domain_enabled?: boolean
is_epilot_domain_enabled?: boolean
is_redirection_enabled?: boolean
}

WidgetBaseโ€‹

type WidgetBase = {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
}

EntityWidgetโ€‹

type EntityWidget = {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
schema?: string
}

MeterReadingWidgetโ€‹

type MeterReadingWidget = {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
schema?: string
}

MeterChartWidgetโ€‹

type MeterChartWidget = {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
schema?: string
}

WidgetActionโ€‹

type WidgetAction = {
_id: string
type: "link" | "journey"
label: {
en?: string
de?: string
}
url: string
rules?: Array<{
attribute: string
attribute_value: string
entity: string
}>
}

ActionWidgetโ€‹

type ActionWidget = {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
actions?: Array<{
_id: string
type: "link" | "journey"
label: {
en?: { ... }
de?: { ... }
}
url: string
rules?: Array<{
attribute: { ... }
attribute_value: { ... }
entity: { ... }
}>
}>
}

TeaserWidgetโ€‹

type TeaserWidget = {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
imageUrl?: string
button?: {
label?: {
en?: { ... }
de?: { ... }
}
url?: string
}
}

ContentWidgetโ€‹

type ContentWidget = {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
content?: string
}

DocumentWidgetโ€‹

type DocumentWidget = {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
}

PaymentWidgetโ€‹

type PaymentWidget = {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
}

CampaignWidgetโ€‹

type CampaignWidget = {
campaign_id?: string
}

PortalWidgetโ€‹

type PortalWidget = {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
schema?: string
} | {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
content?: string
} | {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
actions?: Array<{
_id: string
type: "link" | "journey"
label: {
en?: { ... }
de?: { ... }
}
url: string
rules?: Array<{
attribute: { ... }
attribute_value: { ... }
entity: { ... }
}>
}>
} | {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
imageUrl?: string
button?: {
label?: {
en?: { ... }
de?: { ... }
}
url?: string
}
} | {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
} | {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
headline?: {
en?: string
de?: string
}
subHeadline?: {
en?: string
de?: string
}
} | {
id: string
type: "ACTION_WIDGET" | "CONTENT_WIDGET" | "ENTITY_WIDGET" | "TEASER_WIDGET" | "DOCUMENT_WIDGET" | "PAYMENT_WIDGET" | "METER_READING_WIDGET" | "METER_CHART_WIDGET" | "CAMPAIGN_WIDGET"
listIndex: number
// ...
}

ContactCountRequestโ€‹

type ContactCountRequest = {
orgId: string
contactIdentifiers: Record<string, string>
}

ContactExistsRequestโ€‹

type ContactExistsRequest = {
org_id: string
registration_identifiers: Record<string, Record<string, string>>
}

UserRequestโ€‹

type UserRequest = {
email?: string
first_name?: string
last_name?: string
contactId?: string // uuid
}

CreateUserRequestโ€‹

type CreateUserRequest = {
email?: string
first_name?: string
last_name?: string
contactId?: string // uuid
orgId?: string
password?: string
contactIdentifiers?: Record<string, string>
registration_identifiers?: Record<string, Record<string, string>>
account_id?: string
}

OrganizationSettingsโ€‹

type OrganizationSettings = {
automation_entity_mapping?: {
enabled?: boolean
}
automation_preview?: {
enabled?: boolean
}
central_inbox_preview_setting?: {
enabled?: boolean
}
contracts_preview_setting?: {
enabled?: boolean
}
disable_ivy?: {
enabled?: boolean
}
double_opt_in?: {
enabled?: boolean
}
ecommerce_catalog_preview?: {
enabled?: boolean
}
ecommerce_opportunities_preview?: {
enabled?: boolean
}
ecommerce_preview?: {
enabled?: boolean
}
end_customer_portal?: {
enabled?: boolean
}
installer_portal?: {
enabled?: boolean
}
entity_schema_builder?: {
enabled?: boolean
}
logic_editor_preview?: {
enabled?: boolean
}
new_navigation?: {
enabled?: boolean
}
partnering?: {
enabled?: boolean
}
product-availability?: {
enabled?: boolean
}
sso?: {
enabled?: boolean
}
submission_preview?: {
enabled?: boolean
}
user_roles_preview?: {
enabled?: boolean
}
}

AuthConfigโ€‹

type AuthConfig = {
user_pool_id: string
user_pool_client_id: string
user_pool_identity_pool_id?: string
portal_id: string
}

Existsโ€‹

type Exists = {
exists: boolean
active?: boolean
}

EntitySlugโ€‹

URL-friendly identifier for the entity schema

type EntitySlug = string

EntityIdโ€‹

Entity ID

type EntityId = string // uuid

BaseEntityโ€‹

type BaseEntity = {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
}

Schemaโ€‹

type Schema = {
slug?: string
}

Entityโ€‹

type Entity = Record<string, unknown>

EntityTemplatesโ€‹

type EntityTemplates = {
templates_output?: Record<string, string | Record<string, string>>
}

EntityItemโ€‹

type EntityItem = {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
templates_output?: Record<string, string | Record<string, string>>
_schema: string
}

EntityResponseโ€‹

Response for entity get request

type EntityResponse = {
result?: {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
templates_output?: Record<string, string | Record<string, string>>
_schema: string
}
}

EntityResponseWithHitsโ€‹

Response for entity search requests

type EntityResponseWithHits = {
results?: Array<{
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
templates_output?: Record<string, string | Record<string, string>>
_schema: string
}>
pagination?: {
from?: number
size?: number
total?: number
has_more?: boolean
}
hits?: number
}

EntityResponseGroupedWithHitsโ€‹

Response for entity search requests, but with groupings

type EntityResponseGroupedWithHits = {
groups?: Array<{
group?: string
group_title?: string
count?: number
results?: Array<{
_id: { ... }
_title: { ... }
_org: { ... }
_tags?: { ... }
_created_at: { ... }
_updated_at: { ... }
templates_output?: { ... }
_schema: { ... }
}>
pagination?: {
from?: { ... }
size?: { ... }
total?: { ... }
has_more?: { ... }
}
}>
groups_pagination?: {
has_more?: boolean
after_key?: Record<string, string>
}
hits?: number
}

PortalUserโ€‹

The portal user entity

type PortalUser = {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
_schema: "portal_user"
}

Contactโ€‹

The mapped contact of the portal user

type Contact = {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
_schema: "contact"
}

WorfklowIdentifierโ€‹

Workflow identifier object

type WorfklowIdentifier = {
defition_id?: string
name?: string
}

Meterโ€‹

The meter entity

type Meter = {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
_schema: "meter"
}

Orderโ€‹

The order entity

type Order = {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
_schema: "order"
}

Opportunityโ€‹

The opportunity entity

type Opportunity = {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
_schema: "opportunity"
}

Contractโ€‹

The contract entity

type Contract = {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
contract_name?: string
contract_number?: string
status?: "draft" | "in_approval_process" | "approved" | "active" | "deactivated" | "revoked" | "terminated" | "expired"
description?: string
account_number?: string
branch?: "power" | "gas" | "water" | "waste_water" | "district_heating"
billing_address?: string
delivery_address?: string
additional_addresses?: string
termination_date?: string
termination_reason?: string
billing_period?: "weekly" | "monthly" | "every_quarter" | "every_6_months" | "yearly"
billing_duration_amount?: number
renewal_duration_amount?: number
renewal_duration_unit?: "weeks" | "months" | "years"
notice_time_amount?: number
notice_time_unit?: "weeks" | "months" | "years"
start_date?: string
billing_due_day?: number
installment_amount?: number
balance?: number
balance_currency?: string
}

Fileโ€‹

The file entity

type File = {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
_schema: "file"
}

Productโ€‹

The product entity

type Product = {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
_schema: "product"
}

ActivityIdโ€‹

See https://github.com/ulid/spec

type ActivityId = string // ulid

ActivityCallerContextโ€‹

type ActivityCallerContext = {
PortalAuth?: {
token?: {
sub?: { ... }
email?: { ... }
cognito:username?: { ... }
custom:portal_user_id?: { ... }
custom:contact_entity_id?: { ... }
}
}
}

Activityโ€‹

type Activity = {
type: string
title: string
message: string
payload?: Record<string, unknown>
}

EntityEditRuleโ€‹

type EntityEditRule = {
slug?: string
attribute?: string
rule_type?: string
cadence_period_type?: string
changes_allowed?: number
cadence_period?: number
allowed_decrement?: string
allowed_increment?: string
number_of_days_before_restriction?: number
grace_period?: number
}

ActivityItemโ€‹

type ActivityItem = {
_id?: string // ulid
timestamp?: string // date-time
type: string
title: string
message: string
payload?: {
entity?: {
id?: { ... }
schema?: { ... }
}
caller?: {
PortalAuth?: { ... }
}
}
}

FileItemโ€‹

type FileItem = {
filename?: string
access_control?: "private" | "public-read"
file_date?: string // date-time
public_url?: string // url
type?: "document" | "document_template" | "text" | "image" | "video" | "audio" | "spreadsheet" | "presentation" | "font" | "archive" | "application" | "unknown"
mime_type?: string
_relations?: Array<{
entity_id?: string // uuid
_schema?: string
_title?: string
}>
is_new?: boolean
}

EntityFileCountโ€‹

type EntityFileCount = {
entity_id: string // uuid
_schema: string
_title?: string
file_count: number
}

AdminUserโ€‹

type AdminUser = {
type?: string
user_id?: string
display_name?: string
image_uri?: {
original?: string
thumbnail_32?: string
thumbnail_64?: string
key?: string
}
org_id?: string
email?: string
phone?: string
}

Grantโ€‹

type Grant = {
action: string
resource?: string
effect?: "allow" | "deny"
}

ActionLabelโ€‹

type ActionLabel = {
en?: string
de?: string
}

Ruleโ€‹

type Rule = {
entity?: string
attribute?: string
attribute_value?: string
}

JourneyActionsโ€‹

type JourneyActions = {
journey_id?: string
action_label?: {
en?: string
de?: string
}
slug?: string
rules?: Array<{
entity?: string
attribute?: string
attribute_value?: string
}>
}
type ExternalLink = {
id: string
label: Record<string, string>
type: "link" | "journey" | "seamless"
link: string
rules?: object[]
attribute?: string
entity?: string
attribute_value?: string
icon?: {
name?: string
color?: string
size?: number
}
extension_link_id?: string[]
}

WorkflowExecutionโ€‹

type WorkflowExecution = Record<string, unknown>

WorkflowStepโ€‹

type WorkflowStep = Record<string, unknown>

BaseBillingEventโ€‹

A base billing event to be inherited by all billing events.

type BaseBillingEvent = {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
}

InstallmentEventโ€‹

An entity that describes an installment billing event.

type InstallmentEvent = {
billing_amount?: number
billing_amount_decimal?: string
billing_currency?: string
external_id?: string
contract: {
$relation?: Array<{
entity_id?: { ... }
}>
}
type: "installment"
due_date: string // date
paid_date?: string // date
}

ReimbursementEventโ€‹

An entity that describes a reimbursement billing event.

type ReimbursementEvent = {
billing_amount?: number
billing_amount_decimal?: string
billing_currency?: string
external_id?: string
contract: {
$relation?: Array<{
entity_id?: { ... }
}>
}
type: "reimbursement"
due_date?: string // date
paid_date?: string // date
}

BillingEventโ€‹

An entity that describes a billing event such as a future installment or a reimbursement back to the customer.

type BillingEvent = {
billing_amount?: number
billing_amount_decimal?: string
billing_currency?: string
external_id?: string
contract: {
$relation?: Array<{
entity_id?: { ... }
}>
}
type: "installment"
due_date: string // date
paid_date?: string // date
} | {
billing_amount?: number
billing_amount_decimal?: string
billing_currency?: string
external_id?: string
contract: {
$relation?: Array<{
entity_id?: { ... }
}>
}
type: "reimbursement"
due_date?: string // date
paid_date?: string // date
}

BillingAccountโ€‹

A billing account

type BillingAccount = {
_id: string // uuid
_title: string
_org: string
_tags?: string[]
_created_at: string // date-time
_updated_at: string // date-time
}

Balanceโ€‹

type Balance = {
balance?: number
balance_decimal?: number
balance_currency?: string
}

Currencyโ€‹

Currency code in ISO 4217 format

type Currency = string

EntityGetParamsโ€‹

type EntityGetParams = {
slug: string
entity_id?: string // uuid
hydrate?: boolean
fields?: string[]
templates?: Record<string, string | Record<string, string>>
filters?: object[]
filters_context?: Record<string, boolean | string>[]
targets?: string // uuid[]
}

EntitySearchParamsโ€‹

type EntitySearchParams = {
slug: string | string[]
q?: string
q_fields?: string[]
group?: string
group_title?: string
group_size?: number
group_sort?: "asc" | "desc"
group_after_key?: Record<string, string | number>
sort?: string
from?: number
size?: number
hydrate?: boolean
fields?: string[]
templates?: Record<string, string>
filters?: object[]
filters_context?: Record<string, boolean | string>[]
targets?: string // uuid[]
}

IdentifierAttributeโ€‹

type IdentifierAttribute = {
label?: string
name?: string
type?: string
}

RegistrationIdentifierโ€‹

type RegistrationIdentifier = {
name?: string
schema?: string
}

ContractIdentifierโ€‹

type ContractIdentifier = {
name?: string
schema?: string
}

AcceptanceDecisionโ€‹

type AcceptanceDecision = {
decision: "accept" | "decline"
}

TriggerPortalFlowโ€‹

type TriggerPortalFlow = {
activity_id?: string
ecp_config?: {
file_config?: {
shared_with_end_customer?: { ... }
_tags?: { ... }
}
}
}

ExtensionConfigโ€‹

type ExtensionConfig = {
id: string
status: "installed" | "enabled"
options?: Record<string, string>
}

ExtensionHookSelectionโ€‹

type ExtensionHookSelection = {
app_id: string
extension_id: string
hook_id: string
}

PublicExtensionCapabilitiesโ€‹

type PublicExtensionCapabilities = {
consumptionDataRetrieval?: Array<{
extension?: {
id?: { ... }
name?: { ... }
}
hook?: {
id?: { ... }
name?: { ... }
intervals?: { ... }
}
}>
priceDataRetrieval?: Array<{
extension?: {
id?: { ... }
name?: { ... }
}
hook?: {
id?: { ... }
name?: { ... }
intervals?: { ... }
}
}>
costDataRetrieval?: Array<{
extension?: {
id?: { ... }
name?: { ... }
}
hook?: {
id?: { ... }
name?: { ... }
intervals?: { ... }
}
}>
contractIdentification?: {
extension?: {
id?: { ... }
name?: { ... }
}
hook?: {
explanation?: { ... }
}
}
meterReadingPlausibilityCheck?: {
extension?: {
id?: { ... }
name?: { ... }
}
hook?: {
plausibility_mode?: { ... }
}
}
}

DataRetrievalItemโ€‹

type DataRetrievalItem = {
extension?: {
id?: string
name?: {
en: { ... }
}
}
hook?: {
id?: string
name?: {
en: { ... }
}
intervals?: string[]
}
}

PublicExtensionDetailsโ€‹

type PublicExtensionDetails = {
id?: string
name?: {
en: string
}
}

PublicDataRetrievalHookDetailsโ€‹

type PublicDataRetrievalHookDetails = {
id?: string
name?: {
en: string
}
intervals?: string[]
}

PublicContractIdentificationDetailsโ€‹

type PublicContractIdentificationDetails = {
explanation?: {
en: string
}
}

PublicMeterReadingPlausibilityCheckDetailsโ€‹

type PublicMeterReadingPlausibilityCheckDetails = {
plausibility_mode?: "check" | "range"
}

Extensionโ€‹

type Extension = {
id: string
app_id?: string
app_name?: string
name: {
en: string
}
description?: {
en: string
}
version?: string
options?: Array<{
id: string
name: {
en: { ... }
}
type: "text" | "secret"
description?: {
en: { ... }
}
default?: string
required?: boolean
}>
links?: Array<{
id: string
name: {
en: { ... }
}
description?: {
en: { ... }
}
type: "seamless"
condition?: string
auth?: {
method?: { ... }
url: { ... }
params?: { ... }
headers?: { ... }
body?: { ... }
cache?: { ... }
}
redirect: {
url?: { ... }
params?: { ... }
}
}>
hooks?: Array<{
id?: string
}>
}
type ExtensionSeamlessLink = {
id: string
name: {
en: string
}
description?: {
en: string
}
type: "seamless"
condition?: string
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, string>
cache?: {
key: { ... }
ttl: { ... }
}
}
redirect: {
url?: string
params?: Record<string, string>
}
}

ExtensionHookโ€‹

type ExtensionHook = {
id?: string
}

ExtensionHookRegistrationIdentifiersCheckโ€‹

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 ExtensionHookRegistrationIdentifiersCheck = {
type: "registrationIdentifiersCheck"
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, string>
cache?: {
key: { ... }
ttl: { ... }
}
}
call: {
method?: string
url: string
params?: Record<string, string>
headers: Record<string, string>
body?: object
result?: string
}
use_static_ips?: boolean
}

ExtensionHookContractIdentificationโ€‹

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 ExtensionHookContractIdentification = {
type: "contractIdentification"
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, string>
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
}

ExtensionHookMeterReadingPlausibilityCheckโ€‹

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 ExtensionHookMeterReadingPlausibilityCheck = {
type: "meterReadingPlausibilityCheck"
plausibility_mode?: "check" | "range"
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, string>
cache?: {
key: { ... }
ttl: { ... }
}
}
call: {
url: string
body: Record<string, string>
headers: Record<string, string>
}
resolved: {
dataPath?: string
counter_identifiers?: string | Record<string, string>
valid?: string
upper_limit?: string
lower_limit?: string
}
use_static_ips?: boolean
}

ExtensionHookPriceDataRetrievalโ€‹

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 ExtensionHookPriceDataRetrieval = {
type: "priceDataRetrieval"
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, string>
cache?: {
key: { ... }
ttl: { ... }
}
}
call: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, string>
}
resolved?: {
dataPath?: string
}
use_static_ips?: boolean
}

ExtensionHookConsumptionDataRetrievalโ€‹

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 ExtensionHookConsumptionDataRetrieval = {
type: "consumptionDataRetrieval"
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, string>
cache?: {
key: { ... }
ttl: { ... }
}
}
call: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, string>
}
resolved?: {
dataPath?: string
}
use_static_ips?: boolean
}

ExtensionHookCostDataRetrievalโ€‹

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 ExtensionHookCostDataRetrieval = {
type: "costDataRetrieval"
auth?: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, string>
cache?: {
key: { ... }
ttl: { ... }
}
}
call: {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, string>
}
resolved?: {
dataPath?: string
}
use_static_ips?: boolean
}

ExtensionAuthBlockโ€‹

type ExtensionAuthBlock = {
method?: string
url: string
params?: Record<string, string>
headers?: Record<string, string>
body?: Record<string, string>
cache?: {
key: string
ttl: string
}
}

Directionโ€‹

type Direction = "feed-in" | "feed-out"

TariffTypeโ€‹

type TariffType = "ht" | "nt"

Sourceโ€‹

type Source = "ECP" | "ERP" | "360" | "journey-submission"

Reasonโ€‹

The reason for recording the reading If no reason is specified or left empty, the Epilot UI will show 'Regular' as the default display text

type Reason = "" | "regular" | "irregular" | "last" | "first" | "meter_change" | "contract_change" | "meter_adjustment"

ReadByโ€‹

The person who recorded the reading

type ReadBy = string

ReadingStatusโ€‹

type ReadingStatus = "valid" | "in-validation" | "implausible" | null | ""

MeterReadingโ€‹

type MeterReading = {
value: number
read_by?: string
reason?: "" | "regular" | "irregular" | "last" | "first" | "meter_change" | "contract_change" | "meter_adjustment"
meter_id: string // uuid
counter_id?: string // uuid
direction?: "feed-in" | "feed-out"
timestamp?: string
source: "ECP" | "ERP" | "360" | "journey-submission"
status?: "valid" | "in-validation" | "implausible" | null | ""
external_id?: string
remark?: string
metadata?: Record<string, string>
}

MeterReadingPhotoโ€‹

type MeterReadingPhoto = {
filename: string
mime_type: string
contents: string
meter_id: string // uuid
}

MeterReadingPhotoDataโ€‹

type MeterReadingPhotoData = {
filename: string
s3ref: {
bucket: string
key: string
}
reading?: string
sector?: string
meter_numbers?: string[]
}

SSOLoginTokenโ€‹

type SSOLoginToken = string

ProviderSlugโ€‹

URL-friendly slug to use as organization-unique identifier for Provider

type ProviderSlug = string

ProviderDisplayNameโ€‹

Human-readable display name for identity provider shown in login

type ProviderDisplayName = string

ProviderConfigโ€‹

type ProviderConfig = {
slug?: string
display_name: string
provider_type: "OIDC"
attribute_mappings?: {
contact: {
email: { ... }
first_name?: { ... }
last_name?: { ... }
phone?: { ... }
preferred_language?: { ... }
concession?: { ... }
installer_number?: { ... }
}
account?: {
name?: { ... }
street?: { ... }
house_number?: { ... }
postal_code?: { ... }
city?: { ... }
}
portal_user?: {
access_status?: { ... }
expires_at?: { ... }
}
concession_attributes?: {
water?: { ... }
energy?: { ... }
gas?: { ... }
}
}
entity_matching?: {
portal_user?: Record<string, string>
contact?: Record<string, string>
auto_create_cognito_user?: boolean
}
oidc_config?: {
type?: "authorization_code" | "implicit"
oidc_issuer: string
redirect_uri?: string
client_id: string
client_secret?: string
has_client_secret?: boolean
scope: string
metadata?: {
authorization_endpoint?: { ... }
token_endpoint?: { ... }
userinfo_endpoint?: { ... }
logout_uri?: { ... }
logout_redirect_uri?: { ... }
skip_login_as_logout?: { ... }
mobile_redirect_uri?: { ... }
test_auth_username?: { ... }
test_auth_password?: { ... }
}
prompt?: "login" | "select_account" | "consent"
}
mobile_oidc_config?: {
client_id?: string
client_secret?: string
}
}

ProviderPublicConfigโ€‹

type ProviderPublicConfig = {
slug: string
display_name: string
oidc_config?: {
type?: "authorization_code" | "implicit"
oidc_issuer: string
redirect_uri?: string
client_id: string
client_secret?: string
has_client_secret?: boolean
scope: string
metadata?: {
authorization_endpoint?: { ... }
token_endpoint?: { ... }
userinfo_endpoint?: { ... }
logout_uri?: { ... }
logout_redirect_uri?: { ... }
skip_login_as_logout?: { ... }
mobile_redirect_uri?: { ... }
test_auth_username?: { ... }
test_auth_password?: { ... }
}
prompt?: "login" | "select_account" | "consent"
}
mobile_oidc_config?: {
client_id?: string
client_secret?: string
}
}

AttributeMappingConfigโ€‹

Dictionary of epilot user attributes to claims

type AttributeMappingConfig = {
contact: {
email: string
first_name?: string
last_name?: string
phone?: string
preferred_language?: string
concession?: string
installer_number?: string
}
account?: {
name?: string
street?: string
house_number?: string
postal_code?: string
city?: string
}
portal_user?: {
access_status?: string
expires_at?: string
}
concession_attributes?: {
water?: string
energy?: string
gas?: string
}
}

EntityMatchingConfigโ€‹

Configuration for matching existing entities during SSO login using token claims

type EntityMatchingConfig = {
portal_user?: Record<string, string>
contact?: Record<string, string>
auto_create_cognito_user?: boolean
}

OIDCProviderConfigโ€‹

type OIDCProviderConfig = {
type?: "authorization_code" | "implicit"
oidc_issuer: string
redirect_uri?: string
client_id: string
client_secret?: string
has_client_secret?: boolean
scope: string
metadata?: {
authorization_endpoint?: string
token_endpoint?: string
userinfo_endpoint?: string
logout_uri?: string
logout_redirect_uri?: string
skip_login_as_logout?: boolean
mobile_redirect_uri?: string
test_auth_username?: string
test_auth_password?: string
}
prompt?: "login" | "select_account" | "consent"
}

MoblieOIDCConfigโ€‹

type MoblieOIDCConfig = {
client_id?: string
client_secret?: string
}

OIDCProviderMetadataโ€‹

type OIDCProviderMetadata = {
authorization_endpoint?: string
token_endpoint?: string
userinfo_endpoint?: string
logout_uri?: string
logout_redirect_uri?: string
skip_login_as_logout?: boolean
mobile_redirect_uri?: string
test_auth_username?: string
test_auth_password?: string
}

SAMLProviderConfigโ€‹

type SAMLProviderConfig = object

SSOCallbackRequestโ€‹

type SSOCallbackRequest = {
provider_slug?: string
token_endpoint: string
grant_type: string
code: string
redirect_uri: string
client_id: string
code_verifier: string
}

SSOCallbackResponseโ€‹

type SSOCallbackResponse = {
access_token: string
token_type: string
expires_in: number
refresh_token: string
id_token?: string
scope?: string
}

BlockPropsโ€‹

type BlockProps = {
visibility?: Record<string, unknown>
content?: Record<string, unknown>
design?: Record<string, unknown>
}

BlockTypeโ€‹

The type of the block. eg; tabs, tab, group, attribute

type BlockType = string

BlockRequestโ€‹

type BlockRequest = {
props?: {
visibility?: Record<string, unknown>
content?: Record<string, unknown>
design?: Record<string, unknown>
}
parentId?: string
type: string
order: number
}

BlockIdโ€‹

The id of the block

type BlockId = string // uuid

Blockโ€‹

type Block = {
props?: {
visibility?: Record<string, unknown>
content?: Record<string, unknown>
design?: Record<string, unknown>
}
parentId?: string
type: string
order: number
id?: string // uuid
}

PageRequestโ€‹

type PageRequest = {
slug: string
path?: string
schema?: string[]
visibility?: Record<string, unknown>
content?: Record<string, unknown>
design?: Record<string, unknown>
blocks?: Record<string, {
props?: {
visibility?: { ... }
content?: { ... }
design?: { ... }
}
parentId?: string
type: string
order: number
id?: string // uuid
}>
order: number
is_system?: boolean
is_detail?: boolean
detail_schema?: string
is_public?: boolean
parentId?: string
is_entry_route?: boolean
is_deleted?: boolean
}

Pageโ€‹

type Page = {
slug: string
path?: string
schema?: string[]
visibility?: Record<string, unknown>
content?: Record<string, unknown>
design?: Record<string, unknown>
blocks?: Record<string, {
props?: {
visibility?: { ... }
content?: { ... }
design?: { ... }
}
parentId?: string
type: string
order: number
id?: string // uuid
}>
order: number
is_system?: boolean
is_detail?: boolean
detail_schema?: string
is_public?: boolean
parentId?: string
is_entry_route?: boolean
is_deleted?: boolean
id?: string // uuid
last_modified_at?: string // date-time
}

CommonConfigAttributesV3โ€‹

type CommonConfigAttributesV3 = {
enabled?: boolean
name?: string
domain?: string
is_epilot_domain?: boolean
epilot_domain?: string
domain_settings?: {
is_custom_domain_enabled?: boolean
is_epilot_domain_enabled?: boolean
is_redirection_enabled?: boolean
}
design_id?: string // uuid
self_registration_setting?: "ALLOW_WITH_CONTACT_CREATION" | "ALLOW_WITHOUT_CONTACT_CREATION" | "DENY" | "ALWAYS_CREATE_CONTACT" | "DISALLOW_COMPLETELY" | "BLOCK_IF_PORTAL_USER_EXISTS"
user_account_self_management?: boolean
feature_settings?: {
start_page?: boolean
billing?: boolean
change_due_date?: boolean
new_design?: boolean
}
accessToken?: string
advanced_mfa?: {
enabled?: boolean
}
auth_settings?: {
passwordless_login?: {
enabled?: { ... }
}
entry_point?: "PASSWORD" | "SSO"
preferred_sso_providers?: string[]
auto_redirect_to_sso?: boolean
}
cognito_details?: {
cognito_user_pool_client_id?: string
cognito_user_pool_arn?: string
cognito_user_pool_id?: string
password_policy?: {
minimum_length?: { ... }
maximum_length?: { ... }
require_lowercase?: { ... }
require_uppercase?: { ... }
require_numbers?: { ... }
require_symbols?: { ... }
}
}
config?: string
contact_identifiers?: string[]
approval_state_attributes?: Record<string, string[]>
email_templates?: {
confirmAccount?: string // uuid
advancedAuth?: string // uuid
advancedMFA?: string // uuid
journeySignUp?: string // uuid
journeySignInOneTimePassword?: string // uuid
journeyLoginOTP?: string // uuid
forgotPassword?: string // uuid
invitation?: string // uuid
partnerInvitation?: string // uuid
onNewQuote?: string // uuid
onMapAPendingUser?: string // uuid
onDocUpload?: string // uuid
onWorkflowStepAssigned?: string // uuid
confirmEmailUpdate?: string // uuid
verifyCodeToSetPassword?: string // uuid
}
images?: {
orderLeftTeaser?: string
orderRightTeaser?: string
welcomeBanner?: string
}
entity_identifiers?: {
type?: {
isEnabled?: { ... }
attributes?: { ... }
}
}
contract_identifiers?: Array<{
name?: string
schema?: string
}>
contract_selector_config?: {
show_inactive?: boolean
title_path?: string
}
registration_identifiers?: Array<{
name?: string
schema?: string
}>
triggered_journeys?: Array<{
trigger_name?: "FIRST_LOGIN" | "ACCEPT_ORDER" | "DECLINE_ORDER"
journey_id?: string // uuid
}>
entity_edit_rules?: Array<{
slug?: string
attribute?: string
rule_type?: "cadence" | "relative_to_current_value" | "days_before_date" | "overdue_payments"
cadence_period_type?: "days" | "weeks" | "months"
cadence_period?: number
changes_allowed?: number
grace_period?: number
// ...
}

PortalIdโ€‹

ID of the portal

type PortalId = string

UpsertPortalConfigV3โ€‹

type UpsertPortalConfigV3 = {
entity_actions?: Array<{
journey_id?: string // uuid
slug?: string
action_Label?: {
en?: { ... }
de?: { ... }
}
}>
extensions?: Array<{
id: string
status: "installed" | "enabled"
options?: Record<string, string>
}>
extension_hooks?: Record<string, {
app_id: string
extension_id: string
hook_id: string
}>
default_user_to_notify?: {
onPendingUser?: Array<{
type?: { ... }
user_id?: { ... }
display_name?: { ... }
image_uri?: { ... }
org_id?: { ... }
email?: { ... }
phone?: { ... }
}>
}
enabled?: boolean
name?: string
domain?: string
is_epilot_domain?: boolean
epilot_domain?: string
domain_settings?: {
is_custom_domain_enabled?: boolean
is_epilot_domain_enabled?: boolean
is_redirection_enabled?: boolean
}
design_id?: string // uuid
self_registration_setting?: "ALLOW_WITH_CONTACT_CREATION" | "ALLOW_WITHOUT_CONTACT_CREATION" | "DENY" | "ALWAYS_CREATE_CONTACT" | "DISALLOW_COMPLETELY" | "BLOCK_IF_PORTAL_USER_EXISTS"
user_account_self_management?: boolean
feature_settings?: {
start_page?: boolean
billing?: boolean
change_due_date?: boolean
new_design?: boolean
}
accessToken?: string
advanced_mfa?: {
enabled?: boolean
}
auth_settings?: {
passwordless_login?: {
enabled?: { ... }
}
entry_point?: "PASSWORD" | "SSO"
preferred_sso_providers?: string[]
auto_redirect_to_sso?: boolean
}
cognito_details?: {
cognito_user_pool_client_id?: string
cognito_user_pool_arn?: string
cognito_user_pool_id?: string
password_policy?: {
minimum_length?: { ... }
maximum_length?: { ... }
require_lowercase?: { ... }
require_uppercase?: { ... }
require_numbers?: { ... }
require_symbols?: { ... }
}
}
config?: string
contact_identifiers?: string[]
approval_state_attributes?: Record<string, string[]>
email_templates?: {
confirmAccount?: string // uuid
advancedAuth?: string // uuid
advancedMFA?: string // uuid
journeySignUp?: string // uuid
journeySignInOneTimePassword?: string // uuid
journeyLoginOTP?: string // uuid
forgotPassword?: string // uuid
invitation?: string // uuid
partnerInvitation?: string // uuid
onNewQuote?: string // uuid
onMapAPendingUser?: string // uuid
onDocUpload?: string // uuid
onWorkflowStepAssigned?: string // uuid
confirmEmailUpdate?: string // uuid
verifyCodeToSetPassword?: string // uuid
}
images?: {
orderLeftTeaser?: string
orderRightTeaser?: string
welcomeBanner?: string
}
entity_identifiers?: {
// ...
}

PortalConfigV3โ€‹

type PortalConfigV3 = {
entity_actions?: Array<{
journey_id?: string // uuid
slug?: string
action_Label?: {
en?: { ... }
de?: { ... }
}
}>
extensions?: Array<{
id: string
status: "installed" | "enabled"
options?: Record<string, string>
}>
extension_hooks?: Record<string, {
app_id: string
extension_id: string
hook_id: string
}>
default_user_to_notify?: {
onPendingUser?: Array<{
type?: { ... }
user_id?: { ... }
display_name?: { ... }
image_uri?: { ... }
org_id?: { ... }
email?: { ... }
phone?: { ... }
}>
}
enabled?: boolean
name?: string
domain?: string
is_epilot_domain?: boolean
epilot_domain?: string
domain_settings?: {
is_custom_domain_enabled?: boolean
is_epilot_domain_enabled?: boolean
is_redirection_enabled?: boolean
}
design_id?: string // uuid
self_registration_setting?: "ALLOW_WITH_CONTACT_CREATION" | "ALLOW_WITHOUT_CONTACT_CREATION" | "DENY" | "ALWAYS_CREATE_CONTACT" | "DISALLOW_COMPLETELY" | "BLOCK_IF_PORTAL_USER_EXISTS"
user_account_self_management?: boolean
feature_settings?: {
start_page?: boolean
billing?: boolean
change_due_date?: boolean
new_design?: boolean
}
accessToken?: string
advanced_mfa?: {
enabled?: boolean
}
auth_settings?: {
passwordless_login?: {
enabled?: { ... }
}
entry_point?: "PASSWORD" | "SSO"
preferred_sso_providers?: string[]
auto_redirect_to_sso?: boolean
}
cognito_details?: {
cognito_user_pool_client_id?: string
cognito_user_pool_arn?: string
cognito_user_pool_id?: string
password_policy?: {
minimum_length?: { ... }
maximum_length?: { ... }
require_lowercase?: { ... }
require_uppercase?: { ... }
require_numbers?: { ... }
require_symbols?: { ... }
}
}
config?: string
contact_identifiers?: string[]
approval_state_attributes?: Record<string, string[]>
email_templates?: {
confirmAccount?: string // uuid
advancedAuth?: string // uuid
advancedMFA?: string // uuid
journeySignUp?: string // uuid
journeySignInOneTimePassword?: string // uuid
journeyLoginOTP?: string // uuid
forgotPassword?: string // uuid
invitation?: string // uuid
partnerInvitation?: string // uuid
onNewQuote?: string // uuid
onMapAPendingUser?: string // uuid
onDocUpload?: string // uuid
onWorkflowStepAssigned?: string // uuid
confirmEmailUpdate?: string // uuid
verifyCodeToSetPassword?: string // uuid
}
images?: {
orderLeftTeaser?: string
orderRightTeaser?: string
welcomeBanner?: string
}
entity_identifiers?: {
// ...
}

JuiceSettingsโ€‹

type JuiceSettings = {
is_dummy?: boolean
is_canary?: boolean
redirect_to?: string
}

SwappableConfigโ€‹

type SwappableConfig = "all" | "domain" | "users" | "email_templates"

PortalUserRegistrationStatusโ€‹

type PortalUserRegistrationStatus = "Registration Pending" | "Confirmation Email Sent" | "Registered" | "Email Update In Progress"

BusinessPartnerItemโ€‹

type BusinessPartnerItem = {
_id?: string // uuid
has_portal_user?: boolean
registration_status?: "Registration Pending" | "Confirmation Email Sent" | "Registered" | "Email Update In Progress"
email?: string
_title?: string
first_name?: string
last_name?: string
access_status?: boolean
}