Skip to main content
Galtea exposes a public OpenTelemetry (OTel) endpoint. OTel is the open standard for emitting traces. The endpoint is an OTLP collector, where OTLP is the OTel export protocol. Send your traces there to enable two use cases:
  • Create production sessions from real traffic. Uncorrelated spans become production Sessions that Monitors evaluate automatically. See Monitor Real User Traffic via OpenTelemetry.
  • Enrich existing inference results. Spans correlated to an inference result become Trace records on it. Correlation uses the shared trace ID from the traceparent header Galtea propagates during Direct Inference, or the explicit galtea.inference_result.id span attribute. See W3C Trace Context Propagation.
The endpoint, authentication, and exporter configuration on this page are the same for both.

Endpoint and authentication

Configure your OTel exporter to send traces to the Galtea collector. Every request must carry an Authorization: Bearer <Galtea-API-key> header — without it, the gateway returns 401 Unauthorized before the request reaches the collector. All examples below use the Galtea platform hostname: otel.platform.prod-main.galtea.ai.
If your organization has a private Galtea deployment, replace the hostname with your tenant-specific endpoint:
Your Galtea account team will provide the exact hostname during onboarding.

Configure your exporter

The OpenTelemetry SDK reads endpoint and headers from environment variables. Use shell substitution to expand ${GALTEA_API_KEY} before the value is stored in OTEL_EXPORTER_OTLP_TRACES_HEADERS:
The same ${GALTEA_API_KEY} syntax works in a docker-compose.yml environment: block, but only when GALTEA_API_KEY is set in the shell that runs Compose or in a .env file Compose loads. Docker Compose substitutes ${...} from those sources when it renders the config. It does not read another entry in the same environment: block. If the variable is unset there, the exporter receives the literal string ${GALTEA_API_KEY} and the gateway returns 401 Unauthorized.
Use OTEL_EXPORTER_OTLP_TRACES_ENDPOINT (the per-signal variant), not OTEL_EXPORTER_OTLP_ENDPOINT. The base variable auto-appends /v1/traces to the URL, but the Galtea collector expects the /otel/traces path.
The OTel exporter does not interpolate placeholders inside OTEL_EXPORTER_OTLP_TRACES_HEADERS — it sends the value verbatim. Exporting Authorization=Bearer $GALTEA_API_KEY without shell expansion (for example, single-quoted, or written into a .env file that your runtime loads without expanding it) literally sends the string $GALTEA_API_KEY and the gateway returns 401 Unauthorized. Ensure the expansion happens at export time, not later.

Verify your key and endpoint

A quick way to confirm the header is being applied correctly is to POST an empty payload and inspect the status code:

How span content maps to Trace records

When a span becomes a Trace record — whether it enriches an existing inference result or is assembled into a production conversation — its input and output are filled per field, using the first source that provides a value:
  1. galtea.trace.* explicit attributes — full control, always wins.
  2. gen_ai.* GenAI semantic conventions — the OpenTelemetry standard for LLM telemetry.
  3. Recognized managed-platform span shapes — platform-specific formats Galtea knows.
If you set no attributes, spans are still ingested.
These OTel fields are mapped automatically for every span, whichever source above you use:
  • span.namename
  • startTimeUnixNano / endTimeUnixNanostartTime / endTime + latencyMs (computed)
  • span.statuserror (fallback when galtea.trace.error is not set; only for STATUS_CODE_ERROR)
  • parentSpanIdparentTraceId (parent-child hierarchy)
All remaining unmapped span attributes are collected into the metadata field, so no data is lost.
Retrieval context (RAG): to record what your system retrieved, type a span as RETRIEVER and put the retrieved data in its output (for example via galtea.trace.output). This is the convention Galtea will use to read retrieval context from traces (that reader arrives in a later release), and the output has no required shape.
Some common instrumentation styles do not populate input/output yet: Traceloop / OpenLLMetry (gen_ai.prompt.0.content-style flattened attributes) and OpenInference (input.value). Their data is still stored in the trace’s metadata field, so nothing is lost, but evaluations that read the trace input and output will not see it.

Learn More

Monitor Real User Traffic via OpenTelemetry

Turn your live traffic’s traces into production sessions that Monitors evaluate.

W3C Trace Context Propagation

Attach OTel spans to the test runs Galtea triggers via Direct Inference.