Import DataHub lineage

POST a DataHub export into the shared lineage evidence and projection path.

POST /v1/lineage/datahub

Authentication and idempotency

Send Authorization: Bearer <token>. The token needs write scope and the caller needs the editor workspace role or higher. See authentication.

Send Idempotency-Key or source_event_key, each 1 to 500 characters. If both are present, they must match. complete acquisitions require a stable import_source and a caller-supplied key. Use a new key for every acquisition and reuse it only for identical content.

Request body

FieldTypeRequiredDescription
workspace_idstringYesTarget workspace.
connector_idstringYesConnector scope for imported dataset identities.
exportobject or array of objectsYesDataHub lineage entries. An object may contain lineage or edges; an array is treated as the entries directly.
import_sourcestring, 1–300 charactersFor completeStable source label. Defaults to default for partial imports.
completenesspartial or completeNoDefaults to partial. Complete imports can retract evidence absent from the exact connector/source snapshot.
source_event_keystring, 1–500 charactersNoBody alternative to Idempotency-Key.

Each entry requires DataHub dataset upstreamUrn and downstreamUrn values. Optional fineGrainedLineages entries carry column-level mappings.

Complete request example

{
  "workspace_id": "workspace-1",
  "connector_id": "connector-1",
  "import_source": "datahub-production",
  "completeness": "complete",
  "source_event_key": "datahub-export-2026-08-05",
  "export": {
    "lineage": [
      {
        "upstreamUrn": "urn:li:dataset:(urn:li:dataPlatform:snowflake,RAW.PUBLIC.ORDERS,PROD)",
        "downstreamUrn": "urn:li:dataset:(urn:li:dataPlatform:snowflake,ANALYTICS.PUBLIC.ORDERS,PROD)",
        "fineGrainedLineages": [
          {
            "upstreams": [
              "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:snowflake,RAW.PUBLIC.ORDERS,PROD),ORDER_ID)"
            ],
            "downstreams": [
              "urn:li:schemaField:(urn:li:dataset:(urn:li:dataPlatform:snowflake,ANALYTICS.PUBLIC.ORDERS,PROD),ORDER_ID)"
            ],
            "transformOperation": "IDENTITY"
          }
        ]
      }
    ]
  }
}
curl --request POST https://api.embrasure.ai/v1/lineage/datahub \
  --header "Authorization: Bearer $EMBRASURE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: datahub-export-2026-08-05" \
  --data-binary @datahub-lineage-request.json

202 response

{
  "ok": true,
  "delivery_id": "041bb319-b78d-4b8d-a442-0f878f34e7ee",
  "status": "accepted",
  "accepted": true,
  "duplicate": false,
  "item_count": 1,
  "invalid_item_count": 0,
  "dispatch_requested": true,
  "edges_received": 1,
  "observations": 1,
  "unresolved": 0,
  "completeness": "complete",
  "scope_key": "connector:connector-1:datahub-source:datahub-production"
}

The receipt confirms durable acceptance. unresolved counts entries whose DataHub identities could not be interpreted during import.

If the provider is paused, the route performs no import and returns:

{
  "accepted": false,
  "skipped": "provider_paused"
}

Errors

All failures use the shared error envelope.

StatusCodesWhen
401unauthorizedMissing or invalid bearer token.
403insufficient_scope, insufficient_workspace_role, workspace_token_mismatchToken or caller cannot write to the workspace.
409lineage_idempotency_conflict, lineage_provider_scope_conflictKeys conflict, content changed for a reused key, or provider scope cannot be bound.
422validation_error, lineage_snapshot_invalidRequest/export fields are invalid, or a complete snapshot lacks exact scope/key or is not lossless.

See ingest lineage for provider scope and identity resolution.