Skip to main content
Every answer here is short on purpose and links to the page that carries the detail. Where the honest answer is “not yet” or “we do not publish that”, it says so rather than being left out.

Getting started

Two settings: the base URL and the key. Then one edit that is not optional, which is putting a provider in front of every model id. See Migrate from OpenAI.
A bare id such as gpt-4o-mini is not a Hopscotch model id. Ids name the provider that serves them, so it is openai/gpt-4o-mini. A bare id is refused with 400 and the code model_id_not_pinned rather than being routed to whichever provider we happen to carry it under. See Models.
Ask GET /v1/models, or browse the Models screen in the dashboard. This site publishes no model list, because any list written here would be wrong the first time the catalog changed.
POST /v1/chat/completions, GET /v1/models and GET /v1/models/{id}. Those are the operations this site documents and the API reference publishes. A path this site does not document is one we make no promise about, in either direction. See OpenAI compatibility.
The instructions on this site set only the base URL and the key, which is the whole intended change. We have not published a proof run of an unmodified SDK against the production hostname, so we describe that as instructions rather than as a certification.

Features

Yes, as OpenAI defines it. tools, tool_choice and the tool_calls that come back all travel unchanged, streamed and not. Nothing is executed on our side. See Tool calling.
Yes, both forms, forwarded as written, except that an Anthropic model takes only json_schema, translated into Anthropic’s own setting, and refuses json_object with a 400. Nothing here validates your schema or the reply against it. See Structured outputs.
Yes, in OpenAI’s message-part shape, to a model that takes one. See Image inputs.
Every catalog entry carries five capability words, each answering yes, no or unknown. Read unknown as “nobody has established this” rather than as “no”. See Model capabilities.
Provider prompt caching passes through unchanged, and the cached-token counts come back separately and are priced as their own kind. There is nothing of ours to enable. See Prompt caching.
Yes, with a routing profile: your own ordered list of provider/model lines, requested as profile/{identifier} in the model field. See Routing profiles.
That is what a model id is. The part before the first slash names the provider, and we never substitute a different one behind your back. A model carried by two providers is two ids with two prices.
Not yet. Embeddings are not served, and we have no date to give. A call to POST /v1/embeddings is refused with a 404 not_found_error. POST /v1/completions, the legacy text completion body, is a separate matter; see Completions and embeddings.
New models from supported providers are usually added within a few days of public availability. That is a usual pace, not a promise. GET /v1/models is always current, so ask it rather than assuming. See Models.
Yes. POST /v1/messages takes the Anthropic Messages body and reads the key from either x-api-key or Authorization: Bearer, so the Anthropic SDKs work with two settings changed. Refusals that come from us are shaped as the OpenAI error envelope, which is the one departure. See Anthropic Messages API.
Attach a guardrail to it. A guardrail is a named rule set the workspace creates once and attaches to any number of keys: a spend cap per day, week or month, a zero-data-retention requirement, and prompt checks for email addresses, IP addresses and credentials. See Guardrails.
The endpoints are built and are not open in production yet. A call to any of them answers 404 with the code endpoint_not_supported and nothing is charged. Images, audio and video says what is coming and how it will be priced.

Billing and credits

No. A request deducts the provider’s rate at face value. The platform fee is added when you buy credit, not when you spend it. See Credits and billing.
Your account cannot pay for it. Either the balance is empty, or a ceiling somebody set has been reached. The code says which. Nothing is charged for the refusal. See Errors.
rate_limit_exceeded is your key’s request rate, and it carries Retry-After. spend_rate_exceeded is your account spend rate cap, which also carries Retry-After, and the lever for it is sending max_tokens. See Rate limits and spend controls.
Credit is held against a ceiling while a request runs. With no max_tokens the ceiling is the model’s published maximum output, so the request occupies more of your spend rate cap while it is in flight. The hold comes back in full at settlement either way. See Request parameters.
On the Activity screen, one row per request. The usage record is the authority on what a request cost, not a rate in the catalog. The usage.estimated_cost in a response body is the provider’s own estimate, passed through. It is not what Hopscotch charges. See View activity.
Yes, for a provider we already serve. Your key then answers every request to that provider and the provider bills you directly. It does not add models to your catalog. See Bring your own key.

Data and operations

No. What is recorded is metadata about a request: what was called, what it cost, how long it took, what happened. Never the content. See Data and privacy.
No. We keep only a hash of it, so it cannot be shown again or recovered. Replace it. See Authentication.
They are not forwarded, because they describe a pool we hold rather than a limit that applies to you. Your own limit is reported on the x-uniblock-ratelimit-requests-limit, -remaining and -reset headers and, once exceeded, as a 429 code you can branch on. See Headers.
The request id. It is on every response on x-hopscotch-request-id and on x-request-id, and inside every error body as request_id. Quote it rather than describing the symptom.
No. No figure for availability, for throughput, or for the latency the hop adds has been measured here in a way we are willing to publish, so this site claims none.
There is no version to pin beyond the /v1 in the path. The surface grows by addition, and the error envelope is the stable contract. See API reference.