Skip to main content
Already using OpenTelemetry or a framework with built-in tracing (Vercel AI SDK, LangChain, LlamaIndex)? You can send traces straight to Avido — no custom integration code required. Avido accepts standard OTLP JSON payloads and automatically maps OpenInference span attributes and OTel GenAI semantic conventions into its trace model.

Quick setup

Point your OpenTelemetry exporter at Avido by setting three environment variables:
You can find your Application ID and API key in the Avido dashboard under Settings > API Keys.
Disabling instrumentation: If OTEL_EXPORTER_OTLP_ENDPOINT is not set, the Avido OpenTelemetry integration is automatically disabled. This lets you turn tracing on and off per environment without code changes.

Sending traces

Once your exporter is configured, traces are sent automatically by your instrumentation library. You can also send an OTLP payload manually:
cURL
A successful request returns the created trace and step IDs — the same response shape as the /v0/ingest endpoint.

How spans are mapped

Avido reads the openinference.span.kind attribute on each span and converts it into the matching Avido step type: Spans without a recognised openinference.span.kind are stored as log steps so nothing is lost.
Agentic trace support: AGENT and CHAIN spans are mapped to group steps, preserving the hierarchical structure of agentic workflows. This means multi-turn agent loops, tool-calling chains, and orchestration flows are displayed with their full parent-child relationships in the Avido trace viewer.

Attribute reference

The tables below list every attribute Avido extracts from spans. Any attributes not listed here are preserved in the step’s metadata field.

LLM spans

Tool spans

Group spans (Agent / Chain)

Retriever spans

Common attributes

Linking test runs: avido.test.id is a custom Avido attribute — it is not part of the OpenInference spec. If you’re running Avido tests via webhooks, set this span attribute to the testId from the webhook payload so the trace is automatically connected to the test run and evaluation results are linked.

Error and status tracking

Avido maps the OTel span status to structured error fields on each step: When a span has status.code = 2 (ERROR):
  • The step’s status is set to error
  • The span’s status.message is stored in the step’s error field
  • The numeric status code is preserved in statusCode
This means failed LLM calls, tool errors, and timeout spans are automatically flagged in Avido’s trace viewer without any extra instrumentation on your side.

Cost tracking

Avido automatically computes the cost of LLM steps when token counts are present.

How it works

  1. When an LLM span includes llm.token_count.prompt and llm.token_count.completion, Avido looks up the model in the Model Pricing table (configurable in your dashboard).
  2. Cost is computed as: (promptTokens x inputCostPer1kTokens + completionTokens x outputCostPer1kTokens) / 1000
  3. The resulting costAmount is stored on the step.

Trace-level aggregation

After all steps are ingested, Avido computes summary fields on the trace: These pre-computed fields power the trace list view and enable filtering by cost, duration, and error state without scanning individual steps.
Set up Model Pricing in the Avido dashboard or via the API to enable automatic cost computation. If no pricing entry exists for a model, the step is ingested without a cost value.

Trace structure

Each OTLP batch creates one trace in Avido:
  • If a root span (no parentSpanId) is present, it becomes the trace container. Its session.id or gen_ai.conversation.id attribute is used as the trace’s referenceId.
  • If no root span exists, the first span in the batch is used.
  • All spans become steps nested under the trace, preserving parent-child relationships via parentSpanId.
  • Timing fields (startTimeUnixNano, endTimeUnixNano) are stored as step timestamps with millisecond duration.

Understanding testId and traceId

Two IDs can appear on OTEL traces — here’s what each one does:
avido.test.id links the trace to an Avido test run for evaluation. The OTLP traceId groups spans together. They serve different purposes — do not confuse them.

Agentic trace patterns

Avido is designed to capture complex agentic workflows. Here’s how common patterns map through the OTEL converter:

Multi-turn tool-calling agent

This becomes in Avido:

Orchestration chain

Both the outer CHAIN and inner spans are preserved with their full hierarchy.

Error handling in agents

When a span has status.code = 2, the step is marked as error. This is useful for tracking retry patterns:

Vercel AI SDK

If you’re using the Vercel AI SDK, Avido also recognises its telemetry attributes as fallbacks:

Next steps

Need help wiring up your stack? Contact us and we’ll help you get connected.