70% smaller bill on this request.
Point your client at our proxy and add one header. Your provider key still goes to your provider.
Old, wordy turns get frozen into a checkpoint and rewritten tight once - every later request just replays that checkpoint byte-for-byte, which is also why your provider's own cache never sees a reason to miss. Your code, JSON, IDs, and recent turns come through exactly as written.
The provider bills the shorter prompt, so your bill drops. Flat monthly price means the savings are yours to keep. Streaming and tool calls work like always.
from anthropic import Anthropic client = Anthropic( api_key="sk-ant-...", # your key, forwarded base_url="https://api.promptcrunch.dev", # the only swap default_headers={"X-PromptCrunch-Key": "pc_live_..."}, ) resp = client.messages.create( model="claude-sonnet-4", max_tokens=1024, messages=conversation_history, # long history? we shrink it. )
from openai import OpenAI client = OpenAI( api_key="sk-...", base_url="https://api.promptcrunch.dev/v1", default_headers={"X-PromptCrunch-Key": "pc_live_..."}, ) resp = client.chat.completions.create( model="gpt-5.5", messages=conversation_history, )
import OpenAI from "openai"; const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, baseURL: "https://api.promptcrunch.dev/v1", defaultHeaders: { "X-PromptCrunch-Key": process.env.PROMPTCRUNCH_KEY }, }); const resp = await client.chat.completions.create({ model: "gpt-5.5", messages: conversationHistory, });
curl https://api.promptcrunch.dev/v1/messages \ -H "Authorization: Bearer sk-ant-..." \ -H "X-PromptCrunch-Key: pc_live_..." \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{"model":"claude-sonnet-4","max_tokens":1024,"messages":[...]}'
This is a real 40-prompt run on Claude Sonnet 4.6. Your code, JSON, IDs, system prompts, and latest turns ride through word for word. We only rewrite the old, wordy context, and we keep what it means.
Here's one follow-up turn. The chatty lead-ins and back-references get cut. The real claim and the full stack trace ride through unchanged.
PrismaClientInitializationError:
Can't reach database server at `localhost:5432`
at PrismaClient._engine_initEngine (lib.js:1234)
at PrismaClient._engine_request (lib.js:1289)PrismaClientInitializationError:
Can't reach database server at `localhost:5432`
at PrismaClient._engine_initEngine (lib.js:1234)
at PrismaClient._engine_request (lib.js:1289)Same stack trace, down to the character. Only the dimmed filler got cut: 94 tokens to 68, with no meaning lost.
cache_control rides through untouched, breakpoints intact. Never worse than going direct.Measured across our own multi-model benchmark runs.
If our optimizer ever chokes, your original prompt goes straight to the provider, unchanged. The response carries status: "error", so nothing slips by.
If we're unreachable, your SDK errors like any other network issue. One-line fallback to direct provider URL.
Already using prompt caching? Those requests go straight through, so you keep every cache hit while we crush the bill on everything that grows. Every response shows the original-vs-forwarded token count, so you can see exactly what we saved.
Point one base URL at us and watch a long conversation get cheaper. $5 credit, no card.