IFX Token Price Index Family
Methodology, Version 1.0
Introduction
IFX builds cash-settled futures on the price of AI model API tokens. A futures contract is only as good as its reference price, and a reference price is only as good as the methodology behind it. This document specifies how the first version of the IFX Token Price Index family is calculated: where the data comes from, which models are included, how gaps in the data are handled, the formula, and the quality diagnostics we publish next to every value.
We publish the methodology because settlement references in finance have to be auditable. For recent values, the inputs come directly from current OpenRouter endpoints, and those rows are the cleanest part of the dataset. Historical backfill is harder: archives are patchy, so the methodology has to show the fallback path and the gaps instead of pretending every old row can be rebuilt cleanly. Every methodological change from here on gets a new version identifier; historical series are never silently rewritten.
Version 1 is deliberately narrow. It measures one price dimension (output tokens), through one observation channel (OpenRouter), for six model companies. Section 9 states the resulting limitations plainly, and Section 10 describes how the data foundation grows from here.
What the index measures
Each index in the family tracks the daily volume-weighted price of one million output tokens for a single model company, in USD, as observed through traffic routed on the OpenRouter platform.
A concrete reading: if on a given day you had bought output tokens from that company's models in the same proportions as OpenRouter's users did, the index value is the average price you paid per million tokens.
| Property | Value |
|---|---|
| Quote unit | USD_PER_MTOK_OUTPUT (US dollars per 1,000,000 output tokens) |
| Frequency | Daily, one value per UTC calendar day |
| Weighting | Token volume (tokens processed per model per day) |
| Aggregation level | Model company (lab) |
Index universe
Index constituents are model companies. Channels such as OpenRouter, Azure, or AWS Bedrock are observation paths where prices and volumes can be measured; they never appear as constituents themselves. This separation is a core rule of the IFX universe model and it holds for every future version.
Version 1 publishes six indices in two waves. Wave 1 is the launch set. Wave 2 contains candidates whose data we publish for observation while coverage matures.
| Index ID | Company | Licensing bucket | History starts |
|---|---|---|---|
openrouter.wave1_core.openai.proprietary | OpenAI | Proprietary | 2025-05-30 |
openrouter.wave1_core.google.proprietary | Google Gemini | Proprietary | 2025-05-30 |
openrouter.wave1_core.anthropic.proprietary | Anthropic | Proprietary | 2025-11-01 |
openrouter.wave1_core.deepseek.hosted_open_commercial | DeepSeek | Hosted open / commercial | 2025-08-22 |
openrouter.wave1_core.qwen.hosted_open_commercial | Qwen | Hosted open / commercial | 2025-12-01 |
openrouter.wave2_candidates.moonshotai.proprietary_or_commercial | Moonshot AI | Proprietary or commercial | 2026-05-15 |
The licensing bucket records how the company's models reach the market. proprietary means closed-weight models sold through the author's own API. hosted_open_commercial means open-weight models sold as paid hosted endpoints by commercial providers.
History start dates differ by index on purpose: each series begins on the first day from which source coverage for that company is stable enough to publish. We would rather ship a shorter series than a longer one with an unreliable head.
A model enters its company's constituent set when it is a text-output model observed in the volume feed with a paid price on an active endpoint. Free endpoints carry no price and never enter the calculation.
Data inputs
The index joins two OpenRouter inputs:
Token weights come from OpenRouter's public model-activity data for each public model or variant target. The payload reports daily prompt tokens, completion tokens, requests, and related counters per model. The pipeline normalizes those rows to a variant-aware model_key and deduplicates by (author, date, model_key).
The OpenRouter models endpoint reports each model's output ("completion") token price in USD per token. We convert it to the index quote unit:
The pipeline runs once per day at 17:00 UTC and computes the previous full UTC day, so a day's value is available roughly 17 hours after that day closes.
Current OpenRouter rows are treated as the freshest source. When current and archived rows overlap, current wins. Older history uses archived OpenRouter model-activity payloads where they exist. Those archives are incomplete; a missing archived model row is treated as missing data, not zero usage.
Identifier resolution
The volume feed and the price feed use different identifier conventions. Volume rows carry dated permaslugs and endpoint variants (suffixes such as :free, :beta, :thinking, or date stamps like -20250514); the price feed uses undated base slugs. The pipeline matches them in layers: exact identifier first, then normalized candidates produced by stripping variant and date suffixes. This matters most in the backfill. New OpenRouter rows are current; archived rows are useful, but incomplete, so the pipeline records when it had to use a fallback instead of an exact match.
The share of daily token volume that was priced through fallback rather than an exact match is published per point as fallback_token_share. If an archived model-activity row is absent, it is treated as an archive gap and handled by the volume variant rules in Section 7; it is not counted as zero usage. Price gaps are disclosed through missing_price_token_share and the status field.
Calculation
Let \(c\) be a company, \(t\) a UTC day, \(U_{c,t}\) the set of company \(c\)'s constituent models observed in the volume feed on day \(t\), and \(A_{c,t} \subseteq U_{c,t}\) the subset that has a valid price on that day. With \(V_{m,t}\) the token volume of model \(m\) and \(p_{m,t}\) its price in USD per million output tokens, the index level is the volume-weighted mean over priced constituents:
One rule matters more than any other here: a model without a resolvable price is excluded from both the numerator and the denominator. Treating a missing price as zero would mechanically drag the index down every time a price observation failed, turning data gaps into fake price moves. Exclusion keeps the index a statement about prices we actually observed. The size of what was excluded is disclosed per point as missing_price_token_share.
Alongside the USD level, each series carries a normalized level with base 100 at the series start \(t_0\):
The USD level answers "what does a million output tokens cost"; the normalized level answers "how has that cost moved since the series began" and makes companies with very different absolute price levels comparable on one chart.
Variants
Each index is computed in variants along two dimensions, and every published series states which variants produced it.
observed uses only volumes reported by the source feed. imputed (the default) additionally estimates a constituent's volume on days when the feed does not report it, so that a model dropping out of the source's reporting window does not register as a false price shift. The estimated share is disclosed per point as imputed_token_share.
candidate_all_evidence (the default) admits every price observation the pipeline could attach to a constituent, including fallback identifier matches. strict_ok restricts the calculation to observations that passed strict matching and conflict checks.
The defaults favor coverage; the strict variants exist so anyone can check how much the extra evidence changes the result.
Quality diagnostics and publication
Every published point carries its own diagnostics. We consider this the most important part of the design: an index that publishes a number without telling you how solid that number is invites misuse.
value_usd_per_mtok
Index level in USD per million output tokens
normalized_value
Level rebased to 100 at series start
token_weight
Total token volume behind the day's value
price_coverage_share
Share of the day's token volume that had a usable price
imputed_token_share
Share of the day's weight that was estimated rather than observed
fallback_token_share
Share priced via normalized identifier matching rather than exact match
missing_price_token_share
Share excluded because no price could be resolved
conflict_token_share
Share where multiple price observations disagreed
status
Data-quality flag for the point
When the diagnostics for an index or an individual day fall below our internal thresholds, the status field says so (for example DATA_QUALITY_GAP). The value is still published; the flag tells you to treat it with care. Hiding weak days would make the series look better and mean less.
Values are published as decimal strings to avoid floating-point artifacts in transport. If a source correction affects an already-published day, that day is recomputed and restated; the methodology version attached to the series identifies the rules that produced every value. A change to any rule in this document produces a new version identifier, and superseded versions remain documented.
Known limitations of version 1
Stating these is part of the methodology, since each one bounds what the index can claim to measure.
Single-channel observation. OpenRouter is one routing platform. Its traffic skews toward developers and products that use a router; enterprise volume flowing through direct provider APIs and cloud channels is invisible to it. The index measures prices in the OpenRouter market, which we treat as a proxy for the broader output-token market until more channels are added.
List prices. The price feed reports posted per-token rates. Negotiated discounts, batch tiers, and cache pricing are not reflected.
Output tokens only. Input-token and cached-input pricing are excluded in version 1, although providers price them separately.
Reporting threshold. The volume feed covers the most-used models on the platform; very small models below its reporting window contribute no weight.
Informational values. Published index values are reference data. Marks used for margining and settlement of IFX contracts pass an additional operator review before use; a raw index value never becomes a settlement input on its own.
What comes next
Version 1 establishes the calculation contract: volume-weighted output-token prices per company, with per-point quality disclosure and versioned rules. The planned growth is in the data, and the contract is built so that the data can grow without breaking it.
The next source track is official provider price feeds. OpenAI, Anthropic, Google, and DeepSeek all publish official API pricing, and our source policy ranks official evidence above router evidence; as those connectors come online, router data shifts from sole source to cross-check. Our research universe already covers more than thirty model companies across the US, China, Europe, and Asia, and wave 2 candidates are promoted to core once their coverage passes the same checks the wave 1 companies did. Later versions add price dimensions beyond output tokens, starting with input and cached-input rates.
Every one of those steps will ship the same way this one does: a versioned methodology document, published before the numbers, with the diagnostics to check them.
If you find an error in this document or a day in the series that the diagnostics do not explain, we want to hear about it.
Appendix: public data access
The full index list and every series described above are available through the IFX public API, without authentication:
list of published indices with metadata (add ?q= to filter by company).
full daily series for one index, with the per-point fields from Section 8.
Numeric fields are returned as decimal strings; convert client-side as needed.