Skip to main content
Webhooks will only be delivered to accounts set as Admin or Developer roles within the Dashboard.
Entri uses webhooks to notify your backend about the status of a domain that has been connected or sold. You can configure a URL in the Entri dashboard to receive these webhook events.

Example webhook payload

When a domain has been added by a user, Entri sends the following webhook payload:

Webhook payload breakdown

The webhook payload includes several fields with nested objects, depending on the type of event. Below is a complete description of each key and value.

Top-Level fields

  • id: A unique identifier for the webhook event (e.g. "1234567890-abcdefg-1234567890").
  • 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").
  • provider: The domain’s provider associated with the event (e.g. "cloudflare").
For event types and status fields, see the per-product events pages: Connect events, Sell events, Power events, Secure events, Monitor events.

Examples of key and value pairs

  • "type": "domain.added": An event type indicating that a domain has been added.
  • "propagation_status": "pending": DNS record propagation is still in progress.
  • "secure_status": "success": SSL configuration completed successfully.
  • "power_status": "failed": The advanced feature configuration process has failed.
  • "cname_target": "my.saascompany.com": The CNAME target for Entri Power or Secure configuration.

Webhook updates

If any part of the webhook object is updated, subsequent webhooks will include ALL fields. Example update:

Propagation retries

If the DNS records are not fully propagated on the first attempt, Entri will retry every 10 seconds for the first 2 mins, and then at increasing intervals (1 minute, 2 minutes, 4 minutes, 8 mins, …etc). This process will continue for up to 72 hours. After 72 hours, if the records are still not propagated, a webhook with "type": "domain.propagation.timeout" will be sent.

Connection failures retries

Webhooks automatically retries up to 3 times if something goes wrong. If all 3 retries fail, a warning email will be sent (limited to 1 per day).

DKIM status notes

The dkim_status field is set to exempt if:
  • The user does not use Google or Microsoft email providers.
  • The Enable support for DKIM setting is disabled for your applicationId.

Overview and Webhook Structure

Included in all tiers.
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
The JSON object contains the following properties:

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 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 browser event once the flow finishes successfully.

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

Path Parameters

Request Body

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

Response

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

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

Example cURL

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 browser event, which is triggered when the user reaches the Congratulations screen.

Headers

Path Parameters

Sample Response

Error Responses

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.

Provider Health

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

Response body

JSON

Entri Webhook Signature Verification

Enforcing Webhook Source IP (Optional)

All webhook requests from Entri are now sent from a fixed static IP address: 3.14.77.245 For an additional layer of security, you may allow webhook traffic only from this IP within your firewall, API gateway, or reverse proxy. This ensures that only Entri can reach your webhook endpoint, even before signature validation occurs, providing a strong network-level safeguard against unauthorized requests.
The fixed IP address (3.14.77.245) applies only to production webhook deliveries. The Dashboard webhook tester does not originate from this IP address. If you are testing webhooks using the Dashboard tester, you must temporarily disable IP allowlisting or your endpoint may reject the request.

Signature Timestamp Header

The Entri-Timestamp header contains the Unix timestamp (in seconds) for when the webhook was generated. It is used by both Signature V2 and Signature V3 verification. This enables servers to enforce freshness windows and reject replayed requests.

Signature Verification Methods

Entri sends all three signature headers on every webhook request — they are additive and do not replace each other. You may verify any or all of them; we recommend verifying at least V3 for new integrations. Entri-Signature-V3 uses true HMAC-SHA256 (RFC 2104). It provides two security improvements over V1 and V2:
  • Body binding: the HMAC is computed over the raw HTTP request body, so any tampering with the payload invalidates the signature. V1 and V2 sign only identifiers and timestamps, not the body contents.
  • Replay protection: the Entri-Timestamp value is embedded in the signed message, so a captured valid request cannot be replayed after 300 seconds.

Header value format

How to verify

  1. Read Entri-Timestamp. Reject the request if abs(now - timestamp) > 300 seconds.
  2. Build the signed payload by concatenating: the timestamp string, a literal ., then the raw HTTP request body bytes.
  3. Compute HMAC-SHA256 with your client_secret as the key over that payload.
  4. Hex-encode the result and prepend sha256=.
  5. Compare to the Entri-Signature-V3 header value using a constant-time comparison.
Always compute the HMAC over the raw HTTP request body bytes, before any JSON parsing. Do not parse the JSON body and re-serialize it — different libraries produce different byte sequences (whitespace, key ordering, number formatting), which will cause verification to fail.

Verification examples

Entri-Signature (V1) and Entri-Signature-V2 continue to be sent alongside V3. Existing integrations that verify V1 or V2 will keep working without any changes. V3 is purely additive — add it to new integrations and migrate existing ones at your convenience.

Signature V2

Entri-Signature-V2 adds timestamp binding to V1, making each signature unique and time-bound. It is computed as SHA256(webhook_id + timestamp + client_secret) with no separators between the values.
The V2 signature is a plain SHA-256 digest of webhook_id ‖ timestamp ‖ client_secret. It is not an RFC 2104 HMAC-SHA256. Placing the secret at the end of the input avoids the length-extension weakness of the H(secret ‖ msg) construction.

How to verify

  1. Read the webhook payload’s id field.
  2. Read the Entri-Timestamp header (epoch seconds).
  3. Build the canonical message: webhook_id + timestamp + client_secret (concatenated, no separators).
  4. Compute SHA256(canonical_message) and hex-encode it.
  5. Compare the result to the Entri-Signature-V2 header using a constant-time comparison.
  6. Enforce a freshness window (for example, 5 minutes) using the timestamp.

Verification example (Python)

Signature V1 (Legacy)

Entri-Signature is the original signature, computed as SHA256(webhook_id + client_secret). It does not include a timestamp, so it provides no replay protection.

Verification example (Python)