# Exports & OpenTelemetry

> Retrieve INFRO request and usage data through the public APIs, or send metadata spans to your own collector with OpenTelemetry on eligible plans.

Source: https://infro.io/docs/observability/exports

> **Note:** INFRO is in private early access. Running these examples requires an early-access account, an active trial or subscription entitlement, and your own provider connection. Self-serve purchasing is not generally open. See [Early access](https://infro.io/early-access).

You can retrieve request records and usage aggregates through the public APIs, download them as CSV, and export cost and usage as a [FOCUS v1.4 dataset](https://infro.io/docs/observability/focus-export) in JSON or CSV. OpenTelemetry trace delivery is included on Team, Business and Enterprise. Scheduled or emailed exports and a `/v1/exports` job endpoint are not currently available.

## Export through the APIs

- Use `GET /v1/requests/export` for one request per row as CSV, up to 50,000 rows per file, with the same filters as the list. See [Request traces](https://infro.io/docs/observability/traces#export-requests-as-csv) for the columns.
- Use `GET /v1/requests` and page with `after` using each response's `next_cursor`. Keep a stable time range and filters during pagination.
- Use `GET /v1/usage` with time windows to retrieve aggregate data, as JSON or, with `format=csv`, as a file.
- Use `GET /v1/usage/focus` for a [FOCUS Cost and Usage dataset](https://infro.io/docs/observability/focus-export) your FinOps platform can ingest directly, as JSON or CSV, with per-project, per-key and per-tag attribution.
- Export within your plan's queryable history window. Review metadata before sharing it; custom tags or user identifiers may contain personal information.

## OpenTelemetry

Configure the collector endpoint and authentication headers in the console on an eligible plan. INFRO sends OTLP/HTTP protobuf traces to the collector's `/v1/traces` endpoint. Collector credentials are encrypted separately from request metadata.

Spans contain operational metadata such as request ID, model, route, timing, token counts and estimated cost, plus configured request metadata. Optional prompt and response captures are not included. The service name is `infro-gateway`. When [guardrails](https://infro.io/docs/features/guardrails) acted on a request, its span also carries `infro.guardrail.action` and one `infro.guardrail.<detector>` attribute holding that detector's count, never the matched text.

Chat completion spans also carry `infro.cache.status` (`hit`, `miss`, `bypass`, `uncacheable` or `disabled`) from the [response cache](https://infro.io/docs/features/caching).

## Delivery and retention

Trace delivery is best effort and occurs outside the response path. A server error or network failure gets one retry; a `4xx` from your collector is not retried, because it is a configuration error. Persistent failure drops the spans rather than blocking application requests. Your collector determines its own storage and retention. Do not use this channel as the sole accounting record.

Developer includes 7 days of queryable history, Startup 14, Team 30, Business 90 and Enterprise 365. The API reports the applied window. Optional payload logging is a separate opt-in with plan limits; see [Privacy](https://infro.io/docs/privacy).

See [Request traces](https://infro.io/docs/observability/traces) and [Usage analytics](https://infro.io/docs/observability/analytics) for the current API filters and response fields.
