Cost and quality in the same call. Every model, one API.
Send hopscotch/auto in a cost tier: low, balanced, or high. Lower is cheaper. Higher is more capable. Name a model and that is what runs.
lattice % export HOPSCOTCH_KEY=sk-hopscotch-7f3a... lattice % curl https://hopscotchlabs.ai/v1/chat/completions \ -H "Authorization: Bearer $HOPSCOTCH_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"anthropic/claude-sonnet-5","messages":[{"role":"user","content":"ship it"}]}' x-hopscotch-model anthropic/claude-sonnet-5 x-hopscotch-hops 1 lattice % ▍
Sonnet first. GPT, then Gemini, if it fails.
- [1]request
- [2]fallback
- [3]fallback
One URL. Every provider.
Point the base URL at Hopscotch. Anthropic, OpenAI, Google, and the rest of the catalog answer on it. Keep the client you already have. There is no new SDK to vendor in.
- Every lab
- Anthropic, Cohere, DeepInfra, DeepSeek, Fireworks AI, Google, Meta, MiniMax, Moonshot AI, OpenAI, Z.ai. One base URL.
- One slug
- Send auto, or name a model. Headers and the log name which upstream served it.
- Your client
- Keep the SDK you already have. Streaming, tools, effort, structured output pass through.
Auto stays in the tier you set.
Send hopscotch/auto and pick a cost tier: low, balanced, or high. Lower is cheaper. Higher is more capable. Auto picks a model inside that band. Name a model instead and that is what runs.
150+ models, across labs, one API. Failover is classified if you write the hops.
Read what happened.
Every call keeps its row: which model answered, how many upstreams it went through to get there, which key signed it, how it ended, and what it drew from the balance. A key carries its own rate and its own limits, so revoking one is a small act rather than an incident.
Keys, the log, and the spend are three views of one question, so they are one page here and three tabs in the product.
Test a model on your prompt, not on a leaderboard.
The playground sends your prompt to any model on your key. Change the model, send the same prompt, and judge the two answers yourself. The response names which model and which upstream answered, so you know what you are judging.
A test spends tokens like any other call, and what it costs is written down: four outcomes, each with a rule, and a ceiling that refuses a call before it spends anything.
- Rejected pre-flight [NO DEBIT]
- Over a ceiling, a cap, the balance, or your TPM. The call is refused before the upstream is touched, so there is no request and nothing to bill.
- Truncated [TOKENS RECEIVED]
- The first content token already flushed when the upstream broke. You get an error frame and pay for what arrived. We do not reroute and charge you twice.
- Client abort [TOKENS RECEIVED]
- Someone hit stop. Billed like any partial answer, and kept out of the error rate so it never flatters or dents reliability.
- Your key, your bill [NOT DEBITED]
- Bring an upstream secret per provider and those tokens never touch the balance. No percentage on top, no monthly allowance to blow through.
▍150+ models, scored across labs.
One slug per model, aliases that outlive a version, and more than one upstream where the weights are open. The catalog is how you compare them: cost, routing performance, and the work each one is for.
Models
- anthropic/claude-sonnet-52.00 in · 10.00 out / 1M
1.0M context · effort
- openai/gpt-5.64.00 in · 20.00 out / 1M
1.0M context · effort
- google/gemini-3.6-flash1.50 in · 7.50 out / 1M
1.0M context
- deepseek/deepseek-v4-flash0.44 in · 1.32 out / 1M
1.0M context · 4 upstreams · effort
- moonshot/kimi-k33.00 in · 15.00 out / 1M
1.0M context · 3 upstreams · effort
- qwen/qwen3.8-max2.00 in · 6.00 out / 1M
1.0M context · 3 upstreams · effort
- anthropic/claude-fable-510.00 in · 50.00 out / 1M
1.0M context · effort
What people ask first.
Short answers.
Do I have to change my code?
One line: the base URL. Anthropic, OpenAI, Google, and the rest of the catalog answer on it. Keep the client you already have. Streaming, tools, effort, and structured output pass through.
How do cost tiers work?
Send hopscotch/auto and pick a cost tier: low, balanced, or high. Lower is cheaper. Higher is more capable. Auto picks a model inside that band. Name a model instead and that is what runs.
Can a model I named be swapped for a cheaper one?
No. A model you named is what runs. If it cannot run, you get an error rather than a stand-in. Auto is the one case where we pick, and it is a slug you send on purpose, hopscotch/auto, inside the cost tier you set.
Do you change my request or the answer?
No. Your system prompt and your messages reach the upstream the way you sent them, and one model answers: we do not blend two responses and hand you the seam.
What happens when a provider fails?
Failover is classified, not guessed. A 429 is retried once on the same route and then treated as capacity; an unavailable provider or a long Retry-After moves on and puts that route on cooldown; a malformed request or a context-length error is never retried, because retrying it would only fail again.
Do you mark up the token price?
No. The catalog price is the upstream price. When that provider serves a cached read, you pay their cached rate. Reasoning tokens bill as completion, which is how the provider charges us for them.
Can I use my own provider keys?
Yes. One upstream secret per provider per project, tried before the shared pool. Tokens spent on your own key are not debited from your balance and carry no percentage on top.
What stops an agent in a loop from draining the balance?
Two limits and a refusal. A ceiling caps what any single call may cost, a cap caps what the project may spend, and a call that would cross either is rejected pre-flight: no upstream request, no ledger debit, and an error your code can catch.
Can I see which model actually answered?
Every response carries the model, the hop count, and the outcome in its headers. The requests log keeps the full attempt chain: which upstream served it, which ones were tried, how each failed, which key signed the call, and which cap it drew from.
Can I pin a model version?
Name the exact slug and you are pinned. Aliases exist so a shorter name survives a version bump, which means pinning is a decision you make rather than one you inherit.
How do I pay?
You buy tokens and spend them at list price. Top up from $10, with optional auto-reload at 20% remaining. No plan. Turn auto-reload off and the balance runs out and tells you.
Do you have an enterprise plan?
No. Same product. Email us for an invoice, a volume commit, or an MSA.
Point your base URL at Hopscotch.
One endpoint, the model you named, and a balance you can read. Sign in and issue a key.