Arize AX cloud support is on the roadmap. AX’s
/v2/spans REST endpoint indexes 15–30 minutes after OTLP ingest, which doesn’t fit Coval’s per-simulation 90-second import window. AX support will land alongside a delayed-retry worker. For now, Coval imports from Phoenix (which exposes spans the moment they land).How it works
- Your agent sends spans to Phoenix as it does today.
- When a Coval simulation finishes, Coval fetches the spans that fall inside the simulation’s time window via
GET /v1/projects/{project}/spans/otlpv1. - Spans are normalized to OpenTelemetry shape and written to the same ClickHouse-backed trace store that native OTLP ingestion uses.
- The trace viewer, trace metrics, and transition heatmap work against the imported spans exactly as they do for native OTLP traces.
service.name = arize so they are easy to distinguish in the trace viewer.
Prerequisites
- A Coval account (sign up)
- A self-hosted Phoenix deployment reachable from Coval’s workers, or a Phoenix Cloud account, with a project name you write spans to
Connect Phoenix
- Open Settings → Integrations in Coval.
- Expand the Arize Integration panel.
- Fill in the required fields and save.
| Field | Required | Notes |
|---|---|---|
| Phoenix Host | Yes | e.g. https://app.phoenix.arize.com for Phoenix Cloud, or your self-hosted base URL. |
| Project Name | Yes | The Phoenix project name your agent writes to. |
| API Key | Optional | Required for Phoenix Cloud, ignored for unauthenticated self-hosted Phoenix. |
Coval stores the API key server-side and never returns it to the browser. To rotate the key, use the Replace key button in the credentials card.
Correlation
To tie spans back to the right Coval simulation, Coval matches span attributes on any of:simulation_output_idsession_idsession.idcoval_simulation_output_id
metadata span attribute as JSON when present and matches the same keys inside it. If your agent already sets a session ID equal to the Coval simulation output ID, import is precise — otherwise, set one of the keys above so imports stay correct under concurrent calls.
Both Arize OpenInference SDKs and the OpenTelemetry SDK make this trivial — just set the attribute on your root span.
Coval fails closed when a correlation hint is set but no spans match — it returns an empty result rather than importing every span in the time window. This avoids cross-contamination between concurrent simulations on the same project.
Verify spans landed
After a simulation finishes, open the result in Coval and click View Traces. Imported spans appear withservice.name = arize and the original Phoenix / OpenInference attributes preserved.
LLM spans are normalized to span_name = "llm" (matching Coval’s native metric queries) regardless of the original Phoenix span name. Coval also aliases the common Arize / OpenInference token-count attributes to OTel GenAI semantic conventions:
| Arize / OpenInference | OTel GenAI alias |
|---|---|
llm.token_count.prompt | gen_ai.usage.input_tokens |
llm.token_count.completion | gen_ai.usage.output_tokens |
input.value | input |
output.value | output |
Limits
- Import runs once per simulation, synchronously, with a 90-second budget that includes a brief retry-on-empty so spans flushed slightly after the simulation ends are still picked up.
- Up to 5,000 spans per simulation are imported (1,000/page × 5 pages).
- If a simulation already has native OTLP traces, the import is skipped to avoid duplicate spans.
- Self-hosted Phoenix must be reachable from Coval’s workers. If your Phoenix instance lives behind a private network, expose it via a public ingress.
Troubleshooting
| Symptom | Likely cause |
|---|---|
| No spans in the viewer, correct time window | Check the Arize Integration card in Settings. If the Configured chip is missing, re-save the credentials. Confirm the Project Name matches what your agent writes to. |
| Spans appear in Phoenix but not in Coval | Set simulation_output_id (or session_id / session.id) on your root span — see Correlation above. |
401 Unauthorized in logs | API key was rotated. Click Replace key in Settings. |
Connection refused to a self-hosted Phoenix | Phoenix isn’t publicly reachable from Coval’s workers. Expose Phoenix on a routable URL. |
See also
- OpenTelemetry Traces — push traces directly to Coval.
- Import Traces from Langfuse — same flow, Langfuse source.
- Coval Wizard (Beta) — auto-instrument Pipecat/LiveKit/Vapi agents.

