> ## Documentation Index
> Fetch the complete documentation index at: https://developers.entri.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 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 [Token creation (JWT)](#token-creation-jwt).                                                                                                                                                                                                                                                                   |
| applicationUrl           | string                                 | Only when using  [Secure](/ssl-provisioning) or [Power](/power) | N/A     | Sets the applicationUrl for 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. (Enterprise tier)                                                                           |
| 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. (Premium and Enterprise tiers)                                                                                                                                                                                                                                                                                  |
| 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, da, sv.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](http://www). See [Dynamic configuration variables based on the user-inputted domain](/api-reference#dynamic-configuration-variables).                                                                                     |
| 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\\>](https://example.com/dns-setup\\>). This link is disabled when using the propertydisableManualSetupDocumentationLink:true in the whiteLabel's configuration. |
| iframeSandbox            | boolean                                | No                                                              | false   | When set to `true`, applies a `sandbox` attribute to the Entri iframe, restricting its capabilities to only: `allow-scripts`, `allow-same-origin`, `allow-forms`, `allow-popups`, and `allow-popups-to-escape-sandbox`. This adds an extra layer of security to the embedded iframe.                                                                                  |
| overrideSPF              | boolean                                | No                                                              | false   | Forces the SPF record override in case there is a pre-existent one instead of merging it. This feature is not supported by Cloudlare and Ionos providers.                                                                                                                                                                                                             |
| power                    | boolean                                | No                                                              | false   | Enables Entri [Power](/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](/ssl-provisioning).                                                                                                                                                                                                                   |
| 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. You can use stringfied jsons in order to add complex structured data.                                                                                                                                                                                                                             |
| wwwRedirect              | boolean                                | No                                                              | false   | When feasible, Entri will automatically redirect site.com to [www.site.com](http://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.                                                                                                                                                                                                                      |
| validateCAA              | boolean                                | No                                                              | false   | When set to `true` Entri will check if there is an existing CAA present in the domain or not. If it is present, it will add the CAA record sent in the config, else not.                                                                                                                                                                                              |

### Possible `showEntri()` Errors

When any of the following critical errors occur, a console error will be logged, and the user will only see “Entri is misconfigured. Please contact support for assistance.” in the UI.

| Error                             | Console Message                                                                                                               | Reason                                                                                      |
| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| Domain Invalid or Unsupported TLD | "This domain is invalid or uses an unsupported TLD (unlisted {tld})."                                                         | The domain provided doesn't pass validation (invalid TLD, not in ICANN list, or malformed). |
| Missing applicationId             | "Missing parameter: applicationId"                                                                                            | The configuration object does not include `applicationId`.                                  |
| Configuration Error               | "Configuration error, please refer to the docs at [https://developers.goentri.com/docs](https://developers.goentri.com/docs)" | `forceManualSetup: true` was used without providing `prefilledDomain`.                      |

### `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. Some providers don't accept this value and will default to the minimum value allowed by the provider.)                                                                                            |
| type          | string (see below) | Yes                 | CNAME (Check the [Supported record types](/api-reference#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’s a root domain, a subdomain, or you’re using custom name‑servers, then this is the best option for you. You just need to include three separate objects `rootNS`, `domain` and `subDomain` and the resolver will pick the right one: whenever the `rootNS` key is found it takes absolute precedence; if your provider doesn’t support NS modifications (or `rootNS` is absent), it falls back to `subDomain` for any subdomains, and finally to the `domain` records object.

Sample conditional records object:

```
{
  ...,
  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,
      }
    ],
    rootNS: [
      {
        type: "NS",
        host: "@",
        value: "ns1.sampleprovider.com",
        ttl: 300,
      },
      {
        type: "NS",
        host: "@",
        value: "ns2.sampleprovider.com",
        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}` | Google        |

<Note>
  *Please note, all the variables are* **case-sensitive** *and must be inputted
  in all upper-case.*
</Note>

### `whiteLabel` object

<Check>**Entri Connect Growth tier and above. Included on Entri Sell**</Check>

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 override the configured Application logo, and use this one instead. 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.                                                                                 |
| hideCompanyName             | boolean | No        | false   | Hides the company name across the flow.                                                                                                                                  |
| hideProgressIndicator       | boolean | No        | null    | Hides the progress indicator at the top of the modal                                                                                                                     |
| theme                       | object  | No        | null    | Described below (see [theme Object](/api-reference#theme-object))                                                                                                        |
| icons                       | object  | No        | null    | Described below (see [icons Object](/api-reference#icons-object))                                                                                                        |
| customProperties            | object  | No        | null    | Described below (see [customProperties Object](/api-reference#customproperties-object))                                                                                  |
| customCopy                  | object  | No        | null    | Described below (see [customCopy Object](/api-reference#whitelabel-customcopy-object))                                                                                   |

<Tip>
  To white-label the sharing link URL itself — replacing `app.goentri.com` with your own branded domain — configure the **Sharing link URL** field in your Dashboard under Account Settings → Application Settings. This is an Enterprise-tier feature and requires no code changes. See [Sharing Link Custom Domain](/api-reference#sharing-link-custom-domain) for details.
</Tip>

#### `whiteLabel.theme` Object

The `whiteLabel.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.

**Entri Connect Theme Options**

| Property                      | Type    | Default    | Description                                                                                                                                                         |
| ----------------------------- | ------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| bg                            | string  | N/A        | Primary brand color. Please input a hex code. Applies to primary buttons, links, and input shadow **Recommended for quick theming.**                                |
| fg                            | string  | N/A        | Text color on primary elements. Please input a hex code. Applies to text on buttons **Recommended for quick theming.**                                              |
| darkMode                      | string  | "disabled" | Color scheme: `"disabled"` (light), `"enabled"` (dark), or `"auto"` (matches system preference).                                                                    |
| colors                        | object  | null       | Custom color overrides for granular control. See [Colors Reference](/api-reference#whitelabel-theme-colors-object) below for complete list of available properties. |
| 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`                                                                                                                           |
| lightBox                      | object  | null       | Contains custom properties for the backdrop/overlay                                                                                                                 |
| lightBox.color                | string  | null       | Backdrop/overlay color. Please input a transparent hsla or rgba code                                                                                                |
| 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)                                                                 |

#### `whiteLabel.theme.colors` Object

The `colors` object provides granular control over individual UI elements. Most of `colors` properties accept standard CSS color formats (hex, rgb, rgba, hsl, hsla), except `bg`, `fg`, `buttonPrimary`, `errorShadowColorRgb`, `errorShadowColorRgb`.

**Special Format Requirements:**

| Property              | Format             | Example         | Notes                                                                                                       |
| --------------------- | ------------------ | --------------- | ----------------------------------------------------------------------------------------------------------- |
| `buttonPrimary`       | Hexadecimal string | `"#1f77f8"`     | Same format for `them.bg`, `theme.fg`.                                                                      |
| `shadowColorRgb`      | RGB triplet string | `"0, 0, 0"`     | Comma-separated RGB values without parentheses. Used for CSS custom properties that require RGB components. |
| `errorShadowColorRgb` | RGB triplet string | `"247, 38, 38"` | Same format as `shadowColorRgb`.                                                                            |

**Colors Property Reference:**

Below is a comprehensive list of where each color property is applied in the Entri Connect modal:

| Property              | Applied To                    | CSS Variable               | Example Usage                   |
| --------------------- | ----------------------------- | -------------------------- | ------------------------------- |
| `modalBackground`     | Main modal container          | `--modal-background`       | Background of the entire modal  |
| `modalOverlay`        | Primary overlay               | `--modal-overlay`          | Backdrop when modal is open     |
| `footerBackground`    | Modal footer                  | `--footer-background`      | Bottom section of modal         |
| `textPrimary`         | Main text content             | `--text-primary`           | Primary text throughout modal   |
| `textSecondary`       | Supporting text               | `--text-secondary`         | Descriptions, helper text       |
| `textTertiary`        | Tertiary text                 | `--text-tertiary`          | Least prominent text            |
| `buttonPrimary`       | Primary buttons               | `--button-primary`         | Main action buttons             |
| `buttonPrimaryText`   | Primary button text           | `--button-primary-text`    | Text on primary buttons         |
| `buttonSecondary`     | Secondary buttons             | `--button-secondary`       | Less prominent action buttons   |
| `buttonSecondaryText` | Secondary button text         | `--button-secondary-text`  | Text on secondary buttons       |
| `linkPrimary`         | Primary links                 | `--link-primary`           | Main hyperlinks                 |
| `linkSecondary`       | Secondary links               | `--link-secondary`         | Less prominent links            |
| `linkSecondaryHover`  | Secondary link hover state    | `--link-secondary-hover`   | Hover effect on secondary links |
| `linkDestructive`     | Destructive action links      | `--link-destructive`       | Close app button                |
| `inputBackground`     | Form input backgrounds        | `--input-background`       | Text input fields               |
| `inputBorder`         | Form input borders            | `--input-border`           | Input field borders             |
| `inputText`           | Input field text              | `--input-text`             | Text inside input fields        |
| `inputPlaceholder`    | Input placeholder text        | `--input-placeholder`      | Placeholder text in inputs      |
| `divider`             | Section dividers              | `--divider`                | Horizontal rules, separators    |
| `border`              | Generic borders               | `--border`                 | General border color            |
| `shadowColorRgb`      | Shadow color components       | `--shadow-color-rgb`       | RGB values for shadow colors    |
| `tableHeaderBg`       | Table header background       | `--table-header-bg`        | Header row of tables            |
| `tableHeaderBorder`   | Table header borders          | `--table-header-border`    | Border around table headers     |
| `tableCellBorder`     | Table cell borders            | `--table-cell-border`      | Borders between table cells     |
| `tableRowEvenBg`      | Even table row background     | `--table-row-even-bg`      | Zebra striping for tables       |
| `tableRowHoverBg`     | Table row hover background    | `--table-row-hover-bg`     | Row background on hover         |
| `errorBorder`         | Error state borders           | `--error-border`           | Borders on error inputs         |
| `errorText`           | Error message text            | `--error-text`             | Error message color             |
| `errorBackground`     | Error state background        | `--error-background`       | Background for error states     |
| `errorShadowColorRgb` | Error shadow color components | `--error-shadow-color-rgb` | RGB values for error shadows    |

<Note>
  **Dark Mode Preset:** When `darkMode: 'enabled'` is set, Entri automatically applies a comprehensive dark color scheme. You can still override individual colors by specifying them in the `colors` object after setting `darkMode`.
</Note>

<Note>
  **Quick Theme + Advanced Customization:** The `bg` and `fg` properties provide fast global theming, while the `colors` object allows granular control. They work together - `colors` properties override the automatic mappings from `bg`/`fg` where specified.

  **Example:**

  ```javascript theme={null}
  theme: {
    bg: "#1f77f8",        // Quick: sets buttons, links, shadows
    fg: "#FFFFFF",        // Quick: sets text on primary elements
    colors: {
      modalBackground: "#F5F5F5",
      buttonPrimary: "#FF0000"  // Override: specific customization
    }
  }
  ```
</Note>

**Entri Sell Theme Options**

| Property         | Type   | Default | Description                                                                                                                                                         |
| ---------------- | ------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| primary          | string | N/A     | Main color used in your theme. It’s usually the most recognizable color in the interface. Example: `"#012939"`                                                      |
| onPrimary        | string | N/A     | Color used for text and icons that appear on top of the primary color. Example: `"#ffffff"`                                                                         |
| secondary        | string | N/A     | Color that complements the primary color and is used for secondary UI elements. Example: `"#012939"`                                                                |
| onSecondary      | string | N/A     | Color used for text and icons that appear on top of the secondary color. Example: `"#ffffff"`                                                                       |
| headerBackground | string | N/A     | Background color of the header. Accepts any valid CSS color code (e.g., hex, rgb). If not defined, it will default to the primary color value. Example: `"#123456"` |
| interactive      | string | N/A     | Color for interactive elements such as radio buttons. Accepts any valid CSS color code (e.g., hex, rgb). Example: `"#ffcc00"`                                       |
| premiumBadge     | string | N/A     | Background color of premium badge components. Accepts any valid CSS color code (e.g., hex, rgb). Example: `"#00ffcc"`                                               |
| onPremiumBadge   | string | N/A     | Text color on the premium badge. Accepts any valid CSS color code (e.g., hex, rgb). Example: `"#ffffff"`                                                            |
| priceBadge       | string | N/A     | Background color of the price badge component. Accepts any valid CSS color code (e.g., hex, rgb). Example: `"#ff6600"`                                              |
| onPriceBadge     | string | N/A     | Text color on the price badge. Accepts any valid CSS color code (e.g., hex, rgb). Example: `"#ffffff"`                                                              |
| activating       | string | N/A     | Background color of the “Search Domain” button. Accepts any valid CSS color code (e.g., hex, rgb). Example: `"#ff4500"`                                             |
| onActivating     | string | N/A     | Text color on the “Search Domain” button. Accepts any valid CSS color code (e.g., hex, rgb). Example: `"#000000"`                                                   |

#### `whiteLabel.icons` Object

The `whiteLabel.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  |

#### `whiteLabel.customProperties` Object

<Check>**Enterprise tier.**</Check>

The `whiteLabel.customProperties` object allows you to set different behaviours related specifically to specific elements or a screen's behavior.

| Property                                    | Type             | Default | Description                                                                                                                                                                                                                                                                                                                                                          |
| ------------------------------------------- | ---------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| embeddedSelector                            | string           | null    | A valid CSS selector (e.g., #entri-container) specifying the target element where the Entri Connect login UI should be embedded. If null, the authentication flow will open in a modal.                                                                                                                                                                              |
| congratulations.disableScreen               | boolean          | false   | If set to true, disables the congratulations screen in the modal after the domain connection.                                                                                                                                                                                                                                                                        |
| initialScreen                               | object           | null    | Contains properties for the initial screen                                                                                                                                                                                                                                                                                                                           |
| initialScreen.showManualInstructionsCTA     | boolean          | false   | Enables the go-to manual link in the initial screen. Closes the modal and adds  the `authenticateManuallyClicked: true` key to the `onEntriClose` event.                                                                                                                                                                                                             |
| 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.                                                                                                                                                  |
| errorScreen                                 | object           | null    | Contains properties for the error screen                                                                                                                                                                                                                                                                                                                             |
| errorScreen.genericError                    | object           | null    | Contains properties for the Generic error screen specifically                                                                                                                                                                                                                                                                                                        |
| errorScreen.genericError.image              | object           | null    | Overrides the default image/animation shown for Generic errors                                                                                                                                                                                                                                                                                                       |
| errorScreen.sessionError                    | object           | null    | Contains properties for the Session error screen specifically                                                                                                                                                                                                                                                                                                        |
| errorScreen.sessionError.image              | object           | null    | Overrides the default image/animation shown for Session errors                                                                                                                                                                                                                                                                                                       |
| existingRecords                             | object           | null    | Contains properties for the Existing records screen                                                                                                                                                                                                                                                                                                                  |
| existingRecords.disableScreen               | boolean          | false   | Disables the Existing Records override prompt and confirms automatically                                                                                                                                                                                                                                                                                             |
| fwdToColleague.background                   | Object or String | null    | Changes all possible css background properties. Can be used as **String**, working as described in the `background` [CSS property definition](https://developer.mozilla.org/en-US/docs/Web/CSS/background), or as an **Object**, making use of all possible background sub-properties using camelCase syntax keys, for example: `background:{backgroundColor:"red"}` |
| 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.changeProvider                | object           | null    | Sets visual changes to the change provider feature on the login screen                                                                                                                                                                                                                                                                                               |
| providerLogin.changeProvider.hide           | boolean          | false   | Hides the "Change provider" feature                                                                                                                                                                                                                                                                                                                                  |
| providerLogin.gotoManualLink                | object           | null    | Sets visual changes to the social login icons on the provider login screen                                                                                                                                                                                                                                                                                           |
| providerLogin.gotoManualLink.disable        | boolean          | false   | Hides the go to manual text copy                                                                                                                                                                                                                                                                                                                                     |
| providerLogin.forwardLink.hideLeftArrow     | boolean          | false   | Hides the `>>` icon at the left of the records-preview link.                                                                                                                                                                                                                                                                                                         |
| providerLogin.forwardLink.style             | Object           | false   | Allows to include custom styling for to the forward to a colleague link. Each property has to be in added in camelCase format, eg. `background: "#000"`, `color: "white"`, `padding: "0.5rem 1rem"`, `borderRadius: "5px"`, `textDecoration: "none"`, etc.                                                                                                           |
| providerLogin.forwardLink.disable           | boolean          | false   | Disables the *Forward Link* feature.                                                                                                                                                                                                                                                                                                                                 |
| providerLogin.forwardLink.hide              | boolean          | false   | Hides the *Forward Link* feature entirely, so the forward-to-a-colleague link does not render on the Provider Login screen.                                                                                                                                                                                                                                          |
| providerLogin.recordsPreview\.hide          | boolean          | false   | Hides the records preview feature/link.                                                                                                                                                                                                                                                                                                                              |
| sharedFlow\.background                      | Object or String | null    | Changes all possible css background properties. Can be used as **String**, working as described in the `background` [CSS property definition](https://developer.mozilla.org/en-US/docs/Web/CSS/background), or as an **Object**, making use of all possible background sub-properties using camelCase syntax keys, for example: `background:{backgroundColor:"red"}` |
| sharedFlow\.hideDecorations                 | boolean          | false   | Disables the default Entri background decorations on the shared flow                                                                                                                                                                                                                                                                                                 |
| general.hideCloseButton                     | boolean          | false   | When `true`, hides the close (X) button in the widget header. The button space is preserved in the layout but remains invisible, which is useful when your own UI is responsible for dismissing the widget.                                                                                                                                                          |
| general.embeddedMode.fillContainer          | boolean          | false   | When `true`, makes the embedded widget fill its parent container at 100% width and height, and removes the default border-radius and box-shadow. Requires `general.embeddedMode.selector` to be set. Useful when you want the widget to be fully responsive inside your own layout container.                                                                        |

#### `whiteLabel.customCopy` Object

<Check>**Entri Connect Premium tier and above. Included on Entri Sell**</Check>

The `whiteLabel.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 `whiteLabel.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 congratulations 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>`. Accepts a `{USER}` (described below) and `{DOMAIN}` placeholders.                                                                                                                                                                                                                                                    |
| congratulations.user                               | string  | null    | The user value to replace on the `{USER}` token in the `congratulations.description`                                                                                                                                                                                                                                                                                                                                                                                               |
| congratulations.sell.title                         | object  | null    | Overrides the title on the Congratulations screen.                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| congratulations.sell.title.\$\{locale}             | string  | null    | Sets the **Congratulations title's** translation text for the specific locale. Accepts the `{DOMAIN}` and `{APPLICATION_NAME}` replacement tokens. Accepts applying bold when using the following tags `<strong></strong>`.                                                                                                                                                                                                                                                        |
| congratulations.sell.description                   | object  | null    | Overrides the description on Entri Sell congratulations screen.                                                                                                                                                                                                                                                                                                                                                                                                                    |
| congratulations.sell.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>`. Accepts a `{USER}` (described below) and `{APPLICATION_NAME}` replacement tokens.                                                                                                                                                                                                                                    |
| congratulations.sell.user                          | string  | null    | The user value to replace on the `{USER}` token in the `congratulations.sell.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>`.                                                                                                                                                                                                                                                                                                            |
| domainAnalysis                                     | object  | null    | Contains the override details for the Domain analysis screen                                                                                                                                                                                                                                                                                                                                                                                                                       |
| domainAnalysis.title                               | object  | null    | Overrides the title on the Domain analysis screen.                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| domainAnalysis.title.\$\{locale}                   | string  | null    | Sets the **Domain Analysis title's** translation text for the specific locale.                                                                                                                                                                                                                                                                                                                                                                                                     |
| domainAnalysis.analyzing                           | object  | null    | Overrides the **analysis in progress** text on the Domain analysis screen.                                                                                                                                                                                                                                                                                                                                                                                                         |
| domainAnalysis.analyzing.\$\{locale}               | string  | null    | Sets the  **analysis in progress** translation text for the specific locale.                                                                                                                                                                                                                                                                                                                                                                                                       |
| domainAnalysis.analyzed                            | object  | null    | Overrides the **analysis done** text on the Domain analysis screen.                                                                                                                                                                                                                                                                                                                                                                                                                |
| domainAnalysis.analyzed.\$\{locale}                | string  | null    | Sets the  **analysis done** translation text for the specific locale.                                                                                                                                                                                                                                                                                                                                                                                                              |
| domainAnalysis.detecting                           | object  | null    | Overrides the **detection in progress** text on the Domain analysis screen.                                                                                                                                                                                                                                                                                                                                                                                                        |
| domainAnalysis.detecting.\$\{locale}               | string  | null    | Sets the  **detection in progress** translation text for the specific locale.                                                                                                                                                                                                                                                                                                                                                                                                      |
| domainAnalysis.detected                            | object  | null    | Overrides the **detection done** text on the Domain analysis screen.                                                                                                                                                                                                                                                                                                                                                                                                               |
| domainAnalysis.detected.\$\{locale}                | string  | null    | Sets the  **detection done** translation text for the specific locale.                                                                                                                                                                                                                                                                                                                                                                                                             |
| domainAnalysis.gettingSetupReady                   | object  | null    | Overrides the **getting setup ready** text on the Domain analysis screen.                                                                                                                                                                                                                                                                                                                                                                                                          |
| domainAnalysis.gettingSetupReady.\$\{locale}       | string  | null    | Sets the  **getting setup ready** in progress translation text for the specific locale.                                                                                                                                                                                                                                                                                                                                                                                            |
| domainAnalysis.setupIsReady                        | object  | null    | Overrides the **setup is ready** text on the Domain analysis screen.                                                                                                                                                                                                                                                                                                                                                                                                               |
| domainAnalysis.setupIsReady.\$\{locale}            | string  | null    | Sets the  **setup is ready** translation text for the specific locale.                                                                                                                                                                                                                                                                                                                                                                                                             |
| 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>`. For Entri Sell, sets the title text that appears on the initial screen of the domain purchase flow, localized by language. Example: "Search for your domain"                                                                                      |
| initialScreen.marketingCopy.\$\{locale}            | string  | null    | Marketing copy that appears below the domain input field, localized by language. Example: *"Your website will look even better with a custom domain!"* (Entri Sell only)                                                                                                                                                                                                                                                                                                           |
| 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>`.                                                                                                                                                                               |
| providerLogin.forwardLogin                         | object  | null    | Contains translations for customizing the **Forward login** call to action..                                                                                                                                                                                                                                                                                                                                                                                                       |
| providerLogin.forwardLogin.\$\{locale}             | object  | null    | Sets the **Forward login** translation text for the specific locale (one of the available codes, such as en,es,fr, etc., for example providerLogin.forwardLogin.en).                                                                                                                                                                                                                                                                                                               |
| providerLogin.showPreview                          | object  | null    | Contains translations for customizing the text that shows the record previews.                                                                                                                                                                                                                                                                                                                                                                                                     |
| providerLogin.showPreview.\$\{locale}              | object  | null    | Sets the **Show preview** translation text for the specific locale (one of the available codes, such as en,es,fr, etc., for example initialScreen.title.en).                                                                                                                                                                                                                                                                                                                       |
| providerLogin.hidePreview                          | object  | null    | Contains translations for customizing the text that hides the record previews.                                                                                                                                                                                                                                                                                                                                                                                                     |
| providerLogin.hidePreview.\$\{locale}              | object  | null    | Sets the **Hide preview** translation text for the specific locale (one of the available codes, such as en,es,fr, etc., for example initialScreen.title.en).                                                                                                                                                                                                                                                                                                                       |
| providerLogin.gotoManualLink                       | object  | null    | Contains translations for customizing the "go to our manual setup" link rendered on the Provider Login and DomainConnect/OAuth screens.                                                                                                                                                                                                                                                                                                                                            |
| providerLogin.gotoManualLink.\$\{locale}           | string  | null    | Sets the **go to manual setup link** translation text for the specific locale. Wrap clickable text in `<link></link>` tags. Also accepts `<strong>`, `<b>`, `<br>` tags. Example: `"Follow our <link>manual setup</link> guide"`.                                                                                                                                                                                                                                                  |

<Note>
  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](/api-reference#entrishowentriconfig).
</Note>

#### White label code example:

```JavaScript JavaScript theme={null}
{
  "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](/handling-dkim-spf-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](/ssl-provisioning) or [Entri Power](/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`)

```JSON JSON theme={null}
{
  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.

```JSON JSON theme={null}
{
  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
  ]
}
```

## Check Domain

The checkDomain function checks the DNS configuration for a specified domain and returns details about the current DNS provider. Depending on the provided DNS records, it includes information about the registrar, supported DNS features, and, if NS records are passed, the authoritative DNS provider managing the zone file. This helps users understand the domain’s setup and feature support.

### `entri.checkDomain(domain, config)`

This asynchronous method checks if Entri supports automatic setup for a particular domain. It accepts two arguments:

| Argument              | Type                                | Required? | Example                                                                                                                                                                                               |
| --------------------- | ----------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| domain                | string - a domain with no subdomain | **Yes**   | example.com                                                                                                                                                                                           |
| config                | Entri configuration object          | **Yes**   | See [above](#entrishowentriconfig)                                                                                                                                                                    |
| config.checkConflicts | Boolean                             | **No**    | When checkConflicts is set to `true`, the system analyzes the DNS records provided in the dnsRecords array and determine whether any of them would require an override. The default value is `false`. |

**Important note**: `checkDomain` function also requires you to provide the JWT authentication key within the configuration object. Refer to [JWT authentication section](/install#3-fetch-the-json-web-token-jwt) for more information.

#### Sample usage:

```js theme={null}
const domainCheck = await entri.checkDomain("mydomain.com",
  {
    "applicationId": "myAppId",
    "token": "..."
    "dnsRecords": [
      {
        "host": "www",
        "ttl": 300,
        "type": "CNAME",
        "value": "cname.mydomain.com"
      },
      "checkConflicts": true, // Optional - Increases the response time
      //... etc
    ],
    //...other optional configuration keys
  }
)
```

### Check Domain as HTTP endpoint

<Check>**Premium tier and above.**</Check>

You can also analyse the support for a domain with our http version of the `checkDomain` function.

```txt theme={null}
POST https://api.goentri.com/checkdomain
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

#### Request body

```JSON JSON theme={null}
{
  "domain": "ifpiggiescouldfly.com",
  "dnsRecords": [
      {
        "host": "shop",
        "type": "CNAME",
        "value": "exampledestination.com",
        "ttl": "300"
      }
    ],
    "checkConflicts": true, // Optional - Increases the response time
    //... All the rest of the Entri Connect's configuration object
}
```

#### Sample Response

```json theme={null}
{
  "provider": "Cloudflare",
  "setupType": "Automatic",
  "NSSupport": {
    "root": true,
    "subdomains": true
  },
  "wwwRedirect": true,
  "cnameFlattening": true,
  "wildcardSupport": true,
  "subdomainCnameNsOverride": false,
  "spfOverrideSupport": false,
  "caaSupport": true,
  "supportsSocialLogin": "yes",
  "expired": false,
  "registered": true
}
```

For full detail, please refer to [Check Domain Response](/api-reference#check-domain-response)

### Detecting Record Conflicts (`checkConflicts`)

When using the `checkDomain` function or endpoint, you can optionally enable DNS record conflict detection by adding the `checkConflicts` key to your configuration object.

```js theme={null}
checkConflicts: true // Optional — default is false
```

When enabled, Entri analyzes all DNS records passed in the `dnsRecords` array and compares them against the existing authoritative DNS configuration of the domain.\
This helps you understand whether applying your desired configuration would require overwriting existing records.

#### How conflict detection works

If `checkConflicts` is set to `true`, Entri will:

1. Fetch the current DNS records for the relevant hostnames.
2. Compare them with the requested records.
3. Determine whether any requested record would overwrite existing DNS data.

A conflict is detected when:

* A record with the same **host** and **type** already exists with a different value.
* A CNAME conflicts with other record types on the same hostname.
* Any record conflicts with an existing CNAME.
* MX records differ from the existing set.
* SPF TXT records would require merging or replacement.
* An NS record subdelegates a hostname where other records are being added.

#### Response shape when `checkConflicts` is enabled

If enabled, the `checkDomain` response will include a new field:

```json theme={null}
"recordConflicts": null | [ ... ]
```

* `null` → No conflicts detected
* `array` → A list of detected conflicts, including details about the existing and requested records

Each conflict object follows this structure:

```json theme={null}
{
  "host": "www",
  "type": "CNAME",
  "value": "www.exampledomain.com",
  // "priority": "1" // Only for MX records
}
```

#### Example

```json theme={null}
{
  "provider": "Cloudflare",
  "setupType": "Automatic",
  "recordConflicts": [
    {
      "host": "www",
      "type": "CNAME",
      "value": "www.exampledomain.com",
    }, 
    {
      "host": "@",
      "type": "MX",
      "value": "mail.exampledomain.com",
      "priority": 1
    }, 
  ],
  "expired": false,
  "registered": true
}
```

#### Notes

<Warning>
  * Enabling `checkConflicts` increases response time because authoritative DNS lookups must be performed.
  * The data used for the analysis is gotten from the public domain DNS information.
</Warning>

* If `checkConflicts: true` is provided **without** `dnsRecords`, the API will return an error.
* This feature is designed to help partners determine whether prompting users about DNS overrides is necessary before running the automated setup.

### Check Domain Response

This section describes the response structure for the API endpoint or JavaScript function that checks the DNS provider information for a given domain. Depending on the DNS records passed as parameters, the response will include details about the domain's registrar or the authoritative DNS provider currently managing the zone file.

#### Example 1: Standard DNS Records (No NS Records)

When the request contains DNS records that are not NS (Name Server) records, the response will include information about the current DNS provider, such as the provider name, setup type, and feature support details.

**Request:**

```json theme={null}
{
  "applicationId": "myAppId", //Only JS function
  "token": "...", //Only JS function
  "domain": "entri.com",
  "dnsRecords": [
    {
      "host": "shop",
      "type": "CNAME",
      "value": "exampledestination.com",
      "ttl": "300"
    }
  ]
}
```

**Response:**

```json theme={null}
{
  "provider": "Cloudflare",
  "setupType": "Automatic",
  "NSSupport": {
    "root": true,
    "subdomains": true
  },
  "wwwRedirect": true,
  "cnameFlattening": true,
  "wildcardSupport": true,
  "subdomainCnameNsOverride": false,
  "spfOverrideSupport": false,
  "caaSupport": true,
  "supportsSocialLogin": "yes",
  "expired": false,
  "registered": true
}
```

In this case, the `authoritativeDnsProvider` field is not included because NS records were not part of the request.

#### Example 2: Request with NS Records

If NS records are provided in the request, the response will also include information about the authoritative DNS provider managing the zone file.

**Request:**

```json theme={null}
{
  "applicationId": "myAppId", //Only JS function
  "token": "...", //Only JS function
  "domain": "entri.com",
  "dnsRecords": [
    {
      "host": "@",
      "type": "NS",
      "value": "ns1.exampledestination.com",
      "ttl": "300"
    }
  ]
}
```

**Response:**

```json theme={null}
{
  "provider": "Cloudflare",
  "setupType": "Automatic",
  "NSSupport": {
    "root": true,
    "subdomains": true
  },
  "wwwRedirect": true,
  "cnameFlattening": true,
  "wildcardSupport": true,
  "subdomainCnameNsOverride": false,
  "spfOverrideSupport": false,
  "caaSupport": true,
  "supportsSocialLogin": "yes",
  "authoritativeDnsProvider": {
    "provider": "Cloudflare",
    "setupType": "Automatic",
    "wwwRedirect": true,
    "cnameFlattening": true,
    "wildcardSupport": true,
    "subdomainCnameNsOverride": false,
    "spfOverrideSupport": false,
    "caaSupport": true,
    "supportsSocialLogin": "yes"
  },
  "expired": false,
  "registered": true
}
```

In this case, the `authoritativeDnsProvider` object is included because NS records were passed, providing details about the provider managing the zone file.

### Response Parameters

* **provider**: The current DNS provider for the domain, either based on common DNS records or NS records if provided.
* **setupType**: Indicates whether automatic setup is supported for the DNS provider. If not, a manual setup flow will be presented.
* **NSSupport**: Object that specifies whether the provider supports nameserver configurations at the root or subdomain levels:
  * **root**: `true` if root-level nameserver configuration is supported.
  * **subdomains**: `true` if subdomain-level nameserver configuration is supported.
* **wwwRedirect**: Indicates whether the provider supports automatic root domain-to-www redirects.
* **cnameFlattening**: Specifies whether the provider supports CNAME flattening (resolving CNAMEs at the root level).
* **wildcardSupport**: Indicates if wildcard DNS entries (e.g., `*.domain.com`) are supported by the provider.
* **subdomainCnameNsOverride**: If `true`, the provider will automatically remove a CNAME record when a subdomain nameserver with the same name is added.
* **spfOverrideSupport**: Determines how Entri handles SPF record updates. `true` if Entri can completely replace the existing SPF record with a new value. `false` if Entri can only append new values to the existing record or create a new one if no SPF record is present.
* **caaSupport**: Determines wether the provider supports CAA records or not.
* **supportsSocialLogin**: Specifies whether Entri supports social network logins for the provider. `"yes"` if **Entri** supports social login for this provider. `"no"` if **Entri** does not support social login for this provider. `"n/a"` if the **provider** does not support social login, so this setting does not apply.
* **expired**: Boolean value indicating if the domain's current DNS setup has expired.
* **registered**: Boolean value indicating whether the domain is registered.
* **authoritativeDnsProvider** (only included when NS records are provided in the request):
  * *All the same fields as the above, but apply only to the `authoritativeDnsProvider`*

This response format helps users understand the current DNS configuration and determine whether the provider supports certain advanced features like wildcard records, CNAME flattening, and subdomain overrides.

## Check Domain Availability

This endpoint checks whether a domain is available for registration before initiating the **Entri Sell** flow. It returns the availability status along with a reason why the domain is not available, helping you determine whether to proceed with the purchase process.

### Check Domain Availability as HTTP endpoint

```txt theme={null}
GET https://api.goentri.com/checkdomainavailability
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

#### Headers

| Header        | Required? | Description                                  |
| ------------- | --------- | -------------------------------------------- |
| Authorization | Yes       | Bearer token (JWT) for authentication.       |
| applicationId | Yes       | Your Application ID as set in the dashboard. |

#### Query Parameters

| Parameter | Type   | Required? | Description                                                |
| --------- | ------ | --------- | ---------------------------------------------------------- |
| domain    | string | Yes       | Fully qualified domain name to check (e.g. `example.com`). |

#### Sample Response

```json theme={null}
{
  "domain": "example.com",
  "available": true,
  "reason": "AVAILABLE", // or "UNSUPPORTED_TLD", "ERROR", "UNAVAILABLE"
  "checkedAt": "2025-05-15T17:20:00Z"
}
```

## `entri.purchaseDomain(config)`

This method launches the [Entri Sell](/domain-purchasing) modal. The `config` object includes the same set of properties as those specified in [entri.showEntri(config)](/api-reference#entrishowentriconfig), plus additional Sell-specific options:

| Property                      | Type    | Required? | Default     | Description                                                                                                                                                                                                                                              |
| ----------------------------- | ------- | --------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `disableConnect`              | boolean | No        | false       | If true, the flow will only run the domain(s) purchase process, but no specific DNS records will be configured.                                                                                                                                          |
| `debugMode`                   | boolean | No        | false       | For testing purposes. It skips the actual payment process takes the user to the congratulations step.                                                                                                                                                    |
| `sellVersion`                 | string  | Yes       | v2          | Specifies the version of the domain purchase flow to use. Set this to `"v3"` to activate the latest version with enhanced features like theming, customization, and prefilled user data.                                                                 |
| `successCallbackUrl`          | string  | No        | N/A         | The URL where the user will be redirected after a successful domain purchase.                                                                                                                                                                            |
| `errorCallbackUrl`            | string  | No        | N/A         | The URL where the user will be redirected in case of an error during the domain purchase process.                                                                                                                                                        |
| `dnsRecords`                  | array   | Yes       | N/A         | An array of DNS records to configure for the purchased domain. Each record should include `type`, `host`, `value`, and `ttl`.                                                                                                                            |
| `freeDomain`                  | boolean | No        | false       | This feature allows you to offer your users their first domain at no cost. Should only be used on paid users on your platform. Please contact your account manager to enable this feature.                                                               |
| `locale`                      | string  | No        | `"en"`      | The language/locale used in the domain purchase flow.                                                                                                                                                                                                    |
| `disableMailUpsell`           | boolean | No        | false       | If set to true, the mail inbox upsell step is disabled and will not appear in the domain purchase flow. This property allows you to prevent the mail inbox upsell step seamlessly, ensuring a streamlined user experience without optional distractions. |
| `searchType`                  | string  | No        | `"classic"` | (IONOS only) Use "ai" to enable AI-generated domain suggestions instead of the default "classic" search.                                                                                                                                                 |
| `whiteLabel`                  | object  | No        | N/A         | Customizes the branding and appearance of the purchase flow. Includes options for setting the logo, theme colors, hiding logos, and customizing text on the initial screen.                                                                              |
| `whiteLabel.sell.flowTarget`  | string  | No        | `_parent`   | The target location where the purchase flow window will be displayed. If \_blank is specified, the flow will open in a new browser tab.                                                                                                                  |
| `whiteLabel.sell.partnerLogo` | string  | No        | N/A         | The URL of the partner’s logo, which will be displayed prominently in the cobranded header of the purchase flow.                                                                                                                                         |
| `whiteLabel.sell.partnerName` | string  | No        | N/A         | The name of the partner company to display within the purchase flow.                                                                                                                                                                                     |
| `whiteLabel.sell.contact`     | object  | No        | N/A         | Prefilled user data required for creating the domain. This includes fields like `firstName`, `lastName`, `email`, `phone`, `address`, `zip`, `city`, `state`, `postalCode`, and `country`.                                                               |

This new `purchaseDomain` version includes all the latest theming options, cobranded elements, and new features such as `sellVersion`, `successCallbackUrl`, and `errorCallbackUrl`. Make sure to set the appropriate fields to customize the flow according to your needs.

### Possible `purchaseDomain()` Errors

When any of the following critical errors occur, a console error will be logged, and the user will only see “Entri is misconfigured. Please contact support for assistance.” in the UI.

| Error                                | Console Message                                                                                       | Reason                                                                                           |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| Failed to Fetch Application Settings | "Failed to fetch application settings"                                                                | API call failed (network error, invalid appId, or API down).                                     |
| Missing Preferred Registrar          | "Entri is misconfigured. Your preferred registrar is missing. Please contact support for assistance." | No `preferred_registrar` found in config or application settings (required for purchase flow).   |
| Unsupported Registrar                | "Preferred registrar {registrar} is not supported. Please contact support for assistance."            | The provided `preferred_registrar` is unsupported (currently supported: `ionos`, `squarespace`). |

### Asynchronous DNS configurations ([Entri Sell](/domain-purchasing) only)

You can make asynchronous DNS configurations after the initial **Entri Sell** flow has finished, with time limits depending on the registrar or plan tier.

* For **Squarespace** domains, it remains available for up to **1 year** after the initial domain purchase.
* For **IONOS** domains, it remains available for up to **1 year** after the initial domain purchase.
* For **Entri Sell Enterprise**, asynchronous configurations are supported indefinitely (“forever”).

<Note>
  For IONOS domains, the 1-year async configuration window only applies to new domains ordered after **December 15, 2025**.
</Note>

This feature allows you to add or update DNS records after the initial setup without requiring users to repeat the full flow. (Not supported on `debugMode=true` flows.)

```bash theme={null}
POST https://api.goentri.com/connect/async
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]
```

#### Sample body:

```JSON JSON theme={null}
{
  "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](/api-reference#dnsrecord-object)) | dnsRecords    | Yes       | N/A     | The DNS records you wish to configure for your users ([check ref](/api-reference#dnsrecord-object)) |
| 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.       |

## `entri.close()`

This method will force closing the modal and also trigger the onEntriClose() event with the last step details.
Please refer to the [onEntriClose](/api-reference#onentriclose-callback-event) for more information.

## `entri.load()`

This method on the [NPM package](https://www.npmjs.com/package/entrijs) loads the EntriJS script so it's ready for use when called.

## `entri.loadSharedFlow(url)`

This method launches the Entri Connect modal using a shared‑link configuration.

`entri.loadSharedFlow(url)` accepts a single parameter:

| Argument | Type   | Required? | Description                                                              |
| -------- | ------ | --------- | ------------------------------------------------------------------------ |
| `url`    | string | Yes       | A sharing‑link URL that contains a previously saved Entri configuration. |

### How it works

1. The function receives a sharing‑link URL.
2. Entri fetches the configuration stored within that sharing link.
3. Once retrieved, Entri automatically initializes the flow and opens the Entri Connect modal.
4. The experience is identical to calling `entri.showEntri(config)` with the same configuration object.

### Example usage

```js theme={null}
entri.loadSharedFlow("https://example.com/shared/abc123");
```

### Notes

* The shared‑link must contain a valid configuration generated by Entri's sharing‑link feature.
* Any callbacks such as `onEntriClose` or `onSuccess` will behave the same as when using `entri.showEntri()`.
* Errors related to invalid or expired shared links will surface in the console with the corresponding error code.

## Sharing Link Custom Domain

<Check>**Enterprise tier only**</Check>

Enterprise customers can replace the default `app.goentri.com` base URL in sharing links with a custom, branded domain. This creates a seamless white-labeled experience for the end users receiving and completing the shared flow.

**Default sharing link:**

```
https://app.goentri.com/share/:shareId
```

**Custom domain sharing link:**

```
https://domains.yourbrand.com/share/:shareId
```

The custom domain serves the Entri sharing link experience transparently, so the path structure and behavior remain identical to the default.

### Configuration

Configure your sharing link custom domain in the Entri Dashboard:

1. Go to **Account Settings → Application Settings**
2. Locate the **Sharing link URL** field
3. Enter your desired base URL (e.g., `https://domains.yourbrand.com`)
4. Save your changes

<Note>
  Your custom domain must be set up to point to Entri. The required DNS configuration depends on whether you're using a subdomain or a root domain:

  * **Subdomain** (e.g., `domains.yourbrand.com`): add a `CNAME` record pointing to `sharing.goentri.com`.
  * **Root domain** (e.g., `yourbrand.com`): add the following `A` records (no `AAAA` records are required):
    * `15.197.212.204`
    * `3.33.229.73`

  Contact your account manager if you need assistance with the DNS configuration.
</Note>

Once configured, the `sharing_link_url` setting is automatically applied to all sharing links generated for that application — no code changes are needed on the frontend.

### Effect on the Sharing Links API

When a custom domain is set, the `link` field returned by the [Sharing Links API](/api-reference#sharing-links-api) will automatically reflect your custom domain instead of `app.goentri.com`:

```json theme={null}
{
    "link": "https://domains.yourbrand.com/share/dd339cf05f2646539e79251f8e62f0c5",
    "job_id": "9c128fe4-63cd-4ec4-9ae8-8a9d06c0e6de"
}
```

### Using with `entri.loadSharedFlow()`

Pass the full custom-domain URL directly to `entri.loadSharedFlow()` — no additional configuration is needed:

```js theme={null}
entri.loadSharedFlow("https://domains.yourbrand.com/share/dd339cf05f2646539e79251f8e62f0c5");
```

## Webhook Notifications

When your users go through an Entri flow, Entri sends webhook notifications to keep your backend informed about flow progress and outcomes. To learn more about webhook configuration and delivery, visit our [webhook documentation page](https://developers.entri.com/webhooks).

### Correlating Shared / Derived Flows

Some platforms allow users to **share** a flow (for example, sending a link to another person). When that shared link is used, the resulting run is considered a **derived flow**.

To help you correlate the derived flow back to the original one, Entri supports propagating an `originFlowId` value into webhook events.

#### How it works

* If a flow is initialized with `sharedFlowId` in its configuration, Entri stores that value on the created flow.
* For **every webhook event** emitted for that flow, Entri includes the stored value as `originFlowId`.
* If `sharedFlowId` was **not** provided when the flow was created, webhook payloads will **not** include `originFlowId`.

Notes:

* `originFlowId` is propagated **as-is** (no lookup, validation, or mutation).
* This is a **non-breaking** change: existing webhook fields remain unchanged, and `originFlowId` is optional.

#### Webhook payload example

```json theme={null}
{
  "event": "domain.purchased",
  "flowId": "flow_123",
  "originFlowId": "flow_abc",
  "data": {
    "domain": "example.com",
    "status": "registered"
  }
}
```

### Frontend event: onSharedFlowSent

When using shared flows in the frontend experience, Entri exposes an `onSharedFlowSent` callback that fires when a user copies a shared flow and reaches the shared-flow congratulations screen.

This event includes the `sharedFlowId`, allowing you to bind:

* the **sharedFlowId** (originating / shared flow)
* the **derived flow run** that completes later (via `originFlowId` in webhooks)

Example usage:

```js theme={null}
entri.purchaseDomain({
  // ...
  onSharedFlowSent: ({ sharedFlowId }) => {
    // Persist sharedFlowId to correlate with webhook originFlowId
  }
})
```

## 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.

### `onSuccess` Callback Event

This event is triggered when the user reaches the **Congratulations** screen in Entri Connect and Entri Sell (IONOS and Squarespace flows), regardless of whether the setup was **automatic** or **manual**. Use this event to capture a definitive success signal and the `jobId` that identifies the flow.

#### Sample usage:

```JavaScript JavaScript theme={null}
function handleOnSuccess(event) {
  console.log('onSuccess', event.detail);
}
window.addEventListener('onSuccess', handleOnSuccess, false);
```

#### Sample `event.detail` object response:

```JSON JSON theme={null}
{
  "domain": "example.com",
  "success": true,
  "setupType": "automatic",
  "provider": "Provider name",
  "freeDomain": true,
  "jobId": "2132b20f-e522-42fc-9604-5a53b1f13a4b"
}
```

#### Event details object description

| Name       | Type          | Description                                                                                                                                  |
| ---------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| domain     | string        | Domain that was configured.                                                                                                                  |
| success    | boolean       | Always `true` for this event, indicating the flow completed successfully.                                                                    |
| setupType  | string        | Type of DNS setup used: `automatic` or `manual`.                                                                                             |
| provider   | string        | DNS provider used to configure the domain, or `unknown` if not detected.                                                                     |
| freeDomain | boolean       | Only included for Entri Sell **free domain** flows; otherwise may be omitted.                                                                |
| jobId      | string (UUID) | The unique identifier for the Connect/Sell flow. It is returned by the **initialize** response and is also included in all related webhooks. |

<Note>
  The `onSuccess` event complements existing browser events and is the recommended source to capture the `jobId` for subsequent server-side operations (e.g., retrieving the last webhook or triggering a propagation re-check).
</Note>

### `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:

```JavaScript JavaScript theme={null}
function handleOnEntriClose(event) {
  console.log('onEntriClose', event.detail);
}
window.addEventListener('onEntriClose', handleOnEntriClose, false);
```

#### Sample `event.detail` object response:

```JSON JSON theme={null}
{
  "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`, `purchase` or `null` if the user didn't reach the set up stage. Additionally, semiautomatic may be returned if the user selected a provider manually that supports automatic set up. |
| 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.                                                                                                                                |
| manualScreenDisabled | boolean | Determines if the modal was closed because the flow reached the Manual Screen and it was disabled using the whiteLabel.customProperties.manualConfiguration.disableScreen property.                                                                  |
| 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                                                                                                                                                                                              |

Errors description available at the [Possible error codes](#possible-error-codes) section.

#### `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) |
| LOGIN\_2FA                     | The user exited the Entri modal flow during the login process (when prompted for 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.                                  |

### `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:

```JavaScript JavaScript theme={null}
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:

```JavaScript JavaScript theme={null}
function myCustomFunction(event) {
	console.log('onEntriStepChange', event.detail);
}
window.addEventListener('onEntriStepChange', myCustomFunction, false);
```

#### Sample `event.detail` object response:

```JSON JSON theme={null}
{
  "domain": "example.com",
  "provider": "Provider name",
  "step": "ENTER_DOMAIN",
  "user": "user-123456",
  "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. |
| 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.  |
| 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                               |

Errors description available at the [Possible error codes](#possible-error-codes) section.

#### `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) |
| LOGIN\_2FA                     | The user exited the Entri modal flow during the login process (when prompted for 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.                                                                                                                                   |

## Webhooks

### Overview and Webhook Structure

<Check>**Included in all tiers.**</Check>

All webhook notifications include the following headers and follow the structure described below.

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:

```JSON JSON theme={null}
{
  "id": "028b5078-8fed-4ffb-8e3e-3e6e6d8214b4",
  "user_id": "sample-user",
  "domain": "smallbusiness.com",
  "provider": "ionos.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](#entrishowentriconfig))                                           |
| domain                        | string                                                        | The domain name set by your user                                                                                                                                                                    |
| type                          | \[domain.purchased, domain.added, domain.propagation.timeout] | The event type. Options:- domain.added- domain.propagation.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, failed, exempt]                           | The DNS propagation status. Options:- success- pending- failed                                                                                                                                      |
| dkim\_status                  | \[pending, success, failed, exempt]                           | Whether DKIM has been set up (see [Handling DKIM, SPF, and DMARC Records](/handling-dkim-spf-dmarc-records)). Options:- success- pending- failed- exempt (the feature is disabled)                  |
| redirection\_status           | \[pending, success, failed, 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- failed- exempt (the feature is disabled) |
| data.records\_propagated      | array of [DNSRecord objects](#dnsrecord-object)               | See above                                                                                                                                                                                           |
| data.records\_non\_propagated | array of [DNSRecord objects](#dnsrecord-object)               | See above                                                                                                                                                                                           |
| updated\_objects              | array of strings                                              | The object properties that have been updated since the last webhook event.                                                                                                                          |
| secure\_status                | \[pending, success, failed, exempt]                           | Whether an SSL certificate has been provisioned (see [Provisioning SSL Certificates](/ssl-provisioning)). Options:- success- pending- failed- exempt (the feature is disabled)                      |
| power\_status                 | \[pending, success, failed, exempt]                           | Whether a domain has been powered (see [Powering domains](/power)). Options:- success- pending- failed- 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.                                                                                                       |
| provider                      | string                                                        | The domain's provider associated with the event (e.g. `"cloudflare"`).                                                                                                                              |

## Webhook Management Endpoints

These endpoints are designed to help partners retrieve or re-trigger webhook events programmatically.
Each request requires a valid jobId, which can be captured from the [`onSuccess`](#onsuccess-callback-event) browser event.

### Trigger propagation re-check (async)

When this endpoint is called, Entri performs an immediate DNS propagation re-check for the specified Connect flow and **delivers the latest result via webhook**. The endpoint is still **asynchronous**: it only confirms that the check was queued; the propagation result is sent exclusively through the webhook, and no continuous propagation checks happen after this manual re-check.

> **Tip:** The `jobId` required for this endpoint can be obtained from the [`onSuccess`](#onsuccess-callback-event) browser event once the flow finishes successfully.

```txt theme={null}
POST https://api.goentri.com/connect/propagation/recheck/:job_id
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

#### Alternative UI-based option

This action can also be triggered directly from the Customer Dashboard, under the Webhook logs section.
In front of each log, users will find the “Check propagation again” button, which performs the same propagation re-check as this endpoint.

#### Headers

| Header        | Required? | Description                                  |
| ------------- | --------- | -------------------------------------------- |
| Authorization | Yes       | Bearer token (JWT) for authentication.       |
| applicationId | Yes       | Your Application ID as set in the dashboard. |

#### Path Parameters

| Parameter | Type          | Required? | Description                                                                                |
| --------- | ------------- | --------- | ------------------------------------------------------------------------------------------ |
| job\_id   | string (UUID) | Yes       | The Connect flow identifier (returned by initialize and included in all related webhooks). |

#### Request Body

*None.* All inputs are provided via path parameters and headers.

#### Response

* **202 Accepted** if the re-check was queued successfully.

```json theme={null}
{
  "jobId": "9c128fe4-63cd-4ec4-9ae8-8a9d06c0e6de",
  "queued": true,
  "message": "Propagation re-check has been queued. A webhook will be sent with the result.",
  "enqueuedAt": "2025-11-05T18:22:00Z"
}
```

#### Webhook behavior

* Performs one immediate propagation re-check and sends a webhook with the **latest** propagation status; no continuous propagation retries follow this manual re-check.
* Includes `"manual_retry": true` in the webhook **body**.
* Follows the standard delivery policy with up to **3 attempts** if the receiver is unavailable.
* **Logs a new webhook attempt** entry; existing webhook logs are not overridden.
* Uses the same execution codepath as the private Dashboard action for this functionality.

#### Cooldown

To avoid abuse and accidental hot-polling, this endpoint can be called **once every 5 minutes per job**.\
If called sooner, it returns:

* **429 Too Many Requests** with message: `"You can only trigger the check once every 5 mins"`\
  (Servers may also include `Retry-After: 300`.)

#### Error Responses

| HTTP | Example Body                                                        | Description                                                  |
| ---: | ------------------------------------------------------------------- | ------------------------------------------------------------ |
|  400 | `{ "message": "Invalid job_id format" }`                            | Malformed UUID.                                              |
|  401 | `{ "message": "Unauthorized" }`                                     | Invalid or missing JWT.                                      |
|  403 | `{ "message": "Forbidden" }`                                        | The `job_id` does not belong to the calling `applicationId`. |
|  404 | `{ "message": "Job not found" }`                                    | Unknown `job_id`.                                            |
|  429 | `{ "message": "You can only trigger the check once every 5 mins" }` | Called within the 5‑minute cooldown window.                  |
|  500 | `{ "message": "Internal Server Error" }`                            | Unexpected server error.                                     |

#### Example cURL

```bash theme={null}
curl -s -X POST \
  "https://api.goentri.com/connect/propagation/recheck/9c128fe4-63cd-4ec4-9ae8-8a9d06c0e6de" \
  -H "Authorization: Bearer <JWT>" \
  -H "applicationId: <YOUR_APP_ID>"
```

### Get last webhook by job ID

This endpoint allows you to retrieve the last webhook event sent for a specific Connect flow, based on the `job_id`. It is useful for debugging or validating the final propagation result of a specific domain connection.

> **Tip:** You can obtain the `jobId` value directly from the [`onSuccess`](#onsuccess-callback-event) browser event, which is triggered when the user reaches the Congratulations screen.

```txt theme={null}
GET https://api.goentri.com/connect/webhooks/last/:job_id
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

#### Headers

| Header        | Required? | Description                                  |
| ------------- | --------- | -------------------------------------------- |
| Authorization | Yes       | Bearer token (JWT) for authentication.       |
| applicationId | Yes       | Your Application ID as set in the dashboard. |

#### Path Parameters

| Parameter | Type          | Required? | Description                                                                                                              |
| --------- | ------------- | --------- | ------------------------------------------------------------------------------------------------------------------------ |
| job\_id   | string (UUID) | Yes       | The UUID of the Connect flow. The same job\_id returned in the initialize endpoint and included in all related webhooks. |

#### Sample Response

```json theme={null}
{
  "id": "d6a6b6c4-45f3-42a2-8bb1-3c92debf47e2",
  "job_id": "9c128fe4-63cd-4ec4-9ae8-8a9d06c0e6de",
  "domain": "example.com",
  "type": "domain.propagation.success",
  "manual_retry": false,
  "status": "delivered",
  "sentAt": "2025-11-05T18:22:00Z",
  "payload": {
    "domain": "example.com",
    "job_id": "9c128fe4-63cd-4ec4-9ae8-8a9d06c0e6de",
    "propagation_status": "success",
    "records_checked": [
      { "type": "CNAME", "host": "www", "value": "myapp.com" }
    ]
  }
}
```

#### Error Responses

| HTTP | Example Body                             | Description                                               |
| ---- | ---------------------------------------- | --------------------------------------------------------- |
| 400  | `{ "message": "Invalid job_id format" }` | Malformed or missing job\_id.                             |
| 401  | `{ "message": "Unauthorized" }`          | Invalid or missing JWT.                                   |
| 403  | `{ "message": "Forbidden" }`             | The job\_id does not belong to the calling applicationId. |
| 404  | `{ "message": "Webhook not found" }`     | No webhook log was found for the given job\_id.           |
| 500  | `{ "message": "Internal Server Error" }` | Unexpected server error.                                  |

#### Notes

* This endpoint is **read-only** and returns the last logged webhook event associated with the provided job\_id.
* It retrieves data from the webhook logs table and does **not** resend or trigger new webhooks.
* Only returns the **most recent** webhook entry for that job.

## Token creation (JWT)

To launch the Entri modal window in a session, you’ll need to fetch a JWT using the `secret` key and `applicationId` provided by the Entri dashboard. For security reasons and in order to not expose your secret in the browser, please **make sure to fetch the JWT on the server-side of your application**. The JWT expires after 60 minutes. You can use any networking library you’d like. Here’s an example using javascript:

```JS JS theme={null}
fetch('https://api.goentri.com/token', {
  method: 'POST',
  body: JSON.stringify({
    // These values come from the Entri dashboard
    applicationId: "12345",
    secret: "12345-67890"
  }),
})
.then(response => response.json())
.then(data => {
  console.log('Success:', data); // { "auth_token": "exampletoken..." }
})
.catch((error) => {
  console.error('Error:', error);
});

```

### Enhancing Integration Security

To further enhance the security of your integration, you have the option to include the `domain`, `dnsRecords` or `product` in the JWT creation process. When these elements are added, Entri will validate them during execution, providing an additional layer of security.

```
POST https://api.goentri.com/token
```

#### Request body

```JSON JSON theme={null}
{
    "applicationId": "{APPLICATION_ID}",
    "secret": "{SECRET}",
    "domain": "sampledomain.com",
    "freeDomain": true,
    "userId": "XYZ",
    "dnsRecords": [
        {
            "value": "samplevalue.com",
            "host": "@",
            "ttl": 300,
            "type": "CNAME"
        }
    ]
}
```

#### Parameters description

| Parameter     | Required? | Default | Description                                                           |
| ------------- | --------- | ------- | --------------------------------------------------------------------- |
| applicationId | Yes       | N/A     | The ID of your application (set in the dashboard)                     |
| domain        | Yes       | N/A     | The domain that will be configured                                    |
| secret        | Yes       | N/A     | Client secret, can be found in the Dashboard                          |
| dnsRecords    | No        | N/A     | Records that will be configured on the `domain`                       |
| freeDomain    | No        | N/A     | Only applies to Entri Sell! Specifies a free or paid domain purchase. |
| product       | No        | N/A     | The `product` for which this JWT is being created for.                |
| userId        | No        | N/A     | The `userId` from the user that will be using the flow.               |

#### Successful response (200 status)

```JSON JSON theme={null}
{ "auth_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...." }
```

<Note>
  For more details about how freeDomain is used in Entri Sell, refer to the [Advanced Security Settings for freeDomain](/domain-purchasing#advanced-security-settings-for-freedomain) section.
</Note>

## Secure API - SSL certificates

### List secured domains

Partners can retrieve all domains currently **Secured** under a given `applicationId` to audit configuration, build admin UIs, and perform maintenance. This endpoint returns a paginated list of all Secure-managed domains for the authenticated application.

```txt theme={null}
GET https://api.goentri.com/ssl
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

#### Headers

| Header        | Required? | Description                                  |
| ------------- | --------- | -------------------------------------------- |
| Authorization | Yes       | Bearer token (JWT) for authentication.       |
| applicationId | Yes       | Your Application ID as set in the dashboard. |

#### Query string parameters

| Name   | Type    | Required? | Default | Description                                      |
| ------ | ------- | --------- | ------- | ------------------------------------------------ |
| page   | integer | No        | 0       | Zero-based page index (0 = first page).          |
| size   | integer | No        | 50      | Max number of items to return (range: 1–200).    |
| status | string  | No        | —       | Filter by secure status: `active` or `inactive`. |

> **Note:** `status` is optional. If omitted, the endpoint returns **all** secured domains for the application.

#### Sample response

```json theme={null}
{
  "items": [
    {
      "domain": "www.example.com",
      "applicationUrl": "my.applicationurl.com",
      "secureStatus": "active"
    },
    {
      "domain": "blog.example.com",
      "applicationUrl": "my.applicationurl.com",
      "secureStatus": "inactive"
    }
  ],
  "total": 2,
  "page": 0,
  "limit": 50,
  "count": 2,
  "pages": 1,
  "nextPage": null,
  "prevPage": null
}
```

#### Field definitions

* **domain** (`string`): Fully qualified domain or subdomain configured via Secure.
* **applicationUrl** (`string`): Current upstream URL for this domain.
* **secureStatus** (`string`): `active` or `inactive`.
* **total** (`integer`): Total number of secured domains matching the filter.
* **page** (`integer`): Current zero-based page index.
* **limit** (`integer`): Maximum number of items requested per page.
* **count** (`integer`): Number of items returned.
* **pages** (`integer`): Total number of pages available.
* **nextPage** (`integer | null`): Next page index, or null if not applicable.
* **prevPage** (`integer | null`): Previous page index, or null if not applicable.

#### Error responses

| HTTP | Example Body                                 | When                                      |
| ---- | -------------------------------------------- | ----------------------------------------- |
| 400  | `{ "message": "Invalid 'limit' parameter" }` | Validation errors on query parameters.    |
| 401  | `{ "message": "Unauthorized" }`              | Missing/invalid JWT or `applicationId`.   |
| 403  | `{ "message": "Forbidden" }`                 | Authenticated but forbidden for this app. |
| 500  | `{ "message": "Internal Server Error" }`     | Unexpected server-side error.             |

#### Rate limits

This endpoint follows the same global rate limits as other Secure API endpoints.

#### Example cURL

```bash theme={null}
curl -X GET "https://api.goentri.com/ssl?status=active&size=10&page=0 \
  -H "Authorization: Bearer <JWT>" \
  -H "applicationId: <yourApplicationID>"
```

### Check the domain's eligibility

```bash theme={null}
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)

```JSON JSON theme={null}
{
  // 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

```JSON JSON theme={null}
{
  "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)

```JSON JSON theme={null}
{ "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

```BASH theme={null}
PUT https://api.goentri.com/ssl
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

#### Request body

```JSON JSON theme={null}
{ "domain": "www.example.com" }
```

#### Successful response (200 status)

```json json theme={null}
{ "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

```BASH theme={null}
DELETE https://api.goentri.com/ssl
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

#### Request body

```JSON JSON theme={null}
{ "domain": "www.example.com" }
```

#### Successful response (200 status)

```JSON JSON theme={null}
{ "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

### List powered domains

Partners can retrieve all domains currently **Powered** under a given `applicationId` to audit configuration, build admin UIs, and perform maintenance. This endpoint returns a paginated list of all Power-managed domains for the authenticated application.

```txt theme={null}
GET https://api.goentri.com/power
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

#### Headers

| Header        | Required? | Description                                  |
| ------------- | --------- | -------------------------------------------- |
| Authorization | Yes       | Bearer token (JWT) for authentication.       |
| applicationId | Yes       | Your Application ID as set in the dashboard. |

#### Query string parameters

| Name   | Type    | Required? | Default | Description                                     |
| ------ | ------- | --------- | ------- | ----------------------------------------------- |
| page   | integer | No        | 0       | Zero-based page index (0 = first page).         |
| size   | integer | No        | 50      | Max number of items to return (range: 1–200).   |
| status | string  | No        | —       | Filter by power status: `active` or `inactive`. |

> **Note:** `status` is optional. If omitted, the endpoint returns **all** powered domains for the application.

#### Sample response

```json theme={null}
{
  "items": [
    {
      "domain": "www.example.com",
      "applicationUrl": "my.applicationurl.com",
      "powerRootPathAccess": ["/", "/shop"],
      "powerStatus": "active"
    },
    {
      "domain": "blog.example.com",
      "applicationUrl": "my.applicationurl.com",
      "powerRootPathAccess": [],
      "powerStatus": "inactive"
    }
  ],
  "total": 2,
  "page": 0,
  "limit": 50,
  "count": 2,
  "pages": 1,
  "nextPage": null,
  "prevPage": null
}
```

#### Field definitions

* **domain** (`string`): Fully qualified domain or subdomain configured via Power.
* **applicationUrl** (`string`): Current upstream URL for this domain.
* **powerRootPathAccess** (`string[]`): List of root paths with access granted (may be empty).
* **powerStatus** (`string`): `active` or `inactive`.
* **total** (`integer`): Total number of powered domains matching the filter.
* **page** (`integer`): Current zero-based page index.
* **limit** (`integer`): Maximum number of items requested per page.
* **count** (`integer`): Number of items returned.
* **pages** (`integer`): Total number of pages available.
* **nextPage** (`integer | null`): Next page index, or null if not applicable.
* **prevPage** (`integer | null`): Previous page index, or null if not applicable.

#### Error responses

| HTTP | Example Body                                 | When                                      |
| ---- | -------------------------------------------- | ----------------------------------------- |
| 400  | `{ "message": "Invalid 'limit' parameter" }` | Validation errors on query parameters.    |
| 401  | `{ "message": "Unauthorized" }`              | Missing/invalid JWT or `applicationId`.   |
| 403  | `{ "message": "Forbidden" }`                 | Authenticated but forbidden for this app. |
| 500  | `{ "message": "Internal Server Error" }`     | Unexpected server-side error.             |

#### Rate limits

This endpoint follows the same global rate limits as other Power API endpoints.

#### Example cURL

```bash theme={null}
curl -X GET "https://api.goentri.com/power?status=active&size=10&page=0 \
  -H "Authorization: Bearer <JWT>" \
  -H "applicationId: <yourApplicationID>"
```

### Check the domain's eligibility

```BASH theme={null}
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)

```JSON JSON theme={null}
{
  // 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

```BASH theme={null}
POST https://api.goentri.com/power
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

#### Request body

```JSON JSON theme={null}
{
  "domain": "www.example.com",
  "applicationUrl": "my.applicationurl.com",
  "powerRootPathAccess: ['/path1', '/path2',..., '/pathN'] //optional
}
```

#### Successful response (200 status)

```JSON JSON theme={null}
{ "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

```JSON JSON theme={null}
{
  "domain": "www.example.com",
  "applicationUrl": "my.applicationurl.com",
  "powerRootPathAccess: ['/path1', '/path2',..., '/pathN'] //Optional
}
```

#### Successful response (200 status)

```JSON JSON theme={null}
{ "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

```BASH theme={null}
DELETE https://api.goentri.com/power
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

#### Request body

```JSON JSON theme={null}
{ "domain": "www.example.com" }
```

#### Successful response (200 status)

```JSON JSON theme={null}
{ "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

The **Sharing Links API** allows users to securely hand off an ongoing Entri flow, such as Connect or Sell, to another person for completion. This is particularly useful when the current user does not have the required DNS credentials (in Entri Connect) or payment information (in Entri Sell). By generating a sharing link, you can let a colleague, client, or administrator pick up exactly where the flow was left off and complete the process without starting over.

For Enterprise plan integrations, the sharing link URL can be white-labeled to use your own custom domain. See [Sharing Link Custom Domain](/api-reference#sharing-link-custom-domain) for configuration details.

Below you’ll find detailed documentation for each Sharing Links API endpoint, parameters, example requests, and expected responses.

### Entri Connect

```
POST https://api.goentri.com/sharing/connect
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

#### Request body

```JSON JSON theme={null}
{
   "applicationId":"yourApplicationID",
   "config":{
      "prefilledDomain": "mydomain.com",
      "dnsRecords":[
         {
            "type":"CNAME",
            "host":"www",
            "value":"test.com",
            "ttl":300
         }
      ]
   }
}
//All the rest of possible configuration options, see https://developers.entri.com/api-reference#entrishowentriconfig for more details.
```

#### Successful response (200 status)

```JSON JSON theme={null}
{
    // If a custom Sharing Link domain is configured (Enterprise), "link" will reflect that domain.
    // See: https://developers.entri.com/api-reference#sharing-link-custom-domain
    "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

```JSON JSON theme={null}
{
   "applicationId":"yourApplicationID",
   "config":{
      "prefilledDomain": "mydomain.com",
      "dnsRecords":[
         {
            "type":"CNAME",
            "host":"www",
            "value":"test.com",
            "ttl":300
         }
      ]
   }
}
//All the rest of possible configuration options, see https://developers.entri.com/api-reference#entrishowentriconfig for more details.
```

#### Successful response (200 status)

```JSON JSON theme={null}
{
    // If a custom Sharing Link domain is configured (Enterprise), "link" will reflect that domain.
    // See: https://developers.entri.com/api-reference#sharing-link-custom-domain
    "link": "https://app.goentri.com/share/dd339cf05f2646539e79251f8e62f0c5",
    "job_id": "9c128fe4-63cd-4ec4-9ae8-8a9d06c0e6de"
}
```

# Provider Health

Returns the status of all the providers for an application ID that Entri supports.

```
GET https://api.goentri.com/providers_health
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

### Response body

```JSON JSON theme={null}
{
  "message": "success",
  "data": [
    {
      "provider": "IONOS",
      "enabled": true
    },
    {
      "provider": "Enom",
      "enabled": true
    },
    {
      "provider": "Amazon Route 53",
      "enabled": true
    },
    ...
  ]
}
```

# Entri Monitor API

## Retrieve DNS records

```
GET https://api.goentri.com/monitor/domains/:domain_name/records
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

### Successful response (200 status)

```JSON JSON theme={null}
{
  "domain": "example.com",
  "dnsRecords": [
    {
      "type": "A",
      "host": "example.com",
      "value": "93.184.216.34",
      "ttl": 3600
    }
  ]
}
```

## Create DNS records

```
POST https://api.goentri.com/monitor/domains/:domain_name/records
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

### Request body

```JSON JSON theme={null}
{
  "dnsRecords": [
    {
      "type": "A",
      "host": "example.com",
      "value": "93.184.216.34",
      "ttl": 3600
    }
  ]
}
```

### Successful response (200 status)

```JSON JSON theme={null}
{
  "message": "DNS records created successfully",
  "addedRecords": 1
}
```

## Update DNS records

```
PUT https://api.goentri.com/monitor/domains/:domain_name/records
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

### Request body

```JSON JSON theme={null}
{
  "dnsRecords": [
    {
      "type": "TXT",
      "host": "example.com",
      "value": "v=spf1 include:_spf.example.com ~all",
      "ttl": 3600
    }
  ]
}
```

### Successful response (200 status)

```JSON JSON theme={null}
{
  "message": "DNS records updated successfully",
  "updatedRecords": 1
}
```

## Delete DNS records

```
DELETE https://api.goentri.com/monitor/domains/:domain_name/records
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

### Request body

```JSON JSON theme={null}
{
  "dnsRecords": [
    {
      "type": "CNAME",
      "host": "www.example.com",
      "value": "example.com",
      "ttl": 3600
    }
  ]
}
```

### Successful response (200 status)

```JSON JSON theme={null}
{
  "message": "DNS records deleted successfully",
  "deletedRecords": 1
}
```

## List domains

```
GET https://api.goentri.com/monitor/domains
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

### Successful response (200 status)

```JSON JSON theme={null}
{
  "domains": [
    {
      "domain": "example.com",
      "status": "active"
    }
  ]
}
```

Query Parameters:

* `offset` (integer): Pagination offset.
* `limit` (integer): Number of domains per page.
* `from_date` (date): Filter start date.
* `to_date` (date): Filter end date.

## Retrieve domain details

```
GET https://api.goentri.com/monitor/domains/:domain_name
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

### Successful response (200 status)

```JSON JSON theme={null}
{
  "domain": "example.com",
  "status": "active",
  "dnsRecords": [
    {
      "type": "A",
      "host": "example.com",
      "value": "93.184.216.34",
      "ttl": 3600
    }
  ]
}
```

## Add a domain

```
POST https://api.goentri.com/monitor/domains
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

### Request body

```JSON JSON theme={null}
{
  "domain": "example.com",
  "dnsRecords": [
    {
      "type": "A",
      "host": "example.com",
      "value": "93.184.216.34",
      "ttl": 3600
    }
  ],
  "userId": "UUID"
}
```

### Successful response (200 status)

```JSON JSON theme={null}
{
  "message": "Domain added successfully",
  "domainId": "12345"
}
```

## Update a domain

```
PUT https://api.goentri.com/monitor/domains
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

### Request body

```JSON JSON theme={null}
{
  "domain": "example.com",
  "dnsRecords": [
    {
      "type": "A",
      "host": "example.com",
      "value": "93.184.216.34",
      "ttl": 3600
    }
  ],
  "userId": "UUID"
}
```

### Successful response (200 status)

```JSON JSON theme={null}
{
  "message": "Domain updated successfully",
  "updatedRecords": 1
}
```

## Delete a domain

```
DELETE https://api.goentri.com/monitor/domains
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

### Request body

```JSON JSON theme={null}
{
  "domain": "example.com"
}
```

### Successful response (200 status)

```JSON JSON theme={null}
{
  "message": "Domain deleted successfully",
  "domainId": "12345"
}
```

## Batch create domains

```
POST https://api.goentri.com/monitor/domains/batch
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

### Request body

```JSON JSON theme={null}
{
  "domains": [
    {
      "domain": "example.com",
      "dnsRecords": [
        {
          "type": "A",
          "host": "example.com",
          "value": "93.184.216.34",
          "ttl": 3600
        }
      ]
    },
    {
      "domain": "example2.com",
      "dnsRecords": [
        {
          "type": "A",
          "host": "example.com",
          "value": "93.184.216.34",
          "ttl": 3600
        }
      ]
    }
  ]
}
```

### Successful response (200 status)

```JSON JSON theme={null}
{
  "message": "Batch created successfully",
  "batchId": "batch-12345"
}
```

## Batch status

```
GET https://api.goentri.com/monitor/domains/batch/status/:request_id
Header "Authorization: [JWT authorization]"
Header "applicationId: [yourApplicationID]"
```

### Successful response (200 status)

```JSON JSON theme={null}
{
  "batchId": "batch-12345",
  "status": "completed",
  "successfulDomains": 10,
  "failedDomains": 0
}
```

## Webhook requests

Example request:

```json theme={null}
{
  "id": "example.com",
  "subdomain": "www",
  "user_id": "1234",
  "type": "domain.record_missing", // Can also be "domain.record_restored"
  "application_id": "1234",
  "data": {
    "records_propagated": true,
    "records_non_propagated": false
  },
  "company_id": "1234",
  "triggerType": "monitor"
}
```
