Webhook Payloads and Delivery
This page describes what a Generic Webhook destination receives and how OpenMetadata delivers it. Use it to build a webhook receiver, for example one that creates or updates tickets in an external tracker. To configure the destination in the UI, see Generic Webhook Alert Configuration. To understand which events an alert matches, see Alert Behavior Reference. Slack, Microsoft Teams, Google Chat, and Email destinations don’t receive this JSON. OpenMetadata renders a message from a notification template for each of those channels. To customize those messages, see Notification Templates.Request Format
OpenMetadata sends one HTTP request for each event, with a single JSON object as the body.- Method: always
POSTfor alert deliveries. The Test Connection button also honors aPUTmethod if you configure one through the API. - Content type:
application/json. - Body: the
ChangeEventobject described in this section. The generic webhook doesn’t use a notification template, so you can’t reshape the body. - Custom headers and query parameters: any you configure on the destination are added to the request.
The ChangeEvent Object
Every payload has this envelope. Only the first five fields are always present.
Some fields, such as
previousVersion and domains, can be absent from delivered events even though the schema defines them. Treat every field outside the first five as optional.
The changeDescription Field
changeDescription lists the fields that changed:
Event Types
These events are all delivered witheventType set to entityUpdated:
- Test results
- Data contract results
- Pipeline status
- Ingestion pipeline status
- Task status changes
entityType and the name of the item in changeDescription.fieldsUpdated.
Payload Examples by Source
The following examples show the shape of each payload. IDs, names, and values are placeholders, andentity is abbreviated. Treat the field names and nesting as the contract, and don’t rely on exact values.
Test Case Result
Source: Test Case. Fires for each posted test result that matches the trigger.testCaseStatus:Success,Failed,Aborted, orQueued.incidentId: present only on a failed result that opened or reused an incident. The ID matches the incident task. See Incident Task Events.- Optional result fields:
testResultValue,passedRows,failedRows, and bound values vary by test definition.
Test Suite Run
Source: Test Suite. Fires once when a test suite pipeline run completes. The result summary appears undertestCaseResultSummary in fieldsUpdated, with one entry per test case in the suite and the status of each. The entity field is the test suite.
Table, Topic, or Container Schema Change
Sources: Table, Topic, Container.name in the changed field depends on the source:
- Table:
columns,dataModel, orjoins - Topic:
messageSchema - Container:
parentorchildren
profile or customMetrics.
Pipeline Status
Source: Pipeline.id, entityId, userName, timestamp, and entity are present as in the other examples. executionStatus is Successful, Failed, Pending, or Skipped. oldValue appears only when an earlier status exists for the same timestamp.
Ingestion Pipeline Status
Source: Ingestion Pipeline.pipelineState is one of queued, running, success, partialSuccess, failed, or stopped. oldValue is present only when OpenMetadata already stored a status for that runId. A single run produces several events as it moves through its states.
Data Contract Result
Source: Data Contract.latestResult.status inside entity, so read the status from there when you need the current value.
Incident Task Events
Source: Task (or All), on a Notification alert. Each incident status change is expected to produce one event withentityType of task.
changeDescription.fieldsUpdatedcontains astatusitem (for example fromOpentoInProgress).- On resolution, a
resolutionitem is added with the resolution details. entityis the incident task, including itsworkflowStageId(new,ack,assigned, orresolved), assignees, and the test case it is about.
entity.workflowStageId or by the status change in your receiver. See Incidents for how to read the full incident through the API.
The exact payload of a task event hasn’t been captured here. Build your receiver to read
entityType, changeDescription, and the parsed entity, and log a few real events from your environment before you rely on specific values.Authentication
The destination supports three options:- None: no credential is sent.
- Bearer (hash-based message authentication code, or HMAC, signature): OpenMetadata doesn’t send the secret. It sends
X-OM-Signature: sha256=<signature>, where the signature is the Base64-encoded HMAC-SHA256 of the raw request body using your secret key. - OAuth2 client credentials: OpenMetadata requests an access token and sends
Authorization: Bearer <token>. If your endpoint answers401, OpenMetadata fetches a new token and retries once.
Delivery Guarantees
This section describes what counts as a successful delivery, what happens when a delivery fails, and how to handle duplicates and ordering.Success and Failure
- Success: your endpoint returns any
2xxresponse within the read timeout. - Failure: any other response, including a
3xxredirect, a connection error, or a timeout. - Timeouts: the default is 10 seconds to connect and 12 seconds to read. OpenMetadata keeps the connect timeout between 5 and 30 seconds and the read timeout between 10 and 120 seconds, even if you configure a value outside those ranges.
Retries
OpenMetadata doesn’t automatically resend an event after a failed delivery.- The only automatic retry is for OAuth2: after a
401, OpenMetadata fetches a new token and sends the request once more. - A failed event is recorded for the alert (see Failed Events) and OpenMetadata continues with the next event. It doesn’t block later events.
- The
retriessetting on an alert is stored with the failed event record. It doesn’t cause redelivery.
2xx quickly and processes the event afterward, and reconcile from the API if you miss events.
Duplicate Delivery
Treat delivery as at least once. OpenMetadata can occasionally deliver the same event more than once, for example when the server restarts after sending an event but before it records that the event was sent, or when more than one server instance is running.- Every event has a stable
id. Store theidof each event you process and ignore any repeat. - Make your receiver safe to run twice on the same event, for example by looking up an existing ticket before creating one.
Ordering
Events aren’t guaranteed to arrive in the order they happened. OpenMetadata doesn’t sort events inside a polling batch by time. Use the eventtimestamp and the asset’s currentVersion to decide which event is newer.
Failed Events
The alerts API lists failed events with the reason each one failed. It also lists the events sent successfully. Use this to find events your receiver missed. OpenMetadata keeps these records for the retention period configured in the Data Retention application. The default is 7 days.Testing a Destination
Use Test Connection in the UI, orPOST /v1/events/subscriptions/testDestination through the API, to send a test message to your endpoint before you enable the alert.