Migrate

Moving from Helicone to Traza

On 3 March 2026 Helicone announced it had joined Mintlify. Its services remain live in maintenance mode, with security updates, new models and bug and performance fixes still shipping. If you are planning a move anyway, this is what moving to Traza involves.

Last checked October 17, 2026

The one real difference

Helicone sits in the request path. Traza does not.

Helicone logs your model calls by proxying them: you point the SDK’s base URL at Helicone and add a Helicone-Auth header. Traza records spans your application exports with OpenTelemetry, so your SDK talks to the provider directly and Traza never sees a request it could slow down or drop.

That also means Traza does not do what a gateway does: response caching, provider fallbacks, request rate limiting. If you rely on those, keep a gateway for them and record behind it.

Before: logging through the proxy
client = OpenAI(
    base_url="https://oai.helicone.ai/v1",
    default_headers={
        "Helicone-Auth": f"Bearer {HELICONE_API_KEY}",
        "Helicone-Session-Id": session_id,
        "Helicone-Property-Environment": "staging",
    },
)
After: OpenLLMetry exporting to Traza Cloud
# TRACELOOP_BASE_URL=https://api.trazadb.com
# TRACELOOP_HEADERS="Authorization=Bearer%20$TRAZA_API_KEY"
from openai import OpenAI
from traceloop.sdk import Traceloop

Traceloop.init(app_name="support-agent")
Traceloop.set_association_properties({"session_id": session_id, "environment": "staging"})

client = OpenAI()  # straight to the provider

Where each Helicone header goes

Helicone header names are from its documentation as of October 17, 2026.

HeliconeTraza
base_url = Helicone, Helicone-AuthThe provider’s own base URL. The exporter carries a Traza API key with the ingest scope.
Helicone-Session-Idsession.id, or OpenLLMetry’s session_id association property. Traza groups a run by it, and Guard and Replay act per run.
Helicone-Session-Path, -Session-NameParent and child spans give the tree; OpenLLMetry’s workflow and task names label it.
Helicone-Property-[Name]Any span attribute. Every attribute is stored and filterable with attr.<key>=.
Helicone-User-IdAn attribute such as user_id, filterable the same way.
Cost and token dashboardsSession, model, provider and service rollups of tokens; cost where spans carry it.
Caching, fallbacks, rate limitsNot provided: Traza is not a gateway.

A cutover you can run in parallel

Because Traza is not a proxy, you can export to it while Helicone keeps logging, compare a few days of sessions, then remove the proxy. Nothing has to switch at once.

  1. Create a project and an ingest key in the console. The key is shown once.

  2. Add OpenLLMetry (or any OpenTelemetry GenAI instrumentation) and point it at api.trazadb.com with the key, as above. Set a session id on every span of a run.

  3. Watch both for a few days. Sessions, models and token counts appear in Traza without any attribute mapping.

  4. Remove the Helicone base URL and headers. Your SDK now calls the provider directly.

  5. Then use what a proxy log could not do: a run fuse on the session, a replay of a bad run against your fix.

Your history

Traza has no importer for Helicone’s logs. If you export them, each logged request maps naturally to one span, and the engine’s native JSON ingest takes batches of spans in the shape described in its data model. Whatever you bring over counts toward your plan like any other span.

Going the other way stays easy too: export from Traza is always on, on every plan, with no fee.