API Reference
entri.showEntri(config)
This method launches the Entri modal window. config
is an object with the following properties:
Property | Type | Required? | Default | Description |
---|---|---|---|---|
applicationId | string | Yes | N/A | The ID of your application (set in the dashboard) |
dnsRecords | array of DNSRecord objects (see below) | Yes | N/A | The DNS records you wish to configure for your users (see below) |
token | string | Yes | N/A | A JSON web token. Must be fetched in each session, see Installation. |
applicationUrl | string | Only when using Secure or Power | N/A | Sets the applicationUrlfor Power. This is the specific application URL that you would like to render on the customer’s custom domain. Also known as an origin server or origin URL. |
applicationName | string | No | null | The company name that will be shown in the initial screen’s welcome message. |
defaultSubdomain | string | No | "" | If you would like to pre fill the subdomain field with text then enter the desired sub domain here. |
enableDkim | boolean | No | false | If your application requires users to set up DKIM through their email provider (and your app does not send emails directly), enable this. This is common for applications that provide email automation using an external service like Google Workspace or Microsoft 365. |
forceManualSetup | boolean | No | false | Forces Entri to use the manual setup flow. If set to true then the prefilledDomain becomes required. |
forceSubdomain | boolean | No | false | If your application requires subdomains, enable this |
freeDomain | boolean | No | false | This feature allows you to offer your users their first domain at no cost. Please contact your account manager to enable this feature |
locale | string | No | en | To load Entri in a specific language. Supported languages include: en, es, pt, pt-br,pt-pt, fr, it, de, nl, pl, tr, ja.The pt locale defaults to Brazilian portuguese (pt-br). |
hostRequired | boolean | No, unless you use the {SUBDOMAIN} variable | true | If the {SUBDOMAIN} variable is used but is null (no subdomain inputted by the user) then the {SUBDOMAIN} value will default to be www. See Dynamic configuration variables based on the user-inputted domain. |
manualSetupDocumentation | string | No | "" | Where you currently provide documentation on how to set up DNS. If users are trying to set up their DNS manually and need help, we will send them to this page. e.g. <https://example.com/dns-setup\>. This link is disabled when using the propertydisableManualSetupDocumentationLink:true in the whiteLabel’s configuration. |
overrideSpf | boolean | No | false | Forces the SPF record override in case there is a pre-existent one instead of merging it. |
power | boolean | No | false | Enables Entri Power. Requires adoption of Entri Power. |
prefilledDomain | string | No, unless forceManualSetup is set to true | N/A | A domain to pre-fill if you’ve collected it before the Entri modal, e.g. example.com |
secureRootDomain | boolean | No | false | Creates a certificate for the root domain and points its A records to Entri secure servers. Requires adoption of Entri Secure. |
supportForSubdomains | boolean | No | true | If your application allows subdomains, enable this |
userId | string | No | N/A | A unique ID so that you can match Entri webhook events to the user |
wwwRedirect | boolean | No | false | When feasible, Entri will automatically redirect site.com to www.site.com using the preferred method of the DNS provider. Certain providers prevent Entri from automatically setting this up. When that is the case, Entri shows a helper UI to the user that explains how to do this manually. |
validateDmarc | boolean | No | false | When set to true Entri will automatically check if there is an existing and valid DMARC record. If so, Entri will not update the DMARC record. |
dnsRecords
object
DNS records can be provided in two different ways, using a single array of records or an object with the array of records specified the domain and subdomain cases.
Record object specification
Property | Type | Required? | Example |
---|---|---|---|
host | string | Yes | www |
ttl | integer | Yes | 300 (this is the minimum accepted value) |
type | string (see below) | Yes | CNAME Check the Supported record types section below |
value | string | Yes | m.example.com |
fallbackValue | string | No | v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDg9/gR+3J0mmugLjhpYOfQK9ytkEKnXM0kVdpu0UoykSPK7ChD+nRxFJbN2cxtvu8GrCNQwPTKbC0jimaSi0V2j3JndnRrECuYCqeZYcRmw2lYs18QnmJRfCpweKoaGtv9zERCkeHwLcTaLkrSHrRDf58WgERg8x/4ipBPIyZufwIDAQAB |
priority | integer | Only for MX records | 10 |
Simple array
A single array of dns records. This is the easiest way to send Entri the set of records you want to configure for all on all domains with no subdomain/domain distinction.
{
...,
dnsRecords: [
{
type: "CNAME",
host: "shop",
value: "myapp.com",
ttl: 300,
},
{
type: "TXT",
host: "@",
value: "123-example-txt-record",
ttl: 300,
}
]
}
Conditional records object
If you have different sets of records you need to configure depending on whether it is a domain or a subdomain, then this is the best option for you. You just need to include the two sets of records into separate objects, making use of the domain
or subdomain
keys as follows:
{
...,
dnsRecords: {
domain: [
{
type: "A",
host: "@",
value: "1.2.3.4",
ttl: 300,
},
{
type: "TXT",
host: "@",
value: "123-example-txt-record",
ttl: 300,
}
],
subDomain: [
{
type: "CNAME",
host: "shop",
value: "myapp.com",
ttl: 300,
},
{
type: "TXT",
host: "@",
value: "123-example-txt-record",
ttl: 300,
}
]
}
Multi-domain flows
With Entri, you can configure as many domains as you need using the end user flow. In order to achieve it, you only need to use a similar dnsRecords
structure as the conditional records, in combination with the array form of the prefilledDomain
property.
This is a sample configuration for a multi-domain flow:
{
//...
prefilledDomain: ["firstDomain.com", "secondDomain.com"],
dnsRecords: {
"firstDomain.com": [
{
type: "A",
host: "@",
value: "1.2.3.4",
ttl: 300,
},
{
type: "TXT",
host: "@",
value: "123-example-txt-record",
ttl: 300,
}
],
"secondDomain.com": [
{
type: "CNAME",
host: "shop",
value: "myapp.com",
ttl: 300,
},
{
type: "TXT",
host: "@",
value: "123-example-txt-record",
ttl: 300,
}
]
}
Dynamic configuration variables
You can insert dynamic variables into the dnsRecords section of your configuration object using syntax.
For example, if the user sets up blog.example.com
, the following variables will be available:
Variable name | Example value |
---|---|
{DOMAIN} | example.com |
{SUBDOMAIN} | blog |
{SLD} | example |
{TLD} | com |
{emailProviderSPF} |
Please note, all the variables are case-sensitive and must be inputted in all upper-case.
whiteLabel
object
The whiteLabel property object allows you to further customize the Entri Modal UI. Please note you may need an Enterprise level account for these properties to be available. For questions about this, contact your account manager.
Property | Type | Required? | Default | Description |
---|---|---|---|---|
hideEntriLogo | boolean | No | false | When true, hides all mentions of “Powered by Entri” |
hideConfetti | boolean | No | false | When true, hides the confetti upon a successful domain configuration. |
hideLinkSharingConfirmation | boolean | No | false | Removes the “I have shared the link” check from the sharing link feature modal. |
logo | string | No | null | This needs to be an https URL. When inputted, it will remove the Entri logo and use your custom logo. We recommended an SVG or PNG file that is 1:1. |
logoBackgroundColor | string | No | null | When present, this will set a background color for the logo mask. Useful if your logo uses a white color and has a transparent background. |
removeLogoBorder | boolean | No | false | When true, this will remove the rounded mask/border that is applied over your logo. |
removeShareLogin | boolean | No | false | When true, this will remove the sharing link functionality across the whole application. |
skipCongratulationsScreen | boolean | No | false | Prevents the application from showing the Congratulations screen and closes the modal automatically. |
hideProgressIndicator | boolean | No | null | Hides the progress indicator at the top of the modal |
theme | object | No | null | Described below (see theme Object) |
icons | object | No | null | Described below (see icons Object) |
customProperties | object | No | null | Described below (see customProperties Object) |
customCopy | object | No | null | Described below (see customCopy Object) |
showEntriToS | boolean | No | false | Forces displaying Entri Tems of Service at the bottom |
theme
Object
The theme
object allows you to customize the foreground and background colors to match your app’s branding. Please note you may need an Enterprise level account for these properties to be available. For questions about this, contact your account manager.
Property | Type | Default | Description |
---|---|---|---|
bg | string | N/A | Background color. Please input a hex code. |
fg | string | N/A | Foreground color. Please input a hex code. |
width | string | N/A | Modal’s width |
links | string | N/A | Links color to override HTML’s default blue. |
internalCustomAnimation | string | null | This enables a custom animation. Please refer to your account executive for more info. |
buttons | object | null | Contains custom properties for the buttons across all screens |
buttons.border.style | string | null | Contains the border css styling e.g. solid 1px #000 |
buttons.border.radius | string | null | Contains the border-radius css styling e.g. 5% or 10px |
googleFont | object | null | Allows to set a custom GoogleFont and its properties |
googleFont.family | string | null | Overrides the Modal font-family |
googleFont.variant | string | null | font-family normal text weight e.g. 400 |
googleFont.boldWeight | string | null | font-family bold text weight e.g. 600 |
titles | object | null | Define styling properties for the titles globally and per screen |
titles.fontSize | string | null | Overrides the font-size for all titles |
titles.providerLogin | object | null | Define styling properties for the Login Screen |
titles.providerLogin.fontSize | object | null | Overrides the font-size for the Login Screen |
secondaryLinks | object | null | Overrides styling for secondary links |
secondaryLinks.fontSize | string | null | Override the font-size for secondary links globally |
hideCompanyLogo | boolean | false | Hides the customer’s logo on the initial screen (Does not apply to the multi-domain initial screen) |
icons
Object
The icons
object allows you to customize the default icons used across the flow.
Property | Type | Default | Description |
---|---|---|---|
icons | object | null | Contains the icons’ override details. These need to be set by your assigned Sales Engineer. |
icons.initialStep | object | null | Contains the Initial screen’s icons override details |
icons.initialStep.secureIcon | string | null | Icon code to use as replacement for the “secure” part of the introduction section |
icons.initialStep.easyIcon | string | null | Icon code to use as replacement for the “easy” part of the introduction section |
icons.domainAnalysis | object | null | Contains the Domains analysis’ icons override details |
icons.domainAnalysis.stepInitial | string | null | Icon code to use as replacement for the undone check in the Domain analysis screen |
icons.domainAnalysis.stepInactive | string | null | Icon code to use as replacement for the inactive check in the Domain analysis screen |
icons.domainAnalysis.stepFinished | string | null | Icon code to use as replacement for the done check in the Domain analysis screen |
icons.providerLogin | object | null | Contains the Initial screen’s icons override details |
icons.providerLogin.user | string | null | Icon code to use as replacement for the user icon within the username input |
icons.providerLogin.password | string | null | Icon code to use as replacement for the password icon within the password input |
icons.providerLogin.passwordEyeVisible | string | null | Icon code to use as replacement for the showing the password feature within the password input |
icons.providerLogin.passwordEyeHidden | string | null | Icon code to use as replacement for the hiding the password feature within the password input |
customProperties
Object
The customProperties
object allows you to set different behaviours related specifically to specific elements or a screen’s behavior.
Property | Type | Default | Description |
---|---|---|---|
initialScreen | object | null | Contains properties for the initial screen |
initialScreen.showManualInstructionsCTA | boolean | false | Enables the go-to manual link in the initial screen |
initialScreen.disableScreen | boolean | false | Disables the the initial screen. If prefilledDomain is in use, then the user will land directly on the domain analysis screen. If no prefilledDomain is in use, then the user will land on the domain input screen. |
existingRecords | object | null | Contains properties for the Existing records screen |
existingRecords.disableScreen | boolean | false | Disables the Existing Records override prompt and confirms automatically |
manualConfiguration | object | null | Contains properties for the manual screen guide |
manualConfiguration.disableScreen | boolean | false | Prevents the manual screen from being shown. Adds the manualScreenDisabled:true extra property to the onEntriClose event |
providerLogin | object | null | Contains properties for the provider login screen |
providerLogin.showEntriToS | boolean | false | Displays the terms of service on the Provider Login screen |
providerLogin.disableExtendedLoginAnimation | boolean | false | Disables the extended login animation and leaves only the default one in place. |
providerLogin.socialIcons | object | null | Sets visual changes to the social login icons on the provider login screen |
providerLogin.socialIcons.disable | boolean | false | Hides the social login icons |
providerLogin.socialIcons.replacementText | object | false | If providerLogin.socialIcons.disable:true , then replaces the social icons with the translation texts |
providerLogin.socialIcons.replacementText.{locale} | string | false | Sets the social login icons’ replacement translation text for the specific locale. |
providerManualSelection | object | null | Contains properties for the provider manual selection screen |
providerManualSelection.disableManualScreenLink | boolean | false | Disables the link for going to the manual configuration screen and triggers the onEntriManualSetupDocumentationClick instead |
customCopy
Object
The customCopy
object allows you to customize certain texts along the flow, in order to match your brand’s tone or in case the default copy doesn’t exactly fit your use case. The default and only required locale (translation) needed to be used within the customCopy
object is the EN
locale. All missing translations will default to English.
Please note you may need an Enterprise level account for these properties to be available. For questions about this, contact your account manager.
Property | Type | Default | Description |
---|---|---|---|
congratulations | object | null | Contains the override details for the Congratulations screen |
congratulations.title | object | null | Overrides the title on the Congratulations screen. |
congratulations.title.${locale} | string | null | Sets the Congratulations title’s translation text for the specific locale. Accepts the {DOMAIN} replacement token. Accepts applying bold when using the following tags <strong></strong> . |
congratulations.description | object | null | Overrides the description on the initial screen. |
congratulations.description.${locale} | string | null | Sets the Congratulations description’s translation text for the specific locale. Accepts applying bold when using the following tags <strong></strong> . |
congratulations.user | string | null | The user value to replace on the {USER} token in the congratulations.description |
congratulations.button | string | null | Overrides the button’s text in the Congratulations screen. |
congratulations.button.${locale} | string | null | Sets the Congratulations button call to action’s translation text for the specific locale. Accepts applying bold when using the following tags <strong></strong> . |
existingRecords | object | null | Contains the override details for the Override records confirmation screen. |
existingRecords.title | object | null | Contains the translations for Overriding the title on the Override records confirmation screen. |
existingRecords.title$.{locale} | string | null | Sets the Override-confirmation screen title’s translation text for the specific locale. Accepts the {DOMAIN} replacement token. Accepts applying bold when using the following tags <strong></strong> . |
initialScreen | object | null | Contains the override details for the Initial screen |
initialScreen.title | object | null | Contains the translations for overriding the title on the initial screen. |
initialScreen.title.${locale} | string | null | Sets the title’s translation text for the specific locale. (one of the available codes such as en,es,fr, etc., for example initialScreen.title.en). Accepts applying bold when using the following tags <strong></strong> . |
initialScreen.subTitle | object | null | Contains the translations for overriding the subtitle on the initial screen |
initialScreen.subTitle.${locale} | string | null | Sets the subtitle’s translation text for the specific locale. |
initialScreen.secure | object | null | Overrides the texts in the “secure” section on the initial screen |
initialScreen.secure.title | object | null | Contains the translations for overriding the “secure” title section on the initial screen. |
initialScreen.secure.title.${locale} | string | null | Sets the secure title’s translation text for the specific locale. |
initialScreen.secure.description | object | null | Contains the translations for overriding the “secure” description text section on the initial screen |
initialScreen.secure.description.${locale} | string | null | Sets the secure description’s translation text for the specific locale. |
initialScreen.easy | object | null | Overrides the texts in the “easy” section on the initial screen |
initialScreen.easy.title | object | null | Contains the translations for overriding the “easy” title section on the initial screen |
initialScreen.easy.title.${locale} | string | null | Sets the easy title’s translation text for the specific locale. |
initialScreen.easy.description | object | null | Contains the translations for overriding the “easy” description section on the initial screen |
initialScreen.easy.description.${locale} | string | null | Sets the easy description’s translation text for the specific locale. |
login2FA | object | null | Contains the override details for the login 2FA screen |
login2FA.description | object | null | Overrides the description on the login 2FA screen. |
login2FA.description.generic | object | null | Overrides the description on the login 2FA screen with a generic text applied to all types of 2FA. |
login2FA.description.generic.${locale} | string | null | Sets the Login 2FA description’s translation text for the specific locale (one of the available codes, such as en,es,fr, etc., for example initialScreen.title.en). |
login2FA.description.sms | object | null | Overrides the description on the login 2FA for SMS 2fa auth |
login2FA.description.sms.${locale} | string | null | Sets the Login 2FA description’s for SMS 2fa auth translation text for the specific locale (one of the available codes, such as en,es,fr, etc., for example initialScreen.title.en). |
login2FA.description.email | object | null | Overrides the description on the login 2FA for EMAIL 2fa auth |
login2FA.description.email.${locale} | string | null | Sets the Login 2FA description’s for EMAIL 2fa auth translation text for the specific locale (one of the available codes, such as en,es,fr, etc., for example initialScreen.title.en). |
login2FA.description.authenticatorApp | object | null | Overrides the description on the login 2FA for AUTHENTICATOR 2fa auth |
login2FA.description.authenticatorApp.${locale} | string | null | Sets the Login 2FA description’s for AUTHENTICATOR 2fa auth translation text for the specific locale (one of the available codes, such as en,es,fr, etc., for example initialScreen.title.en). |
manuallyScreen | object | null | Contains the step-by-step-guide override details. |
manuallyScreen.disableManualSetupDocumentationLink | boolean | false | Disables the opening of the documentation URL provided in the manualSetupDocumentation configuration property. Commonly used in combination with in combination with the onEntriManualSetupDocumentationClick event to trigger a custom js function. |
manuallyScreen.stepByStepGuide | object | null | Overrides the step-by-step-guide line of text on the manual configuration screen |
manuallyScreen.stepByStepGuide.${locale} | string | null | Sets the step-by-step-guide translation text for the specific locale (one of the available codes, such as en,es,fr, etc., for example initialScreen.title.en). This field also supports links for triggering javascript functions only. These are helpful for triggering chatbots or other actions. You only need to enclose the call to action text inside the <link></link> tags to create an “empty” link, and then catch the onEntriManualSetupDocumentationClick event. |
providerLogin | object | null | Contains the override details for the Provider Login screen |
providerLogin.message | object | null | Contains the translations for overriding the introductory message on the provider login screen. |
providerLogin.message.${locale} | string | null | Sets the Provider Login’s introduction’s translation text for the specific locale (one of the available codes, such as en,es,fr, etc., for example initialScreen.title.en). Accepts the {PROVIDER} replacement token. Accepts applying bold when using the following tags <strong></strong> . |
Locales supported are one of form en
, es
, fr
, etc. If no matching translation is found for the locale in use, then the Entri’s default text will be used.
Please find the full list of supported locales in property’s documentation.
White label code example:
{
"whiteLabel": {
"hideEntriLogo": true,
"hideConfetti": true,
"logo": "LOGO_URL",
"theme": {
"fg": "#fff",
"bg": "#fa7268"
},
"logoBackgroundColor": "#444444",
"removeLogoBorder": true,
"customCopy": {
"initialScreen": {
"title": {
"en": "Custom title",
"es": "Título custom"
},
"subtitle": {
"en": "Custom subtitle",
"es": "Subtítulo custom"
}
},
"manuallyScreen": {
"disableManualSetupDocumentationLink": true,
"stepByStepGuide": {
"en": "Follow our <link>step-by-step</link> guide",
"es": "Sigue nuestra guía <link>paso-a-paso</link>"
}
}
}
}
}
Supported Record Types
Type | Description |
---|---|
A | Holds the IP address of a domain. |
AAAA | The AAAA record is conceptually similar to the A record, but it allows you to specify the IPv6 address of the server, rather than the IPv4. |
CNAME | Forwards one domain or subdomain to another domain. Does not provide an IP address. |
CAA | Used to provide additional confirmation for the Certification Authority (CA) when validating an SSL certificate. |
MX | Directs email to an email server. |
TXT | Stores text strings. For special uses of the TXT record, see Handling DKIM, SPF, and DMARC records. |
NS | Indicates which DNS server is authoritative for that domain, it is the server that stores all DNS records for a domain, including A records, MX records, or CNAME records. |
Secure root domains
This feature allows you to create a valid SSL certificate for the root domain, in a way that it can be used either as a redirect rule to the www
subdomain or as a way to show the content directly. This feature, in all cases, will create 2 new A
records with Entri’s IPs to the root domain’s dns configuration, and will use Entri as proxy to encrypt and forward the traffic to your application.
IMPORTANT: This feature requires to have Entri Secure or Entri Power enabled on your account.
Basic usage (wwwRedirect only)
This configuration may be used for securing the root domain (e.g. https://mydomain.com
) and redirect it to www
(eg. https://www.mydomain.com
)
{
applicationId: "12345",
token: mySavedToken,
secureRootDomain: true,
wwwRedirect:true,
dnsRecords: [...]
}
Advanced usage (display content)
This configuration may be used for securing the root domain (e.g. https://mydomain.com
) and show the content directly on the root domain level, without redirections.
{
applicationId: "12345",
token: mySavedToken,
secureRootDomain: true,
wwwRedirect:true,
dnsRecords: [
{
type: "A",
host: "@",
value: "{ENTRI_SERVERS}",
ttl: 300,
ssl: true,
applicationUrl: "my.applicationurl.com" // [Optional] overrides the pre-configured applicationUrl
},
... //Other records
]
}
entri.checkDomain(domain, config)
This asynchronous method checks if Entri supports automatic setup for a particular domain. It accepts two arguments:
Argument | Type | Example |
---|---|---|
domain | string - a domain with no subdomain | example.com |
config | Entri configuration object | See above |
Important note: checkDomain
function also requires you to provide the JWT authentication key within the configuration object. Refer to JWT authentication section for more information.
Sample usage:
const domainCheck = await entri.checkDomain("mydomain.com", config)
Sample response:
{
"provider": "Cloudflare", //Provider name or `Unknown`
"setupType": "Automatic", // `Automatic` or `Manual`
"NSSupport": {
"root": true, //NS modifications support for the root domain for this provider
"subdomains": true //NS modifications support for subdomains for this provider
},
"wwwRedirect": false,
"cnameFlattening": false,
"wildcardSupport": true
}
checkDomain
as HTTP endpoint
You can also analyse the support for a domain with our http version of the checkDomain
function.
POST https://api.goentri.com/checkdomain
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
Request body
{
"domain": "ifpiggiescouldfly.com",
"dnsRecords": [
{
"host": "shop",
"type": "CNAME",
"value": "exampledestination.com",
"ttl": "300"
}
]
}
Sample response
Same as the Entri’s checkDomain’s standalone response
entri.purchaseDomain(config)
This method launches the Entri Sell modal. config
is an object with the same properties as the specified in entri.showEntri(config) plus some Sell-specific options:
Property | Type | Required? | Default | Description |
---|---|---|---|---|
disableConnect | boolean | No | false | If true then the flow will only run the domain(s) purchase flow, but no specific DNS records will get configured. |
debugMode | boolean | No | false | For testing purposes. It skips the actual domain purchase flow and checkout and takes the user back to the DNS records setup step. IMPORTANT!: this should only be used with pre-existent IONOS registered domains. |
Asynchronous DNS configurations (Entri Sell only)
You can make asynchronous DNS configurations after the initial Entri Sell flow has finished for up to 1 hour after the initial domain purchase (Not supported on debugMode=true
flows). You will only need to use the following endpoint with the proper DNS records information:
POST https://api.goentri.com/connect/async
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]
Sample body:
{
"applicationId": "clickfunnels",
"domain": "domain.com",
"subdomain": "www",
"wwwRedirect": false,
"dnsRecords": [
{
"value": "13.248.155.104",
"host": "@",
"ttl": 300,
"type": "A"
}
]
}
Properties:
Type | Property | Required? | Default | Description |
---|---|---|---|---|
string | applicationId | Yes | N/A | The ID of your application (set in the dashboard) |
string | domain | Yes | N/A | The domain that will have the DNS records configured, e.g. example.com |
array of DNSRecord objects (check ref) | dnsRecords | Yes | N/A | The DNS records you wish to configure for your users (check ref) |
string | subdomain | No | N/A | The subdomain that will have the DNS records configured, e.g. www |
boolean | wwwRedirect | No | false | If true, Entri will automatically set the redirect from the bare domain to the www subdomain. |
Browser callback events
The following events are useful for following up the user’s navigation and take action under certain circumstances, for example, leading the user to your manual setup guide in case you don’t want to use Entri’s.
onEntriClose
Callback Event
This event gets triggered as soon as the modal is closed, giving you back useful information about the latest status of the flow.
Sample usage:
function handleOnEntriClose(event) {
console.log('onEntriClose', event.detail);
}
window.addEventListener('onEntriClose', handleOnEntriClose, false);
Sample event.detail
object response:
{
domain: "example.com",
success: true,
setupType: "automatic",
provider: "Provider name",
lastStatus: "IN_PROGRESS",
freeDomain: true, // Only applies to Entri Sell free domain flows
error: { // Added to the event details if the user closed the app after an error screen.
code: "ProviderError",
title: "Social Login Not Supported",
details: "You are trying to login with Social Account, please try logging in from [PROVIDER_NAME] Account"
}
}
Event details object description
Name | Type | Description |
---|---|---|
domain | string | Domain that the user entered. Can be null if the user exits before entering a domain. |
success | boolean | Was the setup of the domain completed? |
setupType | string | Type of DNS setup. Can be “automatic”, “manual”, “sharedLogin” or null if the user didn’t reach the set up stage. |
provider | string | Provider name used to configure the domain or “unknown” if it was not detected. |
lastStatus | string | lastStatus can be used if you want more information about where the user dropped off. Find all possible values below. |
freeDomain | boolean | Determines if the flow was for an Entri Sell free domain flow. Not included on other types of flow. |
error | object | Added to the event details if the user closed the app after an error screen. |
error.code | string | Exit error code |
error.title | string | Error title shown to the end user on the error screen |
error.details | string | Error details shown to the end user on the error screen |
lastStatus
possible values
lastStatus | Description |
---|---|
INITIAL | Initial screen for Entri Connect, Secure and Power. |
ENTER_DOMAIN | Enter your domain screen in case there’s no prefilledDomain |
DOMAIN_ANALYSIS | The domain is under the DNS analysis |
DOMAIN_SETUP | The domain is on the DNS configuration step |
IN_PROGRESS | The user exited the Entri modal while the DNS setup was in progress. |
EXISTING_RECORDS | The user exited the Entri modal when prompted if they want to override an existing set of DNS records. |
LOGIN | The user exited the Entri modal flow during the login process (when prompted for their login credentials and/or 2FA verification) |
MANUAL_CONFIGURATION | The user exited the Entri modal after manual DNS configuration instructions were presented. |
PROVIDER_MANUAL_SELECTION | The user entered the providers’ list for manual selection |
EXIT_WITH_ERROR | The user exited the Entri modal after an error occurred. |
DKIM_SETUP | The user exited the Entri modal after prompting |
FINISHED_SUCCESSFULLY | The user has successfully configured their domain using the automatic flow. |
FINISHED_SUCCESSFULLY_MANUAL | The user has successfully configured their domain using the manual flow. |
Possible error
codes
Below is a list of potential Entri modal errors. As a note, this list may not be exhaustive as some will be errors directly from the provider.
Error message | Title | Description |
---|---|---|
AccessDeniedError | Invalid Permissions | We’re sorry an error occurred when trying to set up your domain. Please try again. |
AuthCodeError | 2FA code invalid. | Invalid code |
EmailNotVerifiedError | Unverified email | You need to complete the email verification process in your provider account. |
InvalidCredentialsError | You’ve exceeded the maximum number of login attempts | Please reset your password or set up your domain manually. |
InvalidDomainError | Domain not found | We found the domain in your {provider} account. However, your nameservers are pointed elsewhere. This means {provider} does not manage your DNS. Please try again with the service that manages your DNS settings. |
InvalidNameservers | Domain not found | We couldn’t find the domain you entered in your provider account. |
GenericError | An error occurred when trying to set up your domain | We’re sorry an error occurred when trying to set up your domain. Please try again. |
PurchaseDomainError | An error occurred when trying to set up your purchase. | Please refresh the page and try again. |
RegistroDomainInTransition | Domain in transition | Registro.br is transitioning your account to advanced DNS mode. This can take up to 5 minutes. Please try again in 5 minutes. |
SessionError | Session Error | Your session has timed out. Please refresh the page and try again. |
SpfRecordsLimitError | An error occurred when trying to set up your domain | SPF record cannot have more than 10 domains |
SpfRecordsLengthError | An error occurred when trying to set up your domain | SPF record cannot be longer than 255 characters |
UserInputTimeoutError | Your session has timed out | For your security, your session has timed out. Please start over. |
TimeoutError | An error occurred when trying to set up your domain | We’re sorry, the process took more time than expected to complete. Please try again. |
onEntriManualSetupDocumentationClick
Event
This event is triggered when the user has clicked on the “Follow our step-by-step guide” link on the Manual configuration screen. It doesn’t include any additional information within the event.detail
object. This is useful for triggering proprietary javavascript based solutions when the user needs help with configuring the manual flow, e.g. opening support chats, etc.
Sample usage:
function myCustomFunction(event) {
//Custom code here e.g. open chat app
}
window.addEventListener('onEntriManualSetupDocumentationClick', myCustomFunction, false);
onEntriStepChange
Event
This event is triggered each time a different screen is shown within the Entri configuration process. It serves the purpose of offering additional user journey insights, making it useful for implementing listeners and triggering third-party tracking system events when necessary.
Sample usage:
function myCustomFunction(event) {
console.log('onEntriStepChange', event.detail);
}
window.addEventListener('onEntriStepChange', myCustomFunction, false);
Sample event.detail
object response:
{
domain: "example.com",
provider: "Provider name",
step: "ENTER_DOMAIN",
user: "user-123456"
}
Event details object description
Name | Type | Description |
---|---|---|
domain | string | Domain that the user entered. Can be null if the user exits before entering a domain. |
provider | string | Provider name used to configure the domain or “unknown” if it was not detected. |
step | boolean | The current step the user is visualizing |
user | string | The userId sent over the initial configuration. Helpful for mapping users vs. flows. |
step
possible values
lastStatus | Description |
---|---|
INITIAL | Initial screen for Entri Connect, Secure and Power. |
ENTER_DOMAIN | Enter your domain screen in case there’s no prefilledDomain |
DOMAIN_ANALYSIS | The domain is under the DNS analysis |
DOMAIN_SETUP | The domain is on the DNS configuration step |
IN_PROGRESS | The user exited the Entri modal while the DNS setup was in progress. |
EXISTING_RECORDS | The user exited the Entri modal when prompted if they want to override an existing set of DNS records. |
LOGIN | The user exited the Entri modal flow during the login process (when prompted for their login credentials and/or 2FA verification) |
MANUAL_CONFIGURATION | The user exited the Entri modal after manual DNS configuration instructions were presented. |
PROVIDER_MANUAL_SELECTION | The user entered the providers’ list for manual selection |
EXIT_WITH_ERROR | The user exited the Entri modal after an error occurred. |
DKIM_SETUP | The user exited the Entri modal after prompting |
FINISHED_SUCCESSFULLY | The user has successfully configured their domain using the automatic flow. |
FINISHED_SUCCESSFULLY_MANUAL | The user has successfully configured their domain using the manual flow. |
Webhooks
Entri sends JSON data via webhook to notify your backend when events occur.
All webhook notifications will have the following header in the Request: "User-Agent": "Entri-Webhook"
.
This is the list of keys you will receive on a webhook notification:
{
"id": "028b5078-8fed-4ffb-8e3e-3e6e6d8214b4",
"user_id": "sample-user",
"domain": "smallbusiness.com",
"type": "domain.added",
"propagation_status": "success",
"dkim_status": "success",
"redirection_status": "exempt",
"ssl_status": "success",
"setup_type": "automatic",
"secure_status": "success", //Only for Entri Secure usage
"power_status" : "success", //Only for Entri Power usage
"cname_target": "my.saascompany.com", //Only for Entri Power and Secure usage
"purchased_domains": ["domain1.com",...,"domainN.com"], //Only for Entri Sell usage
"data": {
"records_propagated": [
{
"type": "A",
"host": "smallbusiness.com",
"value": "54.153.2.220"
},
{
"type": "CNAME",
"host": "www",
"value": "smallbusiness.com"
}
],
"records_non_propagated": [],
"updated_objects": [
"propagation_status",
"ssl_status"
]
}
}
The JSON object contains the following properties:
Property | Type | Description |
---|---|---|
id | string | Entri’s ID for the webhook event |
user_id | string | The user ID that your application can optionally send via the configuration object during setup (see the entri.showEntri method) |
domain | string | The domain name set by your user |
type | [domain.purchased, domain.added, domain.propagation.timeout] | The event type. Options:- domain.added- domain.timeout- domain.purchased |
setup_type | [automatic, manual] | States if the dns record(s) was done in a manual or automatic way. Options:- automatic- manual |
propagation_status | [pending, success, failure, exempt] | The DNS propagation status. Options:- success- pending- failure |
dkim_status | [pending, success, failure, exempt] | Whether DKIM has been set up (see Handling DKIM, SPF, and DMARC Records). Options:- success- pending- failure- exempt (the feature is disabled) |
redirection_status | [pending, success, failure, exempt] | If the wwwRedirect feature was enabled for your applicationId, then Entri will check to confirm the status of the url redirect.Options:- success- pending- failure- exempt (the feature is disabled) |
data.records_propagated | array of DNSRecord objects | See above |
data.records_non_propagated | array of DNSRecord objects | See above |
updated_objects | array of strings | The object properties that have been updated since the last webhook event. |
secure_status | [pending, success, failure, exempt] | Whether an SSL certificate has been provisioned (see Provisioning SSL Certificates). Options:- success- pending- failure- exempt (the feature is disabled) |
power_status | [pending, success, failure, exempt] | Whether a domain has been powered (see Powering domains). Options:- success- pending- failure- exempt (the feature is disabled) |
cname_target | string | Account’s configured cname_target value for Entri Power and Secure or empty string if it doesn’t apply. |
purchased_domains | array of strings | List of purchased domains along the Entri Sell flow or empty array if not an Entri Sell flow. |
Secure API - SSL certificates
Check the domain’s eligibility
GET https://api.goentri.com/ssl?domain=www.example.com&rootDomain=false
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
Parameters description
Parameter | Required? | Default | Description |
---|---|---|---|
domain | Yes | N/A | The domain name to check |
rootDomain | No | false | true if checking the root domain’s eligibilityfalse if checking for the subdomain |
Successful response (200 status)
{
// Is the domain CNAMEed to the cname_target of the application?
"eligible": true | false,
// Is SSL provisioned?
"sslStatus": "active" | "inactive",
// Current cnameTarget set on the Dashboard
"cnameTarget": URL | "",
// Current cnameTarget value for the domain
"applicationUrl": URL | ""
}
Possible error responses
Errors are returned as a {message: 'string'}
object.
Error message | Status |
---|---|
Domain provided couldn’t be resolved. | 400 |
Provision an SSL certificate
POST https://api.goentri.com/ssl
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
Request body
{
"domain": "www.example.com",
"applicationUrl": "my.applicationurl.com", /*Optional*/
"redirectTo": "shops.example.com" /*Optional*/
}
Parameters description
Parameter | Required? | Default | Description |
---|---|---|---|
domain | Yes | N/A | The domain name to check |
applicationUrl | No | Configured on Customer’s Dashboard. | Overrides the pre-configured value set on the Dashboard. |
redirectTo | No | N/A | Allows you to create a custom redirect policy from the secured domain to any other domain or subdomain. |
Successful response (200 status)
{ "message": "Success." }
Possible error responses
Errors are returned as a {message: 'string'}
object.
Error message | Status |
---|---|
There is already a valid certificate for this domain. | 502 |
Please review SSL eligibility status of this domain. | 502 |
Please complete step 1. | 502 |
Internal Server Error. | 502 |
ApplicationUrl is not reachable | 502 |
Renew an SSL certificate
PUT https://api.goentri.com/ssl
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
Request body
{ "domain": "www.example.com" }
Successful response (200 status)
{ "message": "Success." }
Possible error responses
Errors are returned as a {message: 'string'}
object.
Error message | Status |
---|---|
{detailed error message when renewing the domain} | 502 |
Deprovision an SSL certificate
DELETE https://api.goentri.com/ssl
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
Request body
JSON
{ "domain": "www.example.com" }
Successful response (200 status)
{ "message": "Success." }
Possible error responses
Errors are returned as a {message: 'string'}
object.
Error message | Status |
---|---|
Domain not valid | 502 |
{detailed error message when deleting the SSL certificate of the domain} | 502 |
Power API - Custom domains
Check the domain’s eligibility
GET https://api.goentri.com/power?domain=www.example.com&rootDomain=false
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
Parameters description
Parameter | Required? | Default | Description |
---|---|---|---|
domain | Yes | N/A | The domain name to check |
rootDomain | No | false | true if checking the root domain’s eligibilityfalse if checking for the subdomain |
Successful response (200 status)
{
// Is the domain CNAMEed to the cname_target of the application?
"eligible": true | false,
// Is the domain already powered?
"powerStatus": "active" | "inactive",
// Current cnameTarget set on the Dashboard
"cnameTarget": URL | "",
// Current cnameTarget value for the domain
"applicationUrl": URL | "",
//Paths with granted access to the root of the Application URL
"powerRootPathAccess": [] | ["/path1", "/path2",..., "pathN"]
}
Possible error responses
Errors are returned as a {message: 'string'}
object.
Error message | Status |
---|---|
Domain provided couldn’t be resolved. | 400 |
Power a new domain
POST https://api.goentri.com/power
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
Request body
{
"domain": "www.example.com",
"applicationUrl": "my.applicationurl.com",
/*Optional*/ "powerRootPathAccess: ['/path1', '/path2',..., '/pathN']
}
Successful response (200 status)
{ "message": "Success." }
Possible error responses
Errors are returned as a {message: 'string'}
object.
Error message | Status |
---|---|
This domain has been already powered. | 502 |
Please review Power eligibility status of this domain. | 502 |
Please complete step 1. | 502 |
Internal Server Error. | 502 |
Update an already powered domain
PUT https://api.goentri.com/power
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
Request body
{
"domain": "www.example.com",
"applicationUrl": "my.applicationurl.com",
/*Optional*/ "powerRootPathAccess: ['/path1', '/path2',..., '/pathN']
}
Successful response (200 status)
{ "message": "Success." }
Possible error responses
Errors are returned as a {message: 'string'}
object.
Error message | Status |
---|---|
{detailed error message when powering again the domain } | 502 |
Remove a powered domain
DELETE https://api.goentri.com/power Header "Authorization: [JWT authorization]" Header "applicationId: [yourApplicationID]"
Request body
{ "domain": "www.example.com" }
Successful response (200 status)
{ "message": "Success." }
Possible error responses
Errors are returned as a {message: 'string'}
object.
Error message | Status |
---|---|
Domain not valid | 502 |
detailed error message when deleting the SSL certificate of the domain | 502 |
Sharing links API
Entri Connect
POST https://api.goentri.com/sharing/connect
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
Request body
{
"applicationId": "yourApplicationID",
"domain": "www.example.com",
"dnsRecords": {
"type": "cname",
"host": "@",
"value": "www",
"ttl": 1800
},
//All the rest of possible configuration options, see https://developers.entri.com/api-reference#entrishowentriconfig for more details.
}
Successful response (200 status)
{
"link": "https://app.goentri.com/share/dd339cf05f2646539e79251f8e62f0c5",
"job_id": "9c128fe4-63cd-4ec4-9ae8-8a9d06c0e6de"
}
Entri Sell
POST https://api.goentri.com/sharing/sell
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
Request body
{
"applicationId": "yourApplicationID",
"domain": "www.example.com",
"dnsRecords": {
"type": "cname",
"host": "@",
"value": "www",
"ttl": 1800
},
//All the rest of possible configuration options, see https://developers.entri.com/api-reference#entrishowentriconfig for more details.
}