EmbrasureDocs
Lineage

Ingest lineage

Send OpenLineage events, import artifacts, or submit lineage through MCP.

Use OpenLineage for runtime producers and the artifact endpoints for systems that already emit a complete project or catalog snapshot.

HTTP receiver

MethodPathBody
POST/api/v1/lineageOne OpenLineage event
POST/api/v1/lineage/batchAn array or { "events": [...] }

Both routes require a bearer token with write scope and workspace editor access. Requests are limited to 8 MiB. Batches accept 1 to 1,000 events. Compressed requests are not accepted.

A workspace-scoped API token can omit the workspace_id query parameter. This lets standard OpenLineage emitters that only support a base URL plus API key target Embrasure directly: set the emitter's URL to https://api.embrasure.ai (the client appends /api/v1/lineage) and its API key to a workspace-scoped token. Without connector_id, dataset identity resolves through the provider's namespace binding rules.

curl --request POST \
  --url "https://api.embrasure.ai/api/v1/lineage?workspace_id=$WORKSPACE_ID&connector_id=$CONNECTOR_ID" \
  --header "Authorization: Bearer $EMBRASURE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: orders-refresh-0190" \
  --data-binary @openlineage-event.json

Accepted delivery returns a durable receipt:

{
  "delivery_id": "c5ecf66d-1ca4-4e86-ae60-51c9108490cf",
  "state": "accepted",
  "duplicate": false,
  "item_count": 1,
  "invalid_item_count": 0
}

Processing is asynchronous. A receipt confirms durable acceptance, not completed graph projection.

Service-to-table reads

Send an input-only OpenLineage event to trace an application or service that reads a table. Use a stable, per-service provider_key and include job and inputs without outputs.

curl -X POST "$EMBRASURE_API/api/v1/lineage?workspace_id=$WORKSPACE_ID&connector_id=$CONNECTOR_ID&provider_key=risk-api" \
  -H "Authorization: Bearer $EMBRASURE_PAT" \
  -H "Content-Type: application/json" \
  -d '{"eventType":"COMPLETE","eventTime":"2026-08-04T12:00:00Z","job":{"namespace":"production","name":"risk-api"},"run":{"runId":"8a3c"},"inputs":[{"namespace":"warehouse","name":"analytics.transactions"}]}'

Embrasure creates the service identity from job.namespace and job.name, then records a reads_from edge for each resolved input. The service appears downstream when you inspect a table it reads.

Query-history discovery creates the same service nodes for service accounts. BigQuery uses referenced_tables from INFORMATION_SCHEMA.JOBS_BY_PROJECT; Snowflake and Databricks use collected query observations. Human users do not create service-read edges. Reads are aggregated into one evidence window per service and table each hour.

This route accepts enabled, user-bound dpt_ personal access tokens.

Idempotency

Send Idempotency-Key on retries. Reusing a key with different bytes returns a conflict. Without a key, byte-identical deliveries deduplicate by payload digest.

MCP submission

submit_lineage uses the same delivery contract as HTTP:

{
  "workspace_id": "workspace-id",
  "connector_id": "connector-id",
  "provider_key": "application:risk-api",
  "events": [{"eventType": "COMPLETE"}],
  "idempotency_key": "risk-api-run-0190"
}

events accepts 1 to 1,000 OpenLineage objects. The result contains delivery_id, state, duplicate, item_count, and invalid_item_count. The tool requires write scope and is idempotent but not read-only.

Artifact imports

SourceRoutePrimary payload
dbtPOST /v1/pipelines/dbt/manifestmanifest
SQLMesh project exportPOST /v1/pipelines/sqlmesh/projectproject
DataHubPOST /v1/pipelines/lineage/datahubexport

Every artifact request includes workspace_id, connector_id, completeness, and an idempotency key for complete acquisitions.

Resolution is required

An edge reaches the served graph only after both endpoints resolve inside the provider's connector scope. Unresolved evidence remains stored for later resolution.

On this page