Models and providers
How model ids are shaped, what the catalogue publishes, and what this deployment can route.
The catalogue tells you what can be called and on what terms. It is public: the endpoints on this page take no API key, and every response below was fetched without one.
How model ids are shaped
A model id is two segments, author/slug:
impCC/DeepSeek-V4-Flash-0731
The author segment names who publishes the model, the slug names the model. Pass
the whole string, both segments, as model on a completion request — the slug
alone is not an id and will not resolve. Ids are case-sensitive; the author
above really does carry a lowercase i and two capitals.
Some ids carry a colon-suffixed variant, as in author/slug:variant. Ids of that
shape are part of the catalogue format we implement; none is served here today,
because only one model is.
What this deployment can actually route
One model. Not one of many that happen to be listed — one, in total.
curl -s "https://api.impossiblecarrot.cc/api/v1/models/count"
{"data":{"count":1}}
This is the point at which most gateway documentation would describe a menu of hundreds. The live catalogue on this deployment holds only what it can genuinely serve, so the count above is the whole of it. When more endpoints are wired in, the same request will say so — which is the reason to make the request rather than to trust a list written down somewhere.
That advice is not hypothetical. While these pages were being written, this
model's id changed from local-test-provider/dsv4s to the id above, and every
sample here had to be re-run. Code that had pasted the old string in stopped
working; code that read /api/v1/models did not.
The full record:
curl -s "https://api.impossiblecarrot.cc/api/v1/models"
{
"data": [
{
"id": "impCC/DeepSeek-V4-Flash-0731",
"canonical_slug": "impCC/DeepSeek-V4-Flash-0731",
"name": "ImpCC: DeepSeek V4 Flash 0731 (abliterated)",
"created": 1786677579,
"description": "An abliterated (decensored) rebuild of deepseek-ai/DeepSeek-V4-Flash-0731, published by ImpCC and served here on our own hardware. [...]",
"context_length": 131072,
"architecture": {
"modality": "text->text",
"input_modalities": ["text"],
"output_modalities": ["text"],
"tokenizer": "DeepSeek",
"instruct_type": null
},
"pricing": {
"prompt": "0.0000001",
"completion": "0.0000004",
"input_cache_read": "0.000000037",
"input_cache_write": "0.00000013"
},
"top_provider": { "context_length": 131072, "max_completion_tokens": null, "is_moderated": false },
"per_request_limits": null,
"supported_parameters": ["frequency_penalty", "logprobs", "max_completion_tokens", "max_tokens", "parallel_tool_calls", "presence_penalty", "repetition_penalty", "response_format", "seed", "stop", "structured_outputs", "temperature", "tool_choice", "tools", "top_k", "top_logprobs", "top_p"],
"default_parameters": null,
"supported_voices": null,
"links": { "details": "/api/v1/models/impCC/DeepSeek-V4-Flash-0731/endpoints" }
}
],
"total_count": 1,
"links": { "next": null }
}
The description is shortened at the marked point — the endpoint returns several
hundred more words of it, covering how the model was built and what it was built
from. Everything else above is exactly as it came back.
Reading the model record
pricing— US dollars per token, as decimal strings."0.0000001"onpromptis $0.10 per million input tokens. They are strings on purpose: real catalogue rates run to more decimal places than a JSON number carries without rounding, and a price that rounds is a price that bills wrong.context_length— the total prompt-plus-completion window, here 131,072 tokens. Note that the model's own architecture allows considerably more; this figure is what the endpoint was launched with, and the launch argument is what the catalogue reports.supported_parameters— the request fields this model honours. A parameter not in this list is not silently applied.top_provider.max_completion_tokens—null, meaning no output cap beyond the context window is published for this model.architecture.input_modalities—["text"]. Text in, text out. There is no image or audio input on this deployment.is_moderated—false. No moderation pass runs in front of this model.
Endpoints behind a model
One model id can be served by several endpoints. links.details on the model
record points at the list, which carries the per-endpoint terms — the model
record's pricing is a headline, and the endpoint's is what is charged.
curl -s "https://api.impossiblecarrot.cc/api/v1/models/impCC/DeepSeek-V4-Flash-0731/endpoints"
{
"data": {
"id": "impCC/DeepSeek-V4-Flash-0731",
"name": "ImpCC: DeepSeek V4 Flash 0731 (abliterated)",
"endpoints": [
{
"name": "Stealth | dsv4s",
"upstream_model_id": "dsv4s",
"model_id": "impCC/DeepSeek-V4-Flash-0731",
"context_length": 131072,
"pricing": { "prompt": "0.0000001", "completion": "0.0000004", "input_cache_read": "0.000000037", "input_cache_write": "0.00000013" },
"provider_name": "Stealth",
"tag": "impcc",
"quantization": "fp4",
"max_completion_tokens": null,
"max_prompt_tokens": 131072,
"uptime_last_30m": 97.8261,
"uptime_last_5m": null,
"uptime_last_1d": 97.8261,
"latency_last_30m": null,
"throughput_last_30m": null,
"supports_implicit_caching": true
}
]
}
}
Fields on that row worth knowing:
tagis the routing identity — the canonical handle that selects this endpoint.provider_nameis a display name drawn from a fixed set of upstream provider names. Ours has to borrow a member of that set, which is why it readsStealthrather than anything descriptive. Treattagas the identity andprovider_nameas a label that cannot yet say the right thing.latency_last_30mandthroughput_last_30marenull. No figure is published where no observation exists; a zero, or a plausible-looking number, would be worse than the null.uptime_last_5misnullfor the same reason, while the 30-minute and one-day windows do carry figures.
The provider directory
/api/v1/providers lists the organisations behind the endpoints.
curl -s "https://api.impossiblecarrot.cc/api/v1/providers"
{"data":[{"name":"ImpCC","slug":"impcc","privacy_policy_url":"","terms_of_service_url":null,"status_page_url":null,"headquarters":null,"datacenters":[],"icon":null}]}
slug here is the same impcc that appears as the endpoint's tag, and that is
the join between the two: an endpoint is matched to its provider by that
canonical handle, never by the display name, which several parties can share.
The policy and location fields are empty because no such document or declaration has been recorded for this provider yet. They are blank rather than filled with a placeholder that would read as a commitment nobody has made.
Choosing a provider per request
The catalogue format we implement carries request-level provider preferences — routing order, fallbacks, and filters on things like data policy. With a single routable endpoint there is nothing for any of that to choose between, so this page does not document behaviour you cannot currently exercise. It will be written up when there is a second endpoint to route to.