NullSpend Docs

Migrating from Helicone to NullSpend

Migrating from Helicone to NullSpend documentation

Helicone was acquired by Mintlify on March 3, 2026 and is entering maintenance mode. If you're one of the 16,000 organizations on Helicone, this guide shows you how to migrate to NullSpend in under 5 minutes.

Why migrate now

  • Helicone is in maintenance mode. No new features, bug fixes are best-effort, and there's no public timeline for how long the service stays up.
  • Your cost data will become inaccessible. Helicone hasn't announced a data export tool or retention commitment post-acquisition.
  • The integration model is identical. Both Helicone and NullSpend use the same pattern: change your base URL. Migration is literally swapping one URL for another.

The migration: one line change

Helicone (before)

OPENAI_BASE_URL=https://oai.helicone.ai/v1
HELICONE_API_KEY=sk-helicone-...

NullSpend (after)

OPENAI_BASE_URL=https://proxy.nullspend.dev/v1
# Remove HELICONE_API_KEY — not needed

Add the NullSpend authentication header to your client:

const client = new OpenAI({
  baseURL: "https://proxy.nullspend.dev/v1",
  defaultHeaders: {
    "X-NullSpend-Key": process.env.NULLSPEND_API_KEY,
  },
});

That's it. Your existing code, streaming, error handling — everything else stays the same.

For Anthropic

# Helicone (before)
ANTHROPIC_BASE_URL=https://anthropic.helicone.ai

# NullSpend (after)
ANTHROPIC_BASE_URL=https://proxy.nullspend.dev

Feature mapping

Helicone featureNullSpend equivalentNotes
Request loggingCost event loggingAutomatic — every request is logged
Cost trackingCost trackingPer-request, per-model, per-key breakdown
DashboardAnalytics dashboardDaily spend, model breakdown, provider breakdown
Custom propertiesTagsX-NullSpend-Tags header — JSON object with up to 10 key-value pairs for cost attribution
AlertsBudget enforcement + WebhooksHard stops (not just alerts) + 15 webhook event types with HMAC-SHA256 signing
CachingNot yet supported (roadmap)
Rate limitingBudget enforcement + Velocity limitsBudget ceilings + velocity limits detect runaway loops by spend rate
User trackingAPI key tracking + Session limitsTrack costs per key, plus per-conversation spend caps via X-NullSpend-Session
Prompt templatesNot supported (out of scope)
W3C traceparentAutomatic traceparent/tracestate propagation to upstream providers

What NullSpend adds that Helicone didn't have

Hard budget enforcement

Helicone could alert you when costs got high. NullSpend blocks requests when a budget ceiling is hit. No soft limits — the proxy returns 429 and the request never reaches the LLM provider. You don't get charged for blocked requests.

Multi-provider unified dashboard

See OpenAI and Anthropic costs in a single dashboard with provider breakdown charts. Helicone supported multiple providers but the experience was fragmented.

Identity-based enforcement

Budget enforcement is tied to API keys on the server side. There's no client-side header that can be spoofed or omitted to bypass the budget. This was a known issue with Helicone's header-based approach.

Tags for cost attribution

Helicone had custom properties. NullSpend has tags — attach a JSON object via the X-NullSpend-Tags header to attribute costs to teams, environments, features, or anything else. Up to 10 keys per request, queryable in the dashboard.

Velocity limits

Detect runaway agent loops automatically. Set a spend-rate threshold (e.g., "$5 in 60 seconds") and the proxy blocks requests when the rate is exceeded. Helicone had no equivalent.

Session limits

Cap spend per conversation with the X-NullSpend-Session header. When a session's cumulative spend hits the limit, the proxy returns 429. Useful for chat-based agents where each conversation should have a budget.

Webhooks

15 event types with HMAC-SHA256 signed payloads: cost events, budget exceeded, threshold crossings, velocity alerts, budget resets, blocked requests, and more. Supports both full and thin (Stripe v2 pattern) payload modes. See Webhooks. Helicone had no webhook support.

W3C traceparent propagation

The proxy automatically forwards traceparent and tracestate headers to upstream providers, integrating with your existing distributed tracing infrastructure.

Step-by-step migration

1. Sign up for NullSpend

Go to nullspend.dev/signup and create an account.

2. Create an API key

In the dashboard, go to SettingsCreate API Key. Copy the API key (starts with ns_live_sk_).

Go to BudgetsCreate Budget. Set a spending ceiling based on your current Helicone cost data. Start generous — you can tighten later.

4. Update your environment variables

Replace your Helicone base URL with the NullSpend proxy URL. Add the X-NullSpend-Key header to your client configuration.

5. Remove Helicone dependencies

# Remove the Helicone package if you installed it
npm uninstall @helicone/helicone
# or
pip uninstall helicone

Remove any Helicone-specific headers from your code:

// Remove these:
// "Helicone-Auth": "Bearer sk-helicone-..."
// "Helicone-Property-*": ...
// "Helicone-Cache-Enabled": ...

6. Deploy and verify

Deploy your updated application. Check the NullSpend dashboard — cost events should appear within seconds of your first LLM call.

Pricing comparison

FeatureHelicone (was)NullSpend
Free tier10K logs, 3-day retention$5K/mo proxied spend, 3 budgets, 3 team members, 30-day retention
Budget enforcementAlerts onlyHard enforcement (all tiers)
Starting paid tier$20/mo (limited)$49/mo (unlimited budgets/keys/members, 90-day retention)

FAQ

Will my Helicone data be lost? Helicone hasn't announced data export or retention guarantees. We recommend exporting any critical data from Helicone's dashboard before migrating.

Can I run both Helicone and NullSpend simultaneously? Not easily — both require changing the base URL, and you can only point at one proxy at a time. However, you could route some traffic to each by using different API keys with different base URLs.

How long does migration take? The actual code change takes under 5 minutes. It's one environment variable swap and adding the auth header.

What if I was using Helicone's caching? NullSpend doesn't support response caching yet. If you relied on Helicone's cache, you'll need to implement caching at the application level or wait for our caching feature (on the roadmap).

What about Helicone's custom properties? Use tags — add the X-NullSpend-Tags header with a JSON object to attribute costs by team, environment, feature, or any custom dimension. You can also segment by API key (one key per agent or user).

On this page