Webhook Events
Each webhook delivery includes the event type in the X-Ttoolab-Event-Type header and in the JSON payload type field.
Supported event types
Section titled “Supported event types”| Event type | Description |
| :--------- | :---------- |
| experiment.created | A new experiment was created |
| experiment.started | An experiment started running (published) |
| experiment.paused | An experiment was paused |
| experiment.finished | An experiment was completed |
| experiment.published | An experiment was published to the edge |
| experiment.exposure | A visitor was exposed to an experiment variant |
| experiment.conversion | A visitor triggered a conversion event |
| experiment.winner_detected | A statistically significant winner was detected |
| ces.response_created | A CES survey response was submitted |
| feature_flag.created | A feature flag experiment was created |
| feature_flag.updated | A feature flag was updated or published |
| feature_flag.exposed | A visitor was exposed to a feature flag variant |
| usage.limit_reached | A plan usage limit was reached |
| billing.plan_changed | The tenant’s billing plan changed |
| webhook.test | Test event from the dashboard |
Select which events to receive when creating or editing a webhook in the dashboard.
Payload structure
Section titled “Payload structure”{ "id": "EVENT_ID", "type": "experiment.conversion", "projectId": "PROJECT_ID", "tenantId": "TENANT_ID", "createdAt": "2025-06-09T12:00:00.000Z", "data": {}}The data object varies by event type.
Experiment exposure
Section titled “Experiment exposure”{ "id": "EVENT_ID", "type": "experiment.exposure", "projectId": "PROJECT_ID", "tenantId": "TENANT_ID", "createdAt": "2025-06-09T12:00:00.000Z", "data": { "experimentId": "EXPERIMENT_ID", "experimentKey": "hero-cta-test", "variantId": "VARIANT_ID", "variantKey": "variant-b", "anonymousId": "550e8400-e29b-41d4-a716-446655440000", "eventName": "$exposure", "url": "https://example.com/pricing", "payload": {} }}Experiment conversion
Section titled “Experiment conversion”{ "id": "EVENT_ID", "type": "experiment.conversion", "projectId": "PROJECT_ID", "tenantId": "TENANT_ID", "createdAt": "2025-06-09T12:00:05.000Z", "data": { "experimentId": "EXPERIMENT_ID", "experimentKey": "hero-cta-test", "variantId": "VARIANT_ID", "variantKey": "variant-b", "anonymousId": "550e8400-e29b-41d4-a716-446655440000", "eventName": "purchase", "url": "https://example.com/checkout/success", "payload": { "revenue": 99.90, "order_id": "ORD-12345" } }}Feature flag exposed
Section titled “Feature flag exposed”{ "id": "EVENT_ID", "type": "feature_flag.exposed", "projectId": "PROJECT_ID", "tenantId": "TENANT_ID", "createdAt": "2025-06-09T12:00:00.000Z", "data": { "experimentId": "EXPERIMENT_ID", "experimentKey": "new-checkout-flag", "variantId": "VARIANT_ID", "variantKey": "on", "anonymousId": "550e8400-e29b-41d4-a716-446655440000", "eventName": "$exposure", "url": "https://example.com/checkout", "payload": {} }}Idempotency
Section titled “Idempotency”Use the id field (also sent as X-Ttoolab-Event-Id) to deduplicate deliveries. Store processed event IDs and skip duplicates.