Portal API
- Base URL:
https://customer-portal-api.sls.epilot.io - Full API Docs: https://docs.epilot.io/api/customer-portal
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
upsertPortalgetPortalConfigdeletePortalgetPortalExtensionsgetPortalExtensionsV3getExternalLinksgetExternalLinksV3getOrgPortalConfiggetOrgPortalConfigV3getAllPortalConfigsupsertEmailTemplatesgetEmailTemplatesupsertEmailTemplatesByPortalIdgetEmailTemplatesByPortalIdupsertPortalWidgetgetPortalWidgetsreplaceECPTemplateVariablesextraPermissionAttributesvalidateCaaRecordsvalidateCaaRecordsV3getECPContactgetValidSecondaryAttributesresendConfirmationEmailfetchPortalUsersByRelatedEntitygetRecipientsToNotifyOnAutomationconfigureDistributionconfigureDistributionV3getEntityIdentifierssavePortalFilesgetRegistrationIdentifiersloginToPortalAsUsercanTriggerPortalFlowupdatePortalPagedeletePortalPagecreatePortalPagegetDefaultPagescreatePortalPageBlockupdatePortalPageBlockdeletePortalPageBlockcreatePortalConfiggetPortalConfigV3putPortalConfigdeletePortalConfiglistAllPortalConfigsswapPortalConfig
Public
createUsercreateUserV3getPortalConfigByDomaingetPublicPortalExtensionDetailsgetPublicPortalExtensionDetailsV3getPublicPortalConfiggetPublicPortalConfigV3getPublicPortalWidgetsgetSchemasByDomaingetOrganizationSettingsByDomaincheckContactExistscheckContactExistsV3confirmUserconfirmUserWithUserIduserExistsuserExistsV3ssoRedirectssoCallbackgetPublicPagesgetUserEntryPointdeRegisterMLoginUsernotifyMLoginInterestChange
ECP
validateTokenrevokeTokengetConsumptiongetCostsgetPricesgetResolvedSeamlessLinkgetSchemasgetContactupdateContactgetPortalUserupdatePortalUserdeletePortalUserupdatePortalUserEmailgetAllOrderspostOrderAcceptancegetOrderupdateOrdergetAllOpportunitiesgetSearchableAttributesForOpportunitiesgetSearchResultsForOpportunitiesgetOpportunityupdateOpportunitygetAllRequestsgetAllContractsgetContractupdateContractaddContractByIdentifiersvalidateCadenceEntityEditRulessearchPaymentRelationsInEntitiescreateCustomEntityActivitysaveEntityFiledeleteEntityFilegetFileByIdtrackFileDownloadedgetBillingEventstriggerEntityAccessEventtriggerEntityAccessEventV3getPortalUserEntitysearchPortalUserEntitiesgetAutomationContextupdateWorkflowStepAsDonegetEntityWorkflowsuploadMeterReadingPhotocreateMeterReadinggetAllowedMeterReadingRangegetPortalPagegetPortalPagesgetPortalPageBlocksgetPortalPageBlockupdateCampaignPortalBlockStatusupdateNotificationsStatusinvitePartnerlistBusinessPartnersresendPartnerInvitationrevokePartnerdisablePartnerenablePartner
Activity
Balance
Billing Accounts
Login
Schemas
ContextEntityContextEntitiesErrorRespFailedRuleErrorRespEmailTemplatesDeleteEntityFileSaveEntityFileSavePortalFileExtraSchemaAttributesOriginAllowedFileExtensionsUpdateOnlyPortalConfigAttributesCommonConfigAttributesUpsertPortalConfigPortalConfigUpsertPortalWidgetDomainSettingsWidgetBaseEntityWidgetMeterReadingWidgetMeterChartWidgetWidgetActionActionWidgetTeaserWidgetContentWidgetDocumentWidgetPaymentWidgetCampaignWidgetPortalWidgetContactCountRequestContactExistsRequestUserRequestCreateUserRequestOrganizationSettingsAuthConfigExistsEntitySlugEntityIdBaseEntitySchemaEntityEntityTemplatesEntityItemEntityResponseEntityResponseWithHitsEntityResponseGroupedWithHitsPortalUserContactWorfklowIdentifierMeterOrderOpportunityContractFileProductActivityIdActivityCallerContextActivityEntityEditRuleActivityItemFileItemEntityFileCountAdminUserGrantActionLabelRuleJourneyActionsExternalLinkWorkflowExecutionWorkflowStepBaseBillingEventInstallmentEventReimbursementEventBillingEventBillingAccountBalanceCurrencyEntityGetParamsEntitySearchParamsIdentifierAttributeRegistrationIdentifierContractIdentifierAcceptanceDecisionTriggerPortalFlowExtensionConfigExtensionHookSelectionPublicExtensionCapabilitiesDataRetrievalItemPublicExtensionDetailsPublicDataRetrievalHookDetailsPublicContractIdentificationDetailsPublicMeterReadingPlausibilityCheckDetailsExtensionExtensionSeamlessLinkExtensionHookExtensionHookRegistrationIdentifiersCheckExtensionHookContractIdentificationExtensionHookMeterReadingPlausibilityCheckExtensionHookPriceDataRetrievalExtensionHookConsumptionDataRetrievalExtensionHookCostDataRetrievalExtensionAuthBlockDirectionTariffTypeSourceReasonReadByReadingStatusMeterReadingMeterReadingPhotoMeterReadingPhotoDataSSOLoginTokenProviderSlugProviderDisplayNameProviderConfigProviderPublicConfigAttributeMappingConfigEntityMatchingConfigOIDCProviderConfigMoblieOIDCConfigOIDCProviderMetadataSAMLProviderConfigSSOCallbackRequestSSOCallbackResponseBlockPropsBlockTypeBlockRequestBlockIdBlockPageRequestPageCommonConfigAttributesV3PortalIdUpsertPortalConfigV3PortalConfigV3JuiceSettingsSwappableConfigPortalUserRegistrationStatusBusinessPartnerItem
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:
- Using org_id + portal_id
- 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
}
]
}
getExternalLinksโ
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"]
}
]
getResolvedSeamlessLinkโ
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
}>
}
ExternalLinkโ
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
}>
}
ExtensionSeamlessLinkโ
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
}