Before you begin
Before you start, make sure you have:- Access: Read access to the source project, and an identity that can write traces to the target workspace.
- Synthetic trace: A non-production trace selected for the first import, with its source trace ID, root operation name, timestamps, expected span count, and final status recorded.
- Credentials: The bearer credential in an approved secret store, never in source code, export files, URLs, screenshots, or logs.
- Data approval: A decision on which fields may leave the source store. Prompts, completions, tokens, customer data, internal hosts, and production responses need explicit policy approval.
1
Export source trace
Select one source project and a bounded time range, starting with the synthetic trace so the read-back has a known answer. Export the trace and its spans.
2
Map trace to OTLP
Build an OTLP
ExportTraceServiceRequest that keeps the trace tree and execution facts. Use this mapping as the minimum contract:Do not infer agent, session, skill, or version attribution from a display name, the source project, or matching timestamps. Send explicit identifiers only when the source and target records establish the relationship.
3
Send OTLP batch
Send the batch to
POST /otel/v1/traces; see the API reference.- Set
X-Atlan-Workspace-Idwhen the import belongs in a specific active workspace. The authenticated identity determines the account; a request cannot select another account. - Send a stable
X-Atlan-Ingest-Idfor the batch. Reuse it only for an unchanged retry of the same account, workspace, creator, and payload.
200 means the batch is accepted and durably queued, not that the trace is readable yet. Keep batches small enough to inspect and retry, and split them only between complete trace trees.4
Verify imported trace
- Read the trace with
GET /registry/v1/users/{user_id}/traces/{trace_id}, where{user_id}is the Atlan user ID of the identity that sent the batch (theidthatGET /registry/v1/users/mereturns). Confirm that itsworkspace_idis the intended workspace. - Read its tree with
GET /registry/v1/users/{user_id}/traces/{trace_id}/spans. Followpage.next_cursoruntil it is absent, and check the total againstsummary.span_countfrom step 1. Addfields=core,attributesto inspect the retained source metadata. - Compare the root name, span count, parent relationships, timestamps, and final status with the source record.
- If the batch is still processing, retry the read within a bounded deadline. Do not send a changed batch while the outcome is unknown; see Import outcome unknown.
Troubleshooting
For400, 401, 403, 409, 413, timeouts, and a trace that is not found after import, see Trace errors.
Next steps
- Import Langfuse traces: Apply this workflow to a Langfuse project.
See also
- How trace attribution works: Before asserting that an imported trace belongs to an agent or skill.
- API reference: The OTLP ingestion contract and limits.