Skip to main content

Send OpenTelemetry traces

POST 

/api/ingest/otlp/v1/traces

An OTLP/HTTP trace receiver. Point an OpenTelemetry or OpenLIT exporter at this exact URL (set it as the traces endpoint, so the exporter does not append anything) and send the header X-Ingest-Token.

Send protobuf (application/x-protobuf) or JSON (application/json); the response uses the same encoding. Gzip is accepted with Content-Encoding: gzip. Limits: 1 MB per request (compressed and decompressed) and 600 spans per minute per token. The token must be bound to a telemetry source of kind otel.

What is mapped. An LLM span (gen_ai.operation.name of chat, text_completion, completion, generate_content or embeddings) becomes an llm.call event. A tool span (gen_ai.operation.name of execute_tool, or a span with gen_ai.tool.name) becomes a tool.invocation event. Every other span is dropped silently; that is not an error.

What is read. Only a fixed allow-list of attributes: provider (gen_ai.provider.name or gen_ai.system), model (gen_ai.response.model or gen_ai.request.model), token counts (gen_ai.usage.input_tokens or gen_ai.usage.prompt_tokens, and gen_ai.usage.output_tokens or gen_ai.usage.completion_tokens), error status, agent (gen_ai.agent.name, else service.name), tool (gen_ai.tool.name) and bairav.trace_id. Prompts, completions, messages, system instructions and tool arguments are never read or stored, even if your exporter sends them. Cost estimates from the sender are ignored; Bairav prices usage from its own catalogue.

A bad span is counted in partialSuccess.rejectedSpans; it never fails the whole request. The same span sent twice is one event.

Request​

Responses​

An OTLP ExportTraceServiceResponse, in the same encoding as the request.