Receive OpenLineage event - Precisely Data Integrity Suite

Data Integrity Suite APIs

Product
Data_Integrity
Spatial_Analytics
Data_Enrichment
geo_addressing_1
Services
Spatial Analytics
Data Enrichment
Geo Addressing
ft:title
Data Integrity Suite APIs
ft:locale
en-US
PublicationType
pt_developer
copyrightfirst
2023
copyrightlast
2026

Receive OpenLineage event Receive OpenLineage event (standard endpoint)

The Standard OpenLineage HTTP Transport endpoint receives OpenLineage RunEvent payloads and processes them to create or update assets and lineage relationships. It fully conforms to the official OpenLineage HTTP transport specification. This endpoint is idempotent—duplicate events (with the same runId and eventType) are safely ignored to ensure consistent lineage state without duplication.

Producer configuration example (Dagster):
export OPENLINEAGE_URL=https://your-catalog-host/api/v1/lineage

POST https://[hostname]/api/v1/lineage

Request Parameters

Parameter Type Required Description
eventType string Yes Type of run event.
eventTime string Yes Timestamp of the event in ISO 8601 format.
producer string Yes URI identifying the producer of this event.
schemaURL string Yes URL to the OpenLineage JSON schema used for the event.
run object Yes Run reference containing the run identifier and associated facets.
job object Yes Job reference containing the job namespace, name, and associated facets.
inputs array[object] No Input datasets associated with the event (typically present on COMPLETE)
outputs array[object] No Output datasets associated with the event (typically present on COMPLETE)

run Properties

Field Type Required Description
runId string Yes Unique identifier for this run.
facets object No

Additional run details, such as nominal time, parent run, or error information.

job Properties

Field Type Required Description
namespace string Yes Job namespace (e.g., "dagster-prod").
name string Yes Job name within the namespace.
facets object No

Additional job details, such as documentation, SQL, or ownership.

inputs Item Properties

Field Type Required Description
namespace string Yes Dataset namespace (e.g., "snowflake://account.region")
name string Yes Dataset name (e.g., "db.schema.table")
facets object No

Additional dataset details, such as schema, data source, or documentation.

inputFacets object No

Additional details specific to input datasets.

outputFacets object No

Additional details specific to output datasets.

outputs Item Properties

Field Type Required Description
namespace string Yes Dataset namespace (e.g., "snowflake://account.region")
name string Yes Dataset name (e.g., "db.schema.table")
facets object No Dataset facets (schema, dataSource, documentation, etc.)
inputFacets object No

Additional details specific to input datasets.

outputFacets object No

Additional details specific to output datasets.

For the complete OpenLineageRunEvent schema definition, see the example below.


{
  "eventType": "COMPLETE",
  "eventTime": "2026-04-16T10:30:00Z",
  "producer": "https://github.com/dagster-io/dagster",
  "schemaURL": "https://openlineage.io/spec/1-2-0/OpenLineage.json#/definitions/RunEvent",
  "run": {
    "runId": "550e8400-e29b-41d4-a716-446655440000"
  },
  "job": {
    "namespace": "dagster-prod",
    "name": "etl_pipeline"
  },
  "inputs": [
    {
      "namespace": "oracle://prod-oracle:1521",
      "name": "sales_db.customers"
    }
  ],
  "outputs": [
    {
      "namespace": "snowflake://account.snowflakecomputing.com",
      "name": "analytics.staging.customers"
    }
  ]
}

Request Examples

Each example shows how to call this endpoint with the documented method, URL, headers, and request body format.


curl -X POST "/api/v1/lineage" \
  -H "Authorization: Bearer <JWT>" \
  -H "Content-Type: application/json" \
  -d '{
  "eventType": "example",
  "eventTime": "example",
  "producer": "example",
  "schemaURL": "example",
  "run": {
    "runId": "example"
  },
  "job": {
    "namespace": "example",
    "name": "example"
  }
}'

fetch("/api/v1/lineage", {
  method: "POST",
  headers: {
        "Authorization": "Bearer <JWT>",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "eventType": "example",
  "eventTime": "example",
  "producer": "example",
  "schemaURL": "example",
  "run": {
    "runId": "example"
  },
  "job": {
    "namespace": "example",
    "name": "example"
  }
})
})
.then(res => res.json())
.then(data => console.log(data));

import json
import requests

url = "/api/v1/lineage"
headers = {
    "Authorization": "Bearer <JWT>",
  "Content-Type": "application/json"
}
payload = json.loads('''{
  "eventType": "example",
  "eventTime": "example",
  "producer": "example",
  "schemaURL": "example",
  "run": {
    "runId": "example"
  },
  "job": {
    "namespace": "example",
    "name": "example"
  }
}''')

response = requests.post(url, headers=headers, json=payload)
print(response.json())

package main

import (
	"fmt"
	"io"
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{
  "eventType": "example",
  "eventTime": "example",
  "producer": "example",
  "schemaURL": "example",
  "run": {
    "runId": "example"
  },
  "job": {
    "namespace": "example",
    "name": "example"
  }
}`)
	req, _ := http.NewRequest("POST", "/api/v1/lineage", body)
	req.Header.Set("Authorization", "Bearer <JWT>")
	req.Header.Set("Content-Type", "application/json")
	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body2, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body2))
}

Success Responses

Indicates that the event was accepted. The response provides identifiers for the event and run, the event type, acceptance status, a summary of assets and relationships, and the timestamp of the event.

{
  "eventId": "evt-123e4567-e89b-12d3-a456-426614174000",
  "runId": "550e8400-e29b-41d4-a716-446655440000",
  "eventType": "COMPLETE",
  "status": "accepted",
  "assetsResolved": {
    "created": 2,
    "existing": 0
  },
  "relationsCreated": 1,
  "timestamp": "2026-04-16T10:30:05Z"
}

Minimal OpenLineage-compliant acknowledgment payload:

{
  "status": "accepted"
}

Error Responses

Indicates that the request could not be accepted due to invalid input. The response provides an error code, a message describing the issue, and validation details (including the field and reason) to help identify and correct the problem.

{
  "statusCode": 400,
  "code": "GOV-CATALOG-SVC-OL-001",
  "error": "Bad Request",
  "message": "Invalid OpenLineage event: missing required field 'eventTime'",
  "validationErrors": [
    {
      "path": "/eventTime",
      "message": "Required field is missing"
    }
  ]
}