OpenLineage Events
Send single or batched OpenLineage RunEvents to create lineage in OpenMetadata.
POST
OpenLineage Events
Send OpenLineageRunEvent payloads to create lineage between the events’ input and output datasets.
Paths in this reference are relative to the API base URL. For a server at
https://your-company.open-metadata.org, the single-event URL is https://your-company.open-metadata.org/api/v1/openlineage/lineage.
Prerequisites
Both endpoints require an OpenMetadata JWT in theAuthorization: Bearer header and EditLineage permission on the table resource. The server’s OpenLineage API must be enabled.
Automatic entity creation also requires Create permission for each missing table, database, or database schema that the event creates.
Datasets must resolve to existing catalog assets or satisfy the server’s entity creation settings. Both inputs and outputs must contain at least one dataset to create an edge. By default, the server processes only COMPLETE events.
For more information, see OpenLineage Compatibility.
Single Event Request
The following fields describe theRunEvent request body.
string
required
Time the event occurred, as an ISO 8601 timestamp in UTC.
string
required
URI identifying the event producer.
string
required
URI identifying the OpenLineage event schema.
string
One of
START, RUNNING, COMPLETE, ABORT, FAIL, or OTHER. Send COMPLETE for the default server filter. An omitted value is processed when the filter allows COMPLETE.object
required
Contains the required
runId, a UUID string, and optional run facets.object
required
Contains the required
namespace and name strings, and optional job facets.array
Input datasets. Each dataset requires
namespace and name strings. Dataset facets and inputFacets are optional.array
Output datasets. Each dataset requires
namespace and name strings. Dataset facets and outputFacets are optional.Example RunEvent
Save the following payload asevent.json. This example assumes the namespace maps to prod-postgres and both tables already exist with an id column. The output column maps to prod-postgres.analytics.public.raw_orders.id.
The response examples also assume that the pipeline openlineage.orders-build_orders exists. If the job has no matching pipeline, the server reports it in unresolvedJobs and can still create the dataset edges.
OPENMETADATA_JWT environment variable to your token, then send the saved event:
Batch Request
POST /v1/openlineage/lineage/batch accepts an object containing a required events array with at least one RunEvent. A bare JSON array is not a batch request.
Save this example as batch.json:
Response Fields
Both endpoints return a JSON object. Batch responses also include processing counts.
Each unresolved entry contains
namespace, name, reason, and an explanatory message. Batch entries also contain a zero-based eventIndex. Reasons include namespaceNotMapped, missingColumns, creationDisabled, createNotAllowed, and pipelineNotFound.
A single event returns partial_success when it writes edges but leaves datasets unresolved. It returns 400 with status: failure when datasets are unresolved and no edge was written. A batch returns 400 when every event fails. Otherwise, it returns 200, and its body reports the aggregate result.
A 200 response with status: success can still have lineageEdgesCreated: 0 for a filtered event or an event without inputs or outputs. Individual edge-write failures are logged and do not necessarily produce a failed event. Check the counts and server logs, then verify the graph with Get Lineage.