Event types
| Event type | Triggered when… |
|---|---|
test.created | A test is created. |
test.updated | A test’s configuration is updated. |
test.deleted | A test is deleted. |
tests.result.updated | A test suite finishes a run, summarizing how many tests passed and failed. |
Payload structure
Every webhook request body shares the same envelope:| Field | Description |
|---|---|
type | The event type that triggered this delivery. |
timestamp | The ISO 8601 (UTC) time at which the event was generated. |
data | An object whose contents depend on the event type (see below). |
Alongside the body, every request carries signature headers (
webhook-id,
webhook-timestamp, and webhook-signature). Always verify the
signature before trusting a payload.test.created
Sent when a test is created. The data.test object contains the full test
definition.
test.updated
Sent when a test’s configuration changes. The data.test object has the same
structure as test.created, reflecting the test’s new state.
test.deleted
Sent when a test is deleted. To keep the payload meaningful after deletion, only
the test id is included.
tests.result.updated
Sent once per test suite run, after the suite finishes evaluating. Rather than
one event per test, Openlayer emits a single event that summarizes the run. This
is the event to subscribe to if you want to alert when tests start failing.
| Field | Description |
|---|---|
projectId | The project the test suite belongs to. |
projectVersionId | The project version (commit) that was evaluated. May be null. |
inferencePipelineId | The inference pipeline that was evaluated, for monitoring runs. May be null. |
total | Total number of tests in the run. |
passing | Number of tests that passed. |
failing | Number of tests that failed. |
skipped | Number of tests that were skipped. |
running | Number of tests still running. |

