Data 2026-09-04 18:35 · USD/CNY 6.74
中文
← Sinan Lab › Methodology & Data

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.goQuotaPerUnit = 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 secondmodel_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:16controller/topup.go:175payMoney = amount × Price × topupGroupRatio × discount
stripe_unit_price default 8.0; the default is treated as not configured new-api setting/payment_stripe.go:6controller/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 obtaintopupGroupRatioAmountDiscount) 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 -official and 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 storedReferrer-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

Classificationcore/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 getDocDetail endpoint 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.