Publish your GPU prices here. For free.
We track model-level prices from 45 providers, most of them crawled. Crawling has a ceiling: it misses pages, misreads rate cards and gets rate-limited. So there is a self-reporting channel — push your own prices, into the same verifiable chain, under your name, correctable and revocable.
Operator-reported now: 0 · 0 model quotes
Three reasons, none of them charity
| What you get | How it works |
|---|---|
| Quoted by AI | Our /providers page, /v1/market/models and llms.txt are first-stop sources for AI engines. A price in this table is a candidate answer to "which cloud is cheapest for an H100" — with your name on it. |
| Found by buyers | Buyers do not ask one provider; they compare. The point of this site is to make that comparison verifiable — you have to be in the table to be compared. |
| Your caliber, stated | Crawlers guess your billing mode and region. Self-reported quotes state ondemand / spot / reserved, the region, and a link to your own page — no one has to carry the blame for a guess. |
Four rules, enforced at the door
| Rule | Why | If not met |
|---|---|---|
| CNY / 卡 / 小时 | A whole-node price not divided by GPU count makes an 8-GPU box look 8x the card price. This is the single most common upstream error. | Rejected (bad_price) |
| Recognisable model name | The model name must map to a CVIN spec segment (e.g. "H100 80GB"). We never guess: a wrong guess is permanent on the chain. | Rejected (unknown_model) |
| Billing mode required | On-demand, spot and reserved are three markets. Mixed together, "lowest price" means nothing. | Rejected (missing_price_type) |
| Within 0.1–25x of the median | This one protects both sides: outside that band it is usually a unit error, not a competitive price. | Rejected with the ratio (implausible_price) |
Rejected items are never dropped silently: the response lists each index with a reason. Re-pushing an unchanged quote writes nothing — the response returns inserted:0.
Three steps
① Ask for a key:Email hi@cvin.org with your platform name, site and a reachable contact. The key is bound to your platform name — the row you will appear as — and issued by hand, usually the same day.
② Push once:
curl -X POST https://cvin.org/v1/operator/quotes \
-H "content-type: application/json" \
-H "x-api-key: <你的运营方密钥>" \
-d '{
"quotes": [
{ "gpu_model": "H100 80GB", "price_cny_h": 18.50, "price_type": "ondemand", "region": "ap-southeast-1" },
{ "gpu_model": "RTX 4090", "price_cny_h": 1.95, "price_type": "ondemand", "region": "cn-east-1" },
{ "gpu_model": "A100 80GB", "price_cny_h": 10.20, "price_type": "spot", "region": "us-west-1" }
]
}'
③ Put it on cron, once a day is plenty:
// 每天跑一次就够了。价格没变时返回 inserted:0,链上不写任何东西。
const res = await fetch('https://cvin.org/v1/operator/quotes', {
method: 'POST',
headers: { 'content-type': 'application/json', 'x-api-key': process.env.CVIN_OPERATOR_KEY },
body: JSON.stringify({ quotes: [
{ gpu_model: 'H100 80GB', price_cny_h: 18.5, price_type: 'ondemand', region: 'ap-southeast-1' }
] })
});
const out = await res.json();
console.log(out.inserted, 'inserted /', out.unchanged, 'unchanged', out.rejected || []);
Read back what you have reported: GET /v1/operator/quotes (same key header). The worst case for an operator is not rejection, it is pushing and not knowing whether it took — so this endpoint is standard, not an add-on.
Operators reporting today
What we will not do
② No paid ranking: /providers orders by provider count and quote count, and no position is for sale. This is written down because, in an industry that sells rankings, it has to be publicly checkable.
③ We do not resell your quotes at a markup: model-level prices are public anyway; what we charge for is reading someone else's history and continuity proofs.
④ Self-reported quotes are never device-level evidence: they are provider quotes for a model (identity level M), pointing at no specific machine, and cannot support collateral or underwriting.