Webhooks

Webhooks

Have transglot POST a signed event to your own endpoint when something changes in a project, instead of polling.

A webhook endpoint is an HTTPS URL of yours that transglot sends a POST to when something happens in a project: a translation run finishes, keys are created, a language is removed. Use webhooks to start a deploy when translations land, rebuild a static site, invalidate a cache or post to a channel, without polling the API.

How it works

  • Per project. Endpoints belong to one project. A project can have several, each subscribed to its own set of events.
  • You choose the events. An endpoint receives only the events it subscribed to. There are twelve; see the event reference.
  • Signed. Every delivery carries an X-Transglot-Signature header, an HMAC-SHA256 of the timestamp and body keyed with the endpoint's signing secret. Verify it before you act on a delivery.
  • Coalesced where it matters. High-frequency events are counted over a short window and delivered once, carrying a count and up to 20 samples. A bulk edit of 5,000 strings becomes one request, not 5,000.
  • Retried. A delivery that does not get a 2xx within 10 seconds is retried three more times over about six minutes. Every attempt is in the endpoint's delivery log, where you can redeliver it. See Retries and redelivery.

A delivery

POST https://ci.example.com/hooks/transglot
Content-Type: application/json
User-Agent: transglot-webhooks/1
X-Transglot-Event: batch.completed
X-Transglot-Delivery: 0f6d1c0e-6a4b-4f7e-9a51-3c2b8d7e4a19
X-Transglot-Timestamp: 1791820860
X-Transglot-Signature: sha256=5d1c3e8f0a2b4c6d8e0f1a3b5c7d9e1f3a5b7c9d1e3f5a7b9c1d3e5f7a9b1c3d

{"batch":{"id":4821,"total":240,"failed":0,"status":"completed","skipped":12,"trigger":"push","completed":240,"tm_served":37,"started_at":"2026-10-12T09:39:13+00:00","finished_at":"2026-10-12T09:41:00+00:00","skipped_reasons":{"human_value_stale":12},"language_breakdown":{"de":120,"fr":120}},"event":"batch.completed","project":{"id":12,"slug":"acme-web"},"delivered_at":"2026-10-12T09:41:00+00:00"}

Every payload has the same three fields, event, delivered_at and project (id and slug), plus fields that depend on the event. The body is compact JSON and the order of its keys is not meaningful: read fields by name, and verify the signature against the raw bytes you received.

Requirements

  • Plan. Webhooks need the Starter plan or higher. If the account's plan stops including them, deliveries stop until it does again; endpoints are kept.
  • Permission. Owners and admins create and manage endpoints.
  • A public HTTPS URL. Endpoints must be publicly reachable HTTPS URLs on port 443; private and internal addresses are refused. The address is checked when you create the endpoint and again before every delivery.

Get started

On this page