Skip to main content

OpenTelemetry

Fact0 is OpenTelemetry native. Any application that exports OTLP traces can send them to Fact0 with zero code changes - just set two environment variables.
Fact0 accepts both OTLP/gRPC (port 4317) and OTLP/HTTP. GenAI semantic conventions are automatically enriched into structured model invocation details.

Quick start

1. Configure your OTel SDK

Set the OTLP exporter to point at your Fact0 API:
That’s it. Your existing OTel instrumentation starts flowing into Fact0 immediately.

2. Python example

3. OTel Collector config

If you run an OTel Collector, add Fact0 as an exporter:

How it works

Automatic translation

Fact0 translates OTel traces into its native domain model:

Smart span classification

Fact0 automatically classifies spans based on OTel semantic conventions:

GenAI enrichment

When GenAI semantic conventions are present, Fact0 extracts structured details:
  • Model info: gen_ai.system, gen_ai.request.model
  • Token usage: gen_ai.usage.prompt_tokens, gen_ai.usage.completion_tokens
  • Parameters: gen_ai.request.temperature, gen_ai.request.max_tokens
  • Prompts/completions: Extracted from gen_ai.content.prompt and gen_ai.content.completion span events

Exception enrichment

OTel exception events (exception.type, exception.message, exception.stacktrace) are automatically extracted into Fact0’s error detail panel with full stack traces.

Custom span types

You can explicitly set the Fact0 span type using a custom attribute:
Supported values: TOOL_CALL, MODEL_INVOCATION, STATE_MUTATION, HUMAN_APPROVAL, POLICY_EVALUATION.

OTel vs Fact0 SDK

Start with OTel in 30 seconds. Graduate to the Fact0 SDK when you need governance-grade audit trails that OTel can’t express.