Skip to content

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.

BASE URLhttps://hopscotchlabs.ai/v1
curl
quickstart

Nothing is translated away.

Everything your client can already do keeps working. You name the model. Headers name which upstream answered.

Streaming

Server-sent events in the shape your client already parses. The first content token is also the point after which we stop rerouting.

Tools

Tool and function calls go out as written and come back as written. We do not rewrite arguments to suit an upstream.

Effort

Models that take a reasoning effort take it here, low through max, on the same parameter for every vendor that supports one.

Structured output

Schema-constrained responses pass through to the provider that enforces them, and the response comes back on the same envelope.

Aliases

A short slug points at the current version. Name the exact one instead and you are pinned until you say otherwise.

Errors

One error shape, ours. You never have to special-case an upstream's code to find out what went wrong.

Test against the live endpoint, not a sandbox.

The playground signs with your key, draws on your balance, obeys your caps, and lands in your requests log like anything else. An answer you accept here is an answer you can expect from your own code, because it came back through the same gateway on the same terms.

Nothing in it is a playground-only convenience: every control maps to a parameter you would send yourself, which is what makes the result worth trusting. What it saves you is the round trip through your own code to find out whether a model answers the way you hoped.

console
playground
[FALLBACK]
2 in · 10 out / 1Mnothing run yet
[USER]

[ASSISTANT]

37 models on this key

System prompt

The instruction that ships with every message. Edit it here and watch the shape of the answer move before it is anywhere near your codebase.

Max output tokens

The ceiling on the reply, which is also the ceiling on what the reply can cost you.

Temperature

Set it where the work needs it. The playground sends the same parameter your client would.

Effort

For models that reason, low through max. Reasoning tokens bill as completion, so the dial has a price attached.

Stream

On or off, and the difference matters: once the first content token has flushed, a route can no longer fail over.

models[] fallback

Try the chain from here. Name the order, watch which one answers, then keep it as a route.

Leave with the call you tested.

The panel writes out the request you just made, in the shape your SDK expects. Paste it in and there is no gap between what you tried and what runs.

python
client.chat.completions.create(
    model="anthropic/claude-sonnet-5",
    messages=[
        {"role": "system", "content": "Answer in one paragraph."},
        {"role": "user", "content": "ship it"},
    ],
    max_tokens=1024,
    temperature=0.7,
    stream=True,
)

It tells you where it has been.

The body is the schema you expect. The headers carry what a gateway knows and a provider cannot: which model actually served you, how many hops it took to get there, how the call ended, and what it drew from the balance.

The same four facts are on every row of the requests log, so debugging from a header and debugging from the dashboard are the same exercise.

headers
x-hopscotch-model google/gemini-3.6-flash x-hopscotch-hops 3 x-hopscotch-outcome ok x-hopscotch-spend 0.0412

One URL. Keep going.