Methodology & Data
How we fetch, compute and phrase things, and which conclusions we refuse to draw.
Methodology · Pricing semantics and conversion chain (public, kept permanently, changes versioned)
Every published number traces back to a rule here and a snapshot. The rules themselves need sources too.
1. Reading relay panel quotes (one-api / new-api family)
Source:/api/pricing(public, no login) + /api/status(public).
| Field | Meaning | Source |
|---|---|---|
model_ratio |
Nominal USD per M input tokens = model_ratio × 2 |
new-api common/constants.go:QuotaPerUnit = 500*1000 // $0.002 / 1K tokens |
completion_ratio |
Output price = input price × completion_ratio | Same as above |
group_ratio[group] |
Group multiplier, applied to the nominal price | /api/pricing returns |
quota_type=0 |
per token (use the two lines above) | new-api model/pricing.go:389 |
quota_type=1 |
per call,model_price is nominal USD per call |
new-api model/pricing.go:384 |
quota_type=2 |
per second,model_price is nominal USD per second. Upstream has no such type; added by a fork |
toapis front-end rendering code:1===quota_type ? "/req" : 2===quota_type ? "/s" |
model_type |
0 video / 1 image / 2 text / 3 audio | toapis front end:{video:0,image:1,chat:2,audio:3} |
pricing_version |
Site-wide pricing hash; changes when any model changes | /api/pricing returns; used for change detection, excluded from comparison |
2. Nominal USD → what users actually pay
Panel prices are "nominal USD". What users pay depends on how much is charged per $1 of nominal credit at top-up:
Effective USD = nominal USD × price ÷ USD/CNY rate (CNY top-up channel) Effective USD = nominal USD × stripe_unit_price (Stripe USD channel)
| Field | Source |
|---|---|
price = CNY charged per $1 of nominal credit, default 7.3 |
new-api setting/operation_setting/payment_setting_old.go:16;controller/topup.go:175:payMoney = amount × Price × topupGroupRatio × discount |
stripe_unit_price default 8.0; the default is treated as not configured |
new-api setting/payment_stripe.go:6;controller/topup_stripe.go:441 |
| FX rate | independent evidence source, snapshotted each run (open.er-api.com) |
When the two channels differ by ≥1.5×, the sentence notes "via CNY channel" and appends the Stripe price.
Two factors we can't obtain(topupGroupRatio、AmountDiscount) can only make the effective price lower → our ratio is anupper bound, the conservative direction.
3. Cost-floor ratio
Ratio = relay effective price ÷ lowest public-channel price for the same model indexed here
- The denominator is thelowest value across official + marketplace (OpenRouter-listed provider prices); with multiple tiers (off-peak/peak, resolution) the lowest is taken → ratio biased high; under-label rather than over-label
- Bands: <0.15 mathematically unsustainable with no subsidy assumed · 0.15–0.40 well below common bulk discounts · 0.40–0.75 explainable by bulk discounts · 0.75–1.25 near public price · 1.25–3 above public price · ≥3 well above
- Outlier gate: ratio <0.05 or >5 with any link of the conversion chain missing evidence → not published until checked. Complete chains pass (the gate guards against our errors, not against extreme facts)
- Model-name normalisation v2: strip vendor prefix, strip
:batch/:free, strip date suffixes, strip-officialand other relay-added suffixes; between digits-→.
4. Wording
Every public sentence passes core/wording.py: banned terms are blocked outright; quality conclusions must carry sample size, time window and confidence; discovery pages ban all recommendation language. Fixed closing sentence: "This is an arithmetic ratio. It is not an accusation against the vendor, and a lower public source not yet indexed here may exist."
5. Known limits
- DeepSeek's official price is in CNY; converted to USD at the snapshot rate before entering the denominator
- Multimodal: only Google Veo's official per-second price is comparable so far; Seedance / Kling / Hailuo / Vidu official pages are JS-rendered, references pending; quotes listed without comparison
- Per-call image models (gpt-image / seedream / flux): resolution and image count per call unknown, not compared
6. Outbound links /go/<域名> and referral parameters
Entry: every indexed site's fact page and comparison table has a "Visit" link. Redirects go through our /go/<域名> relay (Cloudflare Worker,site/worker_go.js), 302 to relay_candidate.site_url. Only per-site click counts are stored,no IP / UA / Referer stored;Referrer-Policy: no-referrer。
Target URL guard: the site's /api/status server_address is used only when "https + public hostname + same registered domain as indexed"; otherwise fall back to https://<域名>/(helpcoder.cc was observed configured as http://localhost:3000/)。
Referral parameters (off by default,REFERRAL_ENABLED=0). If enabled, hard constraints live in code: 1. ranking, judgements and any ratio never read the referral_url field (Charter I) 2. entries with referral parameters render with an "Ad" label,rel="sponsored nofollow"(Charter II / Internet Advertising Measures) 3. detection report pages and quality measurement pages never show this entry, only in the "Visit" column of fact pages and comparison tables (Charter IV) 4. per-site clicks are public; referral revenue share published quarterly (Charter V) 5. configured only for sites with an official referral programme referral_url, and that site's detection results are published as usual, wording unchanged by the relationship
Open question: taking referral fees from measured relay sites conflicts with "no money from those we measure"; that is CCTest's path. The field and switch are ready; turning it on is a product decision, not a technical one.
7. Multimodal (image / video) comparison
Classification:core/modality.py Split by model name into image / video / audio / other (family regexes). Names containing image/img/t2i/i2i but not video/i2v/t2v are treated as image first; audio/voice/lip-sync go to audio. Validated against toapis model_type ground-truth labels, 97%.
Unit conversion: - relay per-second (quota_type=2) vs official per-second: compared directly - relay per-call vs official per-second:effective per second = effective per call ÷ the family's default clip length. Default lengths (from each vendor's API docs): Veo 8s (4/6/8), Kling 5s (5/10), Hailuo/H3 6s (6/10), Seedance 5s (5/10), Vidu 4s (4/8), Wan 5s, Sora 10s.Every conclusion states "converted at the default N seconds; if the site's call covers a longer clip, the ratio is biased high"
- Image: relay per-call vs official per-image. The official lowest-resolution tier is the denominator; FLUX is priced per megapixel officially, 1 image counted as 1MP (≈1024×1024) - always the conservative direction: assumptions only bias the ratio high; under-label rather than over-label
Reference price sources: Google Veo / Nano Banana (ai.google.dev pricing), Kling video and image (kling.ai/dev/pricing embedded JSON), MiniMax H3 (platform.minimax.io pay-as-you-go page), BFL FLUX (bfl.ai/pricing). Not integrated: Seedance / Seedream, Vidu, Wan / Qwen-Image (client-rendered pages), Sora / GPT Image (OpenAI 403), Midjourney (no per-call API price) — quotes listed, no ratios.
Older-version note: when a site sells Kling v1/v2, Veo 2 or Hailuo 02 but the reference is the newer official price, the sentence says so (older official prices are usually lower → ratio biased high).
Media site-level gate: if a site's median media-row ratio is <0.01 or >30 → the whole site becomes "pricing basis unverified" with no ratios; rows with effective price <$0.0005 are treated as placeholders and skipped.
Chinese image / video official references (from 2026-09-03)
- Volcengine Seedance / Seedream: fetch the
getDocDetailendpoint behind the pricing docs (Markdown body); video takes the CNY/second column of the official example table, image takes CNY/image; list price is authoritative, limited-time discounts go into conditions, not price. - Alibaba Cloud Bailian Wan / Qwen-Image: fetch the server-rendered pricing page; only the North China 2 (Beijing) list price is taken.
- Shengshu Vidu: credit-based pricing, converted to CNY/second from the page's credit unit price; standard-hours price taken, off-peak price recorded in conditions.
- CNY references are converted to USD at the day's USD/CNY rate before comparison with relay effective prices; the reference is marked "CNY converted".
- Kling's domestic pricing page is fully client-rendered and its API requires login, so only its international USD price is kept; MiniMax uses the international USD price (H3 series).
8. 一致性探针(T1 指纹)
- 前提:只对本站用自己注册的 Key 能调用的中转站做;Key 只存本机
data/keys.env,不进仓库、不进日志、不进页面。 - 做法:对该站声明的每个模型,发 12 条固定探针串(中英混排、emoji、代码、长数字、生僻字、多语种、重复字符、URL),每条
max_tokens=4,不传 temperature(有站拒绝 0)。记录usage.prompt_tokens、响应里的model字段、首字节延迟、HTTP 状态。每站每模型约几厘钱。 - 比对:同一模型、同一探针串,不同分词器切出的 token 数不同。≥3 个渠道对同一模型报出完全相同的 12 个计数 → 视为该模型的共识簇;某渠道计数与共识簇不同 → 记「计数与同模型其他渠道不一致」。共识不足 3 站 → 记「共识样本不足」,不下结论。回显
model与请求的模型名对不上 → 附注「回显模型名不同」。 - 措辞:这是一致性测量,不是真伪判定;不出现任何指控性词汇。页面只写 一致 / 不一致 / 样本不足 + 成功条数 + 日期。
- 边界:中转站可能对同一模型接了多个上游并随机分流,一次 12 条只覆盖当时命中的那条;「thinking」类原名不测(输出被限住会异常慢);按次计价的模型不测(一次可能几毛到几元)。
- 数据:
probe_t1表(每条一行);导出时取最近 7 天每个 站×模型×探针 的最新一条参与共识;data_v2.json里每行带probe{status, ok, n, echo, peers, ts}。
Data download
The charter promises downloadable raw data. The files below are generated in the same batch as the site (2026-09-04 18:35):
- data_v2.json — model ledger, quotes and profiles for 307 sites, snapshot index, FX rate
- media.json — image / video quotes and official references
- go_links.json — outbound link table (referral fields included, currently all empty)
Snapshot bodies are stored by sha256 in object storage and are not publicly downloadable; to verify a snapshot, email [email protected] with its ID.