Migrate from Helicone

Move your Helicone traffic to CoreValue: change the base URL and key, rename your Helicone-* headers to Cova-*, and get budgets that stop spend instead of reporting it.

Helicone was acquired by Mintlify in March 2026 and is in maintenance mode. If you route traffic through Helicone today, moving to CoreValue is mostly a rename: both are a proxy you reach by changing a base URL, and most Helicone-* headers have a Cova-* header with the same name and meaning.

What you gain is control as well as visibility. Helicone tells you what you spent. CoreValue also checks every request against your budgets before it reaches the provider, and can stop or downgrade it when a budget has run out.

What changes

HeliconeCoreValue
OpenAI-compatible base URLhttps://oai.helicone.ai/v1https://gateway.corevalue.dev/v1
Anthropic base URLhttps://anthropic.helicone.aihttps://gateway.corevalue.dev
Your provider keySent by your app on every requestStored once in CoreValue, encrypted. Your app never sends it.
Your proxy keyHelicone-Auth: Bearer sk-helicone-…The SDK's normal API key field, set to your sk-cova-… key

The provider key is the one real change in shape. With Helicone your app holds the OpenAI or Anthropic key and adds a second header for Helicone. With CoreValue you add the provider key in the console, and your app sends only the CoreValue key. One secret leaves your application instead of two.

Migrate in five steps

Add your provider keys to CoreValue

Sign in at app.corevalue.dev. In the top bar, click Gateway, then Provider keys, and add a key for each provider you call through Helicone. See Provider keys.

Create a CoreValue API key

Click Governance, then Keys, then Generate API key. Copy the sk-cova-… key: it is shown once. If you used separate Helicone keys per service or environment, create one CoreValue key for each, so their spend stays separate.

Change the base URL and key

from openai import OpenAI

# Before
client = OpenAI(
    api_key=os.environ["OPENAI_API_KEY"],
    base_url="https://oai.helicone.ai/v1",
    default_headers={"Helicone-Auth": f"Bearer {os.environ['HELICONE_API_KEY']}"},
)

# After
client = OpenAI(
    api_key=os.environ["COVA_API_KEY"],
    base_url="https://gateway.corevalue.dev/v1",
)
import OpenAI from "openai";

// Before
const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL: "https://oai.helicone.ai/v1",
  defaultHeaders: { "Helicone-Auth": `Bearer ${process.env.HELICONE_API_KEY}` },
});

// After
const client = new OpenAI({
  apiKey: process.env.COVA_API_KEY,
  baseURL: "https://gateway.corevalue.dev/v1",
});
from anthropic import Anthropic

# Before
client = Anthropic(
    api_key=os.environ["ANTHROPIC_API_KEY"],
    base_url="https://anthropic.helicone.ai",
    default_headers={"Helicone-Auth": f"Bearer {os.environ['HELICONE_API_KEY']}"},
)

# After
client = Anthropic(
    api_key=os.environ["COVA_API_KEY"],
    base_url="https://gateway.corevalue.dev",
)

If you only set environment variables, the change is two lines:

# Before
OPENAI_BASE_URL=https://oai.helicone.ai/v1
# After
OPENAI_BASE_URL=https://gateway.corevalue.dev/v1
OPENAI_API_KEY=sk-cova-…

Rename your Helicone headers

Replace the Helicone- prefix with Cova- for every header in the first table below. Remove Helicone-Auth. Then check the second table for the few headers that work differently.

Send a request and check it in the console

Send one request, then open Requests in the console. You should see it with its model, provider, cost and every property you sent. Each response also carries Cova-Id and Cova-Request-Cost headers, so you can confirm from code. See Response headers.

Header mapping

Same name, same meaning

HeliconeCoreValue
Helicone-Property-{Name}Cova-Property-{Name}
Helicone-User-IdCova-User-Id
Helicone-Session-IdCova-Session-Id
Helicone-Session-NameCova-Session-Name
Helicone-Session-PathCova-Session-Path
Helicone-Prompt-IdCova-Prompt-Id
Helicone-Cache-EnabledCova-Cache-Enabled
Helicone-Cache-Bucket-Max-SizeCova-Cache-Bucket-Max-Size
Helicone-Cache-SeedCova-Cache-Seed
Cache-ControlCache-Control (unchanged)
Helicone-RateLimit-PolicyCova-RateLimit-Policy, same syntax: 100;w=60;u=request;s=user

If you used a custom property to label customers, features or teams, for example Helicone-Property-Customer, send it as Cova-Customer-Id, Cova-Feature-Id or Cova-Team-Id instead. These three get their own columns, so cost groups by customer, feature or team on the reports and budgets can be set on them. A Cova-Property-* header is recorded, but it is not a budget scope.

Works differently

HeliconeIn CoreValue
Helicone-AuthRemove it. The CoreValue key goes in the SDK's API key field.
Helicone-FallbacksCova-Fallbacks takes a JSON array of model names, tried in order, for example ["groq/llama-3.3-70b-versatile", "gpt-4o-mini"]. Helicone took target URLs. Prefixed names need the /gateway/v1 base URL (see below). See Fallbacks.
Helicone-Target-URL, Helicone-OpenAI-Api-BaseNot needed. Use the base URL https://gateway.corevalue.dev/gateway/v1 and choose the provider with a model prefix, such as groq/llama-3.3-70b-versatile. On the plain /v1 base URL, prefixes are not read and requests go to OpenAI. Azure base URIs and deployments are set on the provider key. See Other providers.
Helicone-Retry-Enabled and the helicone-retry-* headersRetries are set on the gateway, not per request. X-Cova-Retry-Count tells you how many were made.
Helicone-LLM-Security-Enabled, Helicone-Moderations-EnabledSet as an organisation policy in the console, not per request. See Guardrails.
Helicone-Model-OverrideNot supported. Cost is computed from the model that actually served the request.
Helicone-Request-IdNot read. The gateway assigns Cova-Id to every request.
Helicone-Omit-Request, Helicone-Omit-ResponseNot per request. See Request storage for what is kept.
Helicone-Posthog-Key, Helicone-Posthog-HostNot supported. To send request events to your own systems, use Webhooks.
Helicone-Token-Limit-Exception-Handler, Helicone-Stream-Force-FormatNot supported.

Requests that share a Cova-Session-Id appear together on the console's Runs page, which is where Helicone's Sessions view went.

Response headers follow the same rename: Helicone-Id becomes Cova-Id, and Helicone-Cache becomes Cova-Cache.

What you get that Helicone did not have

  • Budgets that act. Set a monthly budget on the organisation, a team, a member, a customer or a key. When it runs out, CoreValue refuses the request with HTTP 429, or, for organisation and team budgets, downgrades it to a cheaper model. Alerts work on every plan; refusing and downgrading need the Growth plan. See Budgets and limits.
  • Chargeback and unit economics. Monthly spend per team for finance, and cost and margin per customer. See Chargeback and Unit economics.
  • MCP and agent traffic. Tool calls to MCP servers and calls between agents go through the same gateway, with access rules on who may call what. See MCP gateway.
  • Roles, SSO and an audit log for the console. See Roles.

Before you switch

  • History stays in Helicone. CoreValue starts counting from your first request through the gateway. Export anything you need from Helicone first.
  • Run both for a while if you want to compare. Point one service or one environment at CoreValue and leave the rest on Helicone until the numbers match what you expect.
  • Prompt templates managed in Helicone do not move over. Keep the prompt text in your code, and send Cova-Prompt-Id to group requests by prompt.

Stuck on a header that is not listed here? Tell us at support@corevalue.dev.

On this page