Skip to main content
Webhooks let you subscribe to events in Entri and receive an HTTP POST request to your server whenever something important happens — a key is created, a translation is completed, or an import finishes. Use webhooks to trigger CI pipelines, sync external systems, or notify your team.

Creating a Webhook

1

Open project settings

Navigate to your project, click Settings, then select the Webhooks tab. Alternatively, create organization-level webhooks under Organization Settings → Webhooks.
2

Add a new endpoint

Click Add Webhook and enter the URL of your server endpoint. It must be publicly accessible and accept POST requests.
3

Select events

Choose which events should trigger this webhook. You can subscribe to individual events or all events.
4

Save and copy the secret

Click Save. Entri auto-generates a signing secret and shows it once — copy it immediately and store it securely. You will need it to verify webhook signatures.
5

Test the endpoint

Use the Test button to send a webhook.test event to your endpoint and verify it is reachable.

Supported Events

EventWhen it fires
key.createdA new translation key was created in the project
key.deletedA translation key was deleted from the project
translation.completedA single translation was saved (human or AI)
language.completedAll translations for a language reached completed status
import.completedAn import job finished processing
export.completedAn export job finished and the file is ready

Webhook Payload

Every event is delivered as a JSON object with a consistent envelope:
{
  "event": "translation.completed",
  "timestamp": "2026-02-19T14:32:00.000Z",
  "data": {
    "keyId": "key_01hx3k9f2vbmqztjd8ab",
    "key": "welcome.title",
    "language": "fr",
    "value": "Bienvenue sur Entri"
  }
}

Request Headers

Each webhook delivery includes these headers:
HeaderDescription
Content-Typeapplication/json
X-Webhook-SignatureHMAC-SHA256 hex signature of the request body
X-Webhook-EventThe event type (e.g. translation.completed)

Security — Verifying Signatures

Entri signs every webhook request so you can confirm the payload came from Entri and was not tampered with. The signature is in the X-Webhook-Signature header as a plain hex string.
1

Retrieve your signing secret

Find the signing secret shown when you created the webhook. Keep it private — it cannot be retrieved after creation.
2

Compute the expected signature

Compute an HMAC-SHA256 digest of the raw request body using your signing secret as the key.
3

Compare signatures

Compare your computed digest to the value in X-Webhook-Signature. Reject the request if they do not match.
import crypto from 'crypto'

function verifySignature(secret, rawBody, signatureHeader) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex')
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signatureHeader)
  )
}

Delivery and Failures

If your endpoint returns a non-2xx status code or does not respond within 10 seconds, the delivery is marked as failed. Entri does not automatically retry failed webhook deliveries. Monitor the failureCount field on the webhook object and investigate delivery failures promptly.
Make sure your endpoint responds quickly (ideally under 3 seconds) by acknowledging the request immediately and processing the payload asynchronously. Long-running handlers can cause timeout failures.
For full API reference including creating, updating, and deleting webhooks programmatically, see Webhooks API Reference.