Export and endpoints
Reference for getting trace data out of Observe — exporting the current view, the available formats, and the OTLP endpoints traces are sent to (cloud and self-hosted).
About
There are two directions for trace data: out of Observe (exporting what you’re viewing) and into Observe (the OTLP endpoints traceAI sends to). This page covers both.
Export from the trace explorer
The download icon in the trace explorer header exports the current view — the traces that match your active filters and time range.
CSV is the only export format. There is no JSON or Parquet download from the trace explorer.
| Format | Use for |
|---|---|
| CSV | Spreadsheet analysis, sharing, importing elsewhere. |
The CSV holds one row per span in the current view, with the columns the explorer shows: trace ID, span name, status, model, provider, latency, token counts, cost, timestamp, and any eval scores present on the span.
Note
The export reflects the current view, so a very large view may be truncated. Narrow the filters or time range to export a complete slice.
Ingestion endpoints
traceAI exports spans over OTLP to FutureAGI. The transport and target are environment-driven:
| Variable | Transport | Default |
|---|---|---|
FI_BASE_URL | HTTP collector | FutureAGI cloud collector |
FI_GRPC_URL | gRPC collector | FutureAGI cloud collector |
When unset, both variables default to the FutureAGI cloud collector, so a cloud project needs no endpoint configuration — only FI_API_KEY and FI_SECRET_KEY.
- Cloud: leave the defaults; set
FI_API_KEYandFI_SECRET_KEY. - Self-hosted: point
FI_BASE_URL/FI_GRPC_URLat your own collector host so spans stay in your network.
Choose the transport with transport=Transport.HTTP (default) or Transport.GRPC in register(). See Set up tracing.
Endpoint contract
The ingestion endpoint is an OTLP/traces receiver — you don’t call it directly; the traceAI SDK’s exporter does. The contract:
| Aspect | Detail |
|---|---|
| Protocol | OTLP over HTTP (protobuf) or gRPC — the OpenTelemetry standard, not a proprietary API. |
| Operation | Export spans (write-only). There is no read/query endpoint; reading happens in the trace explorer. |
| Auth | FI_API_KEY + FI_SECRET_KEY from the keys page, sent by the SDK on every export. Keys are workspace-scoped. |
| Success | The exporter batches spans and sends them in the background; a successful export returns no payload. Spans appear in Observe within seconds. |
| Errors | A 401 means the keys are wrong for this workspace; a 4xx means a malformed/oversized batch; transient 5xx/network errors are retried by the batch exporter. |
| Limits | Spans are sent by the batch span processor on an interval, so a short-lived process must call trace_provider.force_flush() before exit or the last batch is lost. Very large payloads (huge prompts/outputs) can be dropped: cap attribute size or mask them at the SDK. Future AGI Cloud accepts OTLP requests up to 16 MiB over HTTP or gRPC. See Ingestion request limits. |
| Versioning | Pin fi-instrumentation-otel and each instrumentor to a tested version so a release can’t change span shape under you; the wire format follows the OTLP version the SDK ships. |
Ingestion request limits
Future AGI Cloud enforces the same supported request limit for both OTLP transports:
| Transport | Maximum request size | Error when exceeded |
|---|---|---|
| OTLP/HTTP | 16 MiB | 413 Request Entity Too Large |
| OTLP/gRPC | 16 MiB | RESOURCE_EXHAUSTED |
An oversized request is rejected as a whole and its spans are not stored. If you see either error in your exporter logs, reduce the number of spans sent in each batch. OpenTelemetry’s default maximum export batch size is 512 spans. Start with:
OTEL_BSP_MAX_EXPORT_BATCH_SIZE=256
Note
These limits apply to Future AGI Cloud. For a self-hosted deployment, the configured collector and proxy limits apply.
Warning
Span input and output can carry customer data before they leave your process. Redact at the SDK with TraceConfig or the FI_HIDE_* variables — see Mask span attributes.
Related
Questions & Discussion