Arc mainnetchainblock

The API described here is not yet accepting production traffic. Endpoints, parameters and prices are the Phase 1 design and may still change.

DocumentationModels

API

Models

Open weights only, each one pinned on-chain to the exact build an operator committed to serve.

The catalogue

Prices are USDC per million tokens. Latency is the observed median across nodes currently serving the model, not a promise.

ModelQuantClassInputOutputp50
llama-3.3-70b-instructQ4_K_MForge$0.180$0.55640 ms
qwen2.5-32b-instructQ5_K_MCore$0.090$0.28410 ms
mistral-small-24bQ5_K_MCore$0.060$0.19330 ms
gemma-3-12b-itQ4_K_MSpark$0.030$0.08210 ms
bge-m3F16Spark$0.01245 ms

The class column is the minimum hardware that can hold the model. Asking for a higher class with vacuum.min_node_class usually buys throughput at the cost of a smaller pool.

Registry IDs

A model on Vacuum is not a name, it is an entry in an on-chain registry. The entry’s ID is derived from three things together:

  • the hash of the weights file
  • the quantization format
  • the inference engine version

All three matter. The same weights at a different quantization are a different entry, because they are a different model in every way a user would notice. An operator commits to serving one exact entry, and quietly substituting another is fraud — detectable by the sampled audits described in Receipts and proofs.

This is what makes the price list meaningful. Without it, “llama-3.3-70b” on a decentralized network would mean whatever the cheapest operator decided it meant.

Pinning a build

Passing a catalogue name gets you the current build for that name, which can change when a better quantization or a newer engine is published. That is usually what you want.

json
{ "model": "qwen2.5-32b-instruct" }

When you need the exact same behaviour over time — a vector index, a benchmark, a regression suite — append the registry ID and the router will only route to nodes serving that build.

json
{ "model": "qwen2.5-32b-instruct@0x3f8b21c7e94a0d6528bf17ae3c904d11" }

A pinned build is a smaller pool, and eventually an empty one — old builds are retired as operators move on. A pinned request that can no longer be served returns model_unavailable rather than silently falling back.

Listing at runtime

Do not hardcode the catalogue. Prices move with supply and demand, and builds are replaced.

shell
curl https://api.vacuumfi.com/v1/models \  -H "Authorization: Bearer $VACUUM_KEY"
json
{  "object": "list",  "data": [    {      "id": "qwen2.5-32b-instruct",      "object": "model",      "registry_id": "0x3f8b21c7e94a0d6528bf17ae3c904d11",      "quantization": "Q5_K_M",      "engine": "vllm-0.9.2",      "context_window": 32768,      "min_node_class": "Core",      "pricing": { "input_usdc_per_mtok": "0.09", "output_usdc_per_mtok": "0.28" },      "observed": { "p50_latency_ms": 410, "nodes_serving": 486 }    }  ]}
FieldTypeDescription
idstringThe catalogue name you pass as model.
registry_idstringThe on-chain entry this name currently resolves to.
context_windowintegerTotal tokens, prompt and completion together.
min_node_classstringSmallest hardware class that can hold it.
observedobjectLive median latency and how many nodes are serving it right now. Both move.