Skip to main content
Atlan reads a fixed set of headers and attributes when it ingests a trace. This page lists them, the order Atlan tries alias keys in, and what happens when a value is missing. The atlanai SDK sets these keys for you; set them yourself when you send from another OpenTelemetry producer. Where a field has several keys, the first key present on the span wins, in the order listed. Keys are read from the span that carries them; a child span does not inherit its parent’s model, skill, or tool.

Owner and workspace

These come from the request, not from attributes. No attribute can change them. service.name, gen_ai.agent.name, and user.id never decide the owner. See How trace attribution works.

Resource attributes

Session, visitor, skill, and eval

No attribute sets an agent version. Traces and the SDK’s session records name the agent, not a version. To compare versions, record the version in an eval experiment’s config.

Span type and model

The SDK’s update(model=..., provider=...) writes gen_ai.request.model and gen_ai.provider.name.

Tokens

All token counts are integers. Atlan stores four separate counts, so cached tokens are never counted twice. Every input key except atlan.usage.input_tokens is read as the whole prompt, cached tokens included. Atlan subtracts the cache-read and cache-write counts from it to get fresh input. atlan.usage.input_tokens is read as fresh input already. The SDK’s usage={"input_tokens": ...} writes gen_ai.usage.input_tokens, so pass the whole prompt count there. A span’s usage.input_tokens, read back through the API with fields=usage, is the fresh count.

Cost

A cost you record is kept only when Atlan cannot price the call itself. When the span has a model and at least one token count, Atlan prices it at your organization’s rates and replaces the recorded cost. If no rate applies, the call is Unpriced at zero. See How cost is calculated.

Example

One model-call span from an OpenTelemetry producer, shown as OTLP JSON attributes:
Atlan records this span as an llm call in session ticket-4821, with 4,000 fresh input tokens, 8,000 cache-read tokens, and 600 output tokens, then prices it.