Overview

Entri Monitor allows you to monitor DNS record changes across multiple domains. This can be useful in a variety of scenarios, such as:

  • Notifying your customer that they inadvertently broke the DNS record configuration required to use your application

  • Detecting if a customer is at risk for churn or might be moving to a competing solution

If Entri Monitor detects a change (or deletion) of one of the records specified on a monitored domain, a notification is sent to the webhook URL that you provide on the App Settings page of the Entri Dashboard.

Entri Monitor runs an hourly check, 24x7.

Optionally, you can combine Entri Monitor with Entri Connect to help your user fix their DNS if Monitor detects a breaking change.

Adding monitoring using Entri Connect

When initializing a new domain using Entri Connect, you can pass a monitor: true property in either the domain object or each record object to specify that it should be tracked with Entri Monitor.

Monitor everything:

{
  "applicationId": "12345",
  "token": "12345",
  "monitor": true,
  "dnsRecords": [
    {
      "type": "CNAME",
      "host": "{SUBDOMAIN}.xyz.example.com", // blog.xyz.example.com
      "value": "custom-proxy.leadpages.net",
      "ttl": 300,
    },
    {
      "type": "TXT",
      "host": "@",
      "value": "{SLD}-{TLD}", // example-com
      "ttl": 300,
    }
  ]
}

Monitor only the CNAME record:

{
  "applicationId": "12345",
  "token": "12345",
  "dnsRecords": [
    {
      "type": "CNAME",
      "host": "{SUBDOMAIN}.xyz.example.com", // blog.xyz.example.com
      "value": "custom-proxy.leadpages.net",
      "ttl": 300,
      "monitor":true
    },
    {
      "type": "TXT",
      "host": "@",
      "value": "{SLD}-{TLD}", // example-com
      "ttl": 300,
    }
  ]
}

General API Guidelines

Base URL

https://api.goentri.com

Authentication

All requests require the following headers:

  • applicationId: Your unique application ID.

  • Authorization: A bearer token generated using your client secret.

Example Headers:

applicationId: your-app-id
Authorization: Bearer your-auth-token

Quickstart

Step 1: Add domains for monitoring

You’ll first need to tell Entri Monitor which domain you’d like to monitor. Send a POST request to /monitor/domains with the name of the domain, as well as a list of the records you want to monitor, including their type, host, value, and ttl properties.

Example request body:

{
  "domain": "example.com",
  "dnsRecords": [
    {
      "type": "A",
      "host": "example.com",
      "value": "93.184.216.34",
      "ttl": 3600
    }
  ]
}

You’ll recieve a response like this if you’re successful:

{
  "message": "Domain added successfully",
  "domainId": "12345"
}

Step 2: Specify a webhook URL

Log into the Entri Dashboard and navigate to the App Settings page. Enter the URL of the webhook that you’ll use to recieve notifications about the DNS changes you specified.

Step 3: Set up your service to receive the webhook requests at the URL you specified

Your webhook URL will be sent requests if the DNS records you specified are modified or deleted. Example request:

{
  "id": "example.com",
  "subdomain": "www",
  "user_id": "1234",
  "type": "domain.record_missing",
  "application_id": "1234",
  "data": {
    "records_propagated": true,
    "records_non_propagated": false
  },
  "company_id": "1234",
  "triggerType": "monitor"
}

Monitor API Reference

1. Manage DNS Records

Retrieve DNS Records

GET /monitor/domains/:domain_name/records

Description: Fetch all monitored DNS records for a specific domain.

Headers:

  • applicationId: Your application ID (required).

  • Authorization: Bearer token (required).

Path Parameters:

  • domain_name (string, required): The domain to retrieve records for.

Response Example:

{
  "domain": "example.com",
  "dnsRecords": [
    {
      "type": "A",
      "host": "example.com",
      "value": "93.184.216.34",
      "ttl": 3600
    }
  ]
}

Create DNS Records

POST /monitor/domains/:domain_name/records

Description: Add new DNS records to be monitored on an existing domain.

Request Body:

{
  "dnsRecords": [
    {
      "type": "A",
      "host": "example.com",
      "value": "93.184.216.34",
      "ttl": 3600
    }
  ]
}

Key Descriptions:

  • dnsRecords (array, required): List of DNS records to add.

    • type (string, required): Record type (e.g., A, CNAME).

    • host (string, required): Hostname.

    • value (string, required): Record value.

    • ttl (integer, required): Time-to-live in seconds.

Response Example:

{
  "message": "DNS records created successfully",
  "addedRecords": 1
}

Update DNS Records

PUT /monitor/domains/:domain_name/records

Description: Update DNS records for a monitored domain.

Request Body:

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

Response Example:

{
  "message": "DNS records updated successfully",
  "updatedRecords": 1
}

Delete DNS Records

DELETE /monitor/domains/:domain_name/records

Description: Remove specific DNS records from the monitoring for a domain.

Request Body:

{
  "dnsRecords": [
    {
      "type": "CNAME",
      "host": "www.example.com",
      "value": "example.com",
      "ttl": 3600
    }
  ]
}

Response Example:

{
  "message": "DNS records deleted successfully",
  "deletedRecords": 1
}

2. Global Domain Management

List All Domains

GET /monitor/domains

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.

Response Example:

{
  "domains": [
    {
      "domain": "example.com",
      "status": "active"
    }
  ]
}

Retrieve Domain Details

GET /monitor/domains/:domain_name

Description: Get all the settings for a specific monitored domain.

Response Example:

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

Add a Domain

POST /monitor/domains

Description: Add a domain for monitoring.

Request Body:

{
  "domain": "example.com",
  "dnsRecords": [
    {
      "type": "A",
      "host": "example.com",
      "value": "93.184.216.34",
      "ttl": 3600
    }
  ]
}

Response Example:

{
  "message": "Domain added successfully",
  "domainId": "12345"
}

Update Domain

PUT /monitor/domains

Description: Update details for an existing domain.

Request Body:

{
  "domain": "example.com",
  "dnsRecords": [
    {
      "type": "A",
      "host": "example.com",
      "value": "93.184.216.34",
      "ttl": 3600
    }
  ]
}

Response Example:

{
  "message": "Domain updated successfully",
  "updatedRecords": 1
}

Delete a Domain

DELETE /monitor/domains

Description: Remove a domain from monitoring.

Request Body:

{
  "domain": "example.com"
}

Response Example:

{
  "message": "Domain deleted successfully",
  "domainId": "12345"
}

3. Batch Operations

Batch Create Domains

POST /monitor/domains/batch

Description: Add multiple domains in a single request. A maximum of 100 domains can be sent per request.

Request Body:

{
  "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
        }
      ]
    }
  ]
}

Response Example:

{
  "message": "Batch created successfully",
  "batchId": "batch-12345"
}

Batch Status

GET /monitor/domains/batch/status/:request_id

Description: Check the status of a batch operation.

Response Example:

{
  "batchId": "batch-12345",
  "status": "completed",
  "successfulDomains": 10,
  "failedDomains": 0
}

Webhooks

To recieve webhook notifications about the target domains, log into the Entri Dashboard and navigate to the App Settings page. Enter the URL of the webhook that you’ll use to recieve notifications about the DNS changes you specified.

Your webhook URL will be sent requests if the DNS records you specified are modified or deleted.

Top-Level fields

  • id: A unique identifier for the webhook event (e.g. "e98d267b-84b8-4229-a94a-1933ed7f91ea").
  • user_id: The ID of the user who initiated the domain-related action (e.g. "your-provided-user-id").
  • domain: The domain involved in the event (e.g. "example.com").
  • subdomain: The subdomain associated with the event, if any (e.g. "shop").
  • type: Defines the type of event. Possible values:
    • "domain.record_missing": Used whenever there is a record missing from the records that are being monitored.
    • "domain.record_restored": Confirms that ALL records have been restored.

Example request:

{
 "id": "e98d267b-84b8-4229-a94a-1933ed7f91ea",
 "subdomain": "www",
 "domain": "example.com",
 "user_id": "user123",
 "type": "domain.record_missing" / "domain.record_restored",
 "data": {
  "records_propagated": [
   {
    "host": "",
    "ttl": 300,
    "type": "CNAME",
    "value": "www"
   }
  ],
  "records_non_propagated": [
   {
    "host": "@",
    "ttl": 300,
    "type": "TXT",
    "value": "domain_verification123"
   }
  ],
 }
}