OpenLineage Events
Send single or batched OpenLineage RunEvents to create lineage in Collate.
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.getcollate.io, the single-event URL is https://your-company.getcollate.io/api/v1/openlineage/lineage.
Prerequisites
Both endpoints require an Collate JWT in theAuthorization: Bearer header and EditLineage permission on the table resource. The server’s OpenLineage API must be enabled.
Datasets must resolve to existing catalog assets, or to a table the server can create for a namespace in namespaceToServiceMapping. The server never creates pipelines. 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.
COLLATE_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.
A single event that writes some edges but leaves some datasets unresolved returns
200 with status: partial_success. A single event that writes no edges because its datasets did not resolve returns 400, and the body lists them in unresolvedDatasets. Filtered events and events with empty input or output lists can still return 200 with lineageEdgesCreated: 0.
A batch returns 400 only when every event in it failed. Otherwise it returns 200, even when the body reports partial_success. Individual edge-write failures are logged and do not necessarily produce a failed event. Check the counts, unresolvedDatasets, and server logs, then verify the graph with Get Lineage.
Unresolved Datasets and Jobs
Each entry inunresolvedDatasets and unresolvedJobs has these fields:
The following response shows an event that wrote one edge and left one output dataset unresolved:
message text above is illustrative. Use reason in code. It is one of: