POST /v1/traces, so any OpenTelemetry-instrumented application can export directly — through a collector, or straight from your app using an OTLP exporter.
When to use OTLP
Use this integration when:- Your application already uses OpenTelemetry for instrumentation
- You want to fan out traces to multiple backends (ZeroEval + Datadog, Jaeger, etc.)
- You’re running infrastructure you can’t modify but can route through a collector
- You prefer a vendor-neutral instrumentation layer
If you’re starting fresh, the Python SDK or
TypeScript SDK provide a simpler setup with
automatic LLM instrumentation.
Endpoint Reference
The endpoint accepts the standard
ExportTraceServiceRequest payload defined in the OTLP specification. Spans are converted to ZeroEval’s internal format — trace IDs, parent-child relationships, attributes, and status are all preserved.
Option 1: OpenTelemetry Collector
Route traces through a collector when you need batching, processing, or multi-destination fan-out.Collector Configuration
Createotel-collector-config.yaml:
Run with Docker Compose
Run with Kubernetes
Full Kubernetes manifest
Full Kubernetes manifest
Option 2: Direct from Python
Export OTLP traces directly from your Python application without a collector. Use theZeroEvalOTLPProvider included in the SDK, or configure a standard OTLPSpanExporter.
Using ZeroEvalOTLPProvider
Using standard OTLPSpanExporter
Option 3: Direct from Node.js
Attribute Mapping
ZeroEval maps standard OpenTelemetry span attributes to its internal format:LLM Spans
To get LLM-specific features (cost calculation, token tracking), set these attributes on your spans:Sessions
Attach session context to your OTLP spans via attributes:
The
ZeroEvalOTLPProvider stamps these automatically when you configure a session via environment variables (ZEROEVAL_SESSION_ID, ZEROEVAL_SESSION_NAME).