COMPUTE
. FINANCE

Documentation.

Compute Finance is in early access.

The CPI Oracle and public API are live. Register a Compute Finance ID to join the waitlist.

REQUEST ACCESS

What is the CPI?

The Compute Price Index ("CPI") is a public benchmark that tracks the cost of AI inference across major providers. It produces a single equal-weighted reference price — the Standard Compute Unit ("SCU") — calculated from a basket of 19 models across 9 providers.

The Problem

LLM inference pricing is fragmented. Every provider quotes pricing differently — per token, per character, per request, per model. There is no standardized way to benchmark or compare the cost of AI computation across models and providers. You need a verifiable pricing reference you can audit independently.

The Solution

The CPI is an equal-weighted basket of 19 AI models across 9 providers that produces a single, verifiable unit of account: the Standard Compute Unit (SCU). The SCU represents the USD cost of a reference workload, 1,000 input tokens + 500 output tokens, taken as the geometric mean across the full basket.

Key Properties

  • Diversified — 19 models across 9 providers prevent any single provider from dominating the index.
  • Outlier-resistant — The geometric mean dampens any single model's impact, and the one-family-one-slot rule prevents version pile-up. No caps needed; the math does the work.
  • Versioned — The equal-weighted basket launches as v1.0 on June 18, 2026. Reconstitution-driven, published on-chain when basket composition or provider rate-card prices change. There is no fixed cadence.

Basket Composition

The CPI tracks 19 models from 9 providers. Every model family gets one slot, the latest version always, and each model is weighted equally. A family is a provider's distinct product line (e.g. openai.gpt, anthropic.claude); the latest released model in each family is its representative. On a new release the representative auto-rolls. The basket updates with a new version number when families are added, removed, or replaced.

alibaba.qwen-flash

Qwen3.5 Flash

alibaba.qwen-max

Qwen3.7-Max

alibaba.qwen-plus

Qwen3.5 Plus

anthropic.claude-fable

Claude Fable 5

anthropic.claude-haiku

Claude Haiku 4.5

anthropic.claude-opus

Claude Opus 4.8

anthropic.claude-sonnet

Claude Sonnet 5

deepseek.v-flash

V4 Flash

deepseek.v-pro

V4 Pro

google.gemini

Gemini 3.1 Pro

google.gemini-flash

Gemini 3.5 Flash

google.gemini-flash-lite

Gemini 3.1 Flash-Lite

minimax.m

M2.7

moonshot.kimi

Kimi K2.7

openai.gpt

GPT-5.5

openai.gpt-mini

GPT-5.4 Mini

openai.gpt-nano

GPT-5.4 Nano

xai.grok

Grok 4.3

xiaomi.mimo

MiMo V2.5 Pro

SCU Formula

The Standard Compute Unit is calculated in two steps. The reference workload is fixed at 1000 input + 500 output tokens, evaluated across all basket models.

The SCU is reconstitution-driven. It is published on-chain whenever the basket changes, either because a model is added, removed, or replaced, or because a provider updates a rate-card price. Both triggers produce a new on-chain version. There is no fixed cadence and no continuous off-chain feed.

Step 1 — Per-model cost

For each model in the basket, compute the cost of the reference workload using the provider's published per-token pricing. Prices are USD per 1M tokens.

cost_m = (input_price_m × 0.001) + (output_price_m × 0.0005)

Step 2 — Equal-Weight Geometric Mean

Take the geometric mean of all N model workload costs. Every model is weighted equally; there are no tiers, no caps, and no provider weights. Each model family holds one slot at its latest version, so a provider cannot inflate its representation by shipping extra SKUs.

SCU = (∏ cost_m)^(1/N) for all m in the index, N = 19

Live SCU: $0.002742 — the geometric mean of 19 equal-weighted model costs.

Every published revision permanently carries the methodology version that produced it (currently v1). Definitions and the changelog are served by the methodology endpoint; every oracle response carries the X-Methodology-Version header.

Anyone with access to provider pricing pages can independently reproduce this number.

Read the full methodology specification →

Governance

The model-family rule reduces governance to a minimum. One eligibility rule, one family rule, one emergency trigger. No weight committees, no tier reviews.

RuleSpecificationFrequency
Listing CriteriaPublic GA + first-party USD pricing + in-scope text model + seasoning + liveness. Applied identically to all.Continuous
Model Family RuleOne slot per family, latest GA version auto-wins. No governance needed.Auto
Edge-Case ReviewPublished, dated decision for family-vs-version edge cases. Stated reasoning.As Needed
ReconstitutionAdditions and removals applied by the criteria. Logged.Scheduled
Price UpdatesReflected automatically from first-party price cards. Daily scan.Daily
Emergency TriggerAny single model that moves price by more than the set threshold in 24 hours enters a short hold before the change is reflected.As Needed

Every basket change increments the revisionVersion counter. The full history is available via the GET /v1/oracle/reconstitutions endpoint. On-chain, the OracleRegistry contract records each published revision with its timestamp and metadata hash.

On-Chain Verification

All CPI pricing is recorded on-chain via the OracleRegistry contract on Base. You can independently verify prices without trusting the Compute Finance API.

Contract Address

NetworkBase (Chain ID 8453)
Contract0x1b91c0961928a14a2eD6c1985bC11aF1b302714D

Read Functions

FunctionDescription
version()Oracle implementation version — assert before deserializing tuples
decimals()Scale of scuUsd and baseline values (18)
lastRevisionVersion()Returns the highest confirmed revision number
getLatestRevision()Returns the latest revision header: revisionVersion, methodologyVersion, scuUsd, contentHash, metadataHash, publishedAt
getRevision(uint256 revisionVersion)Returns the same revision header tuple for a specific revisionVersion
getRevisionScuUsd(uint256 revisionVersion)Returns the SCU value in USD 18-dec for a specific revision
getBaseline()Returns the SCU value of the first revision (denominator of the inverse purchasing-power index)
getComputeIndex()Returns the latest (baseline / SCU) × 100
getRevisionAt(uint256 timestamp)Returns the revision version active at the given Unix-seconds timestamp
getComputeIndexAt(uint256 timestamp)Returns the atomic tuple (scuUsd, indexValue, publishedAt, methodologyVersion, revisionVersion) at the timestamp

Verification with ethers.js

JavaScript
import { ethers } from "ethers";

const ORACLE_REGISTRY = "0x1b91c0961928a14a2eD6c1985bC11aF1b302714D";
const ABI = [
  "function lastRevisionVersion() view returns (uint256)",
  "function getLatestRevision() view returns (tuple(uint256 revisionVersion, uint16 methodologyVersion, uint256 scuUsd, bytes32 contentHash, bytes32 metadataHash, uint64 publishedAt))",
  "function getBaseline() view returns (uint256)",
  "function getComputeIndex() view returns (uint256)"
];

const provider = new ethers.JsonRpcProvider("https://mainnet.base.org");
const oracle = new ethers.Contract(ORACLE_REGISTRY, ABI, provider);

// Read latest revision header
const latest = await oracle.getLatestRevision();
console.log("revisionVersion:", latest.revisionVersion.toString());
console.log("SCU (USD, 18-dec):", ethers.formatUnits(latest.scuUsd, 18));
console.log("metadataHash:", latest.metadataHash);

// Inverse purchasing-power index — (baseline / SCU) × 100
const computeIndex = await oracle.getComputeIndex();
console.log("Compute Index:", ethers.formatUnits(computeIndex, 18));

// Per-model prices live in the off-chain manifest fetched by metadataHash —
// resolve at /v1/oracle/manifest/{metadataHash} and verify with JCS+keccak256.

Verification via Basescan

You can also read the contract directly on Basescan. Since OracleRegistry is an upgradeable proxy, use the Read as Proxy tab so the implementation's functions are available:

  1. Go to Basescan → Contract → Read as Proxy
  2. Call getLatestRevision() — its first return value lists every registered model pricing key
  3. Read the on-chain revision header (scuUsd, methodologyVersion, contentHash, metadataHash, publishedAt) via getRevision(version). Per-model prices live in the off-chain manifest fetched by metadataHash.
  4. Prices are returned in $COMPUTE wei (18 decimals) per 1M tokens. Divide by 10^18 to get the $COMPUTE amount.

Verification via Sourcify

The same source is independently verified on Sourcify, a decentralized verification repository: View on Sourcify ↗

Public API

All oracle endpoints are public and require no authentication. Read access is free and unrestricted. Base URL: https://api.compute.finance

Endpoints

GET/v1/oracle/scuCurrent SCU value, methodology version, and family-representative breakdown
GET/v1/oracle/modelsAll basket models with provider, family, and pricing — one representative per family at its latest version
GET/v1/oracle/models/{key}Single model by pricing key
GET/v1/oracle/models/{key}/price-historyPer-model input/output USD price time series, one entry per on-chain revision (per-revision, daily, or weekly granularity); Accept: text/csv returns a CSV attachment
GET/v1/oracle/catalogEvery tracked model (incl. catalog-only and pricing-only providers) with current price, integrated flag, and index-member flag
GET/v1/oracle/models/{key}/price-at?date={iso8601}Per-model input/output USD price effective at the requested ISO-8601 timestamp; manifest source for index members, ProviderCost fallback for catalog-only
GET/v1/oracle/basketFull basket composition: all models with equal weights, revision and methodology version
GET/v1/oracle/methodologyActive methodology version and full changelog
GET/v1/oracle/methodology/{version}Single methodology record (formula, family rule, reference workload, spec URL)
GET/v1/oracle/baselineFrozen SCU of the first confirmed revision — the denominator for the inverse computeIndex purchasing-power view
GET/v1/oracle/scu-at?date={iso8601}SCU value active at a given timestamp — step-function lookup of the latest confirmed revision with publishedAt ≤ date (highest revisionVersion on ties)
GET/v1/oracle/history?from={iso8601}&to={iso8601}&granularity={per-revision|daily|weekly}Historical SCU values, one entry per on-chain revision; granularity: per-revision, daily, or weekly; Accept: text/csv returns a CSV attachment
GET/v1/oracle/reconstitutionsNamed basket-change events with version, models, SCU delta
GET/v1/oracle/reconstitutions/exportExport full reconstitution history as a downloadable markdown file
GET/v1/oracle/revisions/{revision}Full OracleRevision record for a specific on-chain revision
GET/v1/oracle/latestLatest confirmed revision summary (version, timestamps, SCU, basket size)
GET/v1/oracle/healthLast revision timestamp, version count, on-chain sync status
GET/v1/oracle/contract-metadataLive OracleRegistry identity — chainId, proxy address, on-chain version(), and keccak256 of the deployed bytecode
GET/v1/oracle/statsPublic aggregate protocol statistics (TVL, users, volume)
GET/v1/oracle/activityLive activity feed of recent protocol events (paginated)
GET/v1/oracle/pricingPer-model pricing in wei and USD per 1M with markup

Code Examples

All endpoints are public. No authentication required.

Get Current SCU

curl https://api.compute.finance/v1/oracle/scu

List All Models

curl https://api.compute.finance/v1/oracle/models

Get Single Model

curl https://api.compute.finance/v1/oracle/models/claude-opus-4.8

Historical SCU (date range)

curl "https://api.compute.finance/v1/oracle/history?from=2026-05-18T00:00:00Z&to=2026-06-18T00:00:00Z&granularity=daily"

Response Schemas

GET /v1/oracle/scu

response
{
  "scuUsd": 0.002435,
  "computeIndex": 100.00,
  "referenceWorkload": { "inputTokens": 1000, "outputTokens": 500 },
  "methodologyVersion": 1,
  "breakdown": {
    "methodologyVersion": 1,
    "familyRepresentatives": [
      {
        "family": "openai.gpt",
        "modelKey": "gpt-5.5",
        "inputPriceUsdPerMillion": 5.0,
        "outputPriceUsdPerMillion": 30.0,
        "blendedCostUsd": 0.02
      }
    ]
  },
  "updatedAt": "2026-06-18T12:00:00Z"
}

GET /v1/oracle/models

response
{
  "models": [
    {
      "id": "gpt-5.5",
      "displayName": "GPT-5.5",
      "provider": { "key": "openai", "name": "OpenAI" },
      "family": "openai.gpt",
      "integrated": true,
      "usdPricePerMillion": { "input": 5.0, "output": 30.0 },
      "weiPricePerMillion": { "input": "756430000000000000000", "output": "4538580000000000000000" },
      "markedUpUsdPricePerMillion": { "input": 5.25, "output": 31.5 },
      "markedUpWeiPricePerMillion": { "input": "794252000000000000000", "output": "4765509000000000000000" },
      "releasedAt": "2026-04-01T00:00:00Z",
      "cache": null,
      "reasoning": null
    }
  ]
}

Error Catalog

Every API error response shares a unified envelope. The code field is drawn from a closed taxonomy — switch on it directly, rather than parsing message.

envelope
{
  "error": {
    "message": "Human-readable summary",
    "type": "<OpenAI-compatible category>",
    "code": "<canonical taxonomy code>",
    "param": "fieldName",        // optional, set when the error binds to a field
    "details": { ... },           // optional, code-specific structured payload
    "issues": [ ... ]             // present on validation_failed (Zod issues)
  }
}
CodeStatusTypeMeaningWhen it occurs
unauthorized401invalid_request_errorAuthentication is required to access this endpoint.Missing/invalid cf-id JWT cookie, missing Bearer token, or a signed-message timestamp outside the 5-minute freshness window.
forbidden403forbiddenThe caller is authenticated but is not allowed to perform this action.Caller lacks the required role, or a signature verifies to a different address than the authenticated wallet (IDOR guard).
invalid_signature401invalid_request_errorThe provided signature could not be recovered or verified.EIP-191 signature is malformed, truncated, or recovery yielded no valid signer.
signature_reused409invalid_request_errorThe signed-request nonce has already been consumed.Replay protection rejects a second submission with the same nonce.
invalid_api_key401invalid_request_errorThe Bearer API key is missing, malformed, or unknown.Token does not start with `ct_live_`, its SHA-256 hash is not in the database, or the key has been moved to a non-active state on inference endpoints.
api_key_frozen403forbiddenThe API key has been administratively frozen.Buyer or admin froze the key; unfreezing requires manual action.
api_key_revoked401invalid_request_errorThe API key has been revoked and is no longer usable.Buyer revoked the key via /v1/keys/:id/revoke; surfaced canonically on /v1/usage via ApiKeyGuard.
model_restricted403forbiddenThe requested model is not in the key's allowedModels list.Buyer pinned the key to a subset of models; another model was requested.
bad_request400invalid_request_errorThe request shape is invalid in a way that does not fit a more specific code.Generic 400 fallback when no domain-specific factory applies.
validation_failed422invalid_request_errorRequest body failed Zod schema validation. Structured per-field reasons are in `error.issues[]`.Schema-level validation in ZodPipe, or service-level domain validation (e.g. minimum amount).
not_found404not_foundThe requested resource does not exist.Lookup by id/key returned nothing, or the URL does not match any registered route.
already_exists409conflictA resource with the same unique identity already exists.Pre-check found a duplicate, or a concurrent insert raised a unique-constraint violation (Prisma P2002).
conflict409conflictConcurrent modification detected; the client should retry with the latest version.Serializable-isolation write-skew aborted the transaction (Prisma P2034) or an idempotent operation found inconsistent state.
insufficient_balance402insufficient_quotaAccount credits balance is below the requested amount.Account-level balance check on withdraw or inference billing.
spending_limit_reached429rate_limit_errorPer-key daily or monthly spending cap has been exhausted.API key carries a `dailyLimit` or `monthlyLimit` and the increment would exceed it.
all_keys_exhausted502server_errorNo contributor key has remaining capacity for the routed model.Router tried every healthy contributor key and each was unavailable, rate-limited, or quarantined.
rate_limited429rate_limit_errorCaller exceeded the rate-limit window for this endpoint.Throttle interceptor or per-pool RPM/TPM cap rejected the request.
stream_interrupted500server_errorThe SSE stream aborted before completion.Upstream provider connection dropped mid-stream; emitted as an error chunk inside the SSE response, not a status code.
contract_error500server_errorAn on-chain call reverted or could not be confirmed.ethers tx broadcast or wait() failed, or a receipt returned status 0.
internal_error500server_errorUnexpected server-side failure.Unhandled exception; AppErrorFilter's final fallback. Always paired with a server log.
service_unavailable503server_errorA required dependency is down or misconfigured.Redis (replay-store, rate limits), Oracle (no confirmed revision), or a downstream service is unreachable. Fail-closed by design on security-critical paths.

Model Context Protocol (MCP)

AI agents can query the oracle, estimate costs, and analyze sessions through the official Compute Finance MCP server. Stdio transport, no API key required.

Install in any MCP client: npx @compute-finance/mcp

Client config snippet: {"command":"npx","args":["@compute-finance/mcp"]}

Claude Code one-liner (registers MCP + skills + cost hook): npx @compute-finance/mcp setup

Read-only tools across five layers:

  • data — Live oracle data — basket, price, SCU, CPI, reconstitutions
  • compute — Cost estimation and cross-model comparison
  • render — Pre-formatted session reports used by the Claude Code skills
  • analyze — Raw JSON session and per-inference breakdown
  • history — Aggregate stats across logged sessions

Bundled Claude Code slash skills:

  • /cf-session-management — Measured post-session cost analysis
  • /cf-session-consumption — Per-inference token spend breakdown
  • /cf-active-sessions — Multi-session overview across projects

Reference: github.com/compute-finance/mcp · /.well-known/mcp/server-card.json

Compute Finance ID

Your Compute Finance ID (CF ID) is your identity across all Compute Finance surfaces. Created on first sign-in via email or wallet, it ties together your profile, points balance, and referral code into a single record.

What CF ID stores

FieldDescription
cf_idPublic identifier — format: cf_usr_XXXXXXXXXXXX
emailUsed for notifications. Optional for wallet-only sign-in.
wallet_addressOn-chain address on Base. Created via account abstraction or connected externally.
display_nameUser-chosen name. Defaults to a truncated email or wallet address.
referral_codePermanent 8-character code — format: cf_ref_XXXXXXXX
points_balanceCurrent points total, denormalized from the points ledger

Sign-in flows

Two sign-in methods, both produce a CF ID:

  • Email — Enter your email, receive a 6-digit code, verify. A smart wallet is created on Base and associated with your email. No seed phrase required.
  • Wallet — Connect MetaMask, Coinbase Wallet, or any WalletConnect-compatible wallet. Sign a SIWE message. Your wallet address becomes your CF ID's primary identifier.

Both flows converge on the same CF ID record. You can add an email to a wallet-only account later from your settings.

Points

Points track your engagement with Compute Finance — signup, daily logins, oracle interactions, and referrals. As your balance grows, you unlock higher tiers. Points are append-only and recorded in a public ledger per CF ID.

Tiers

TierMin Points
Explorer0
Starter500
Builder2,000
Architect5,000
Titan15,000

How points are earned

V1 supports six earning channels. New channels will be added in future versions and announced via the changelog.

ChannelAmountTriggerFrequency
Signup bonus100 ptsCF ID createdOnce per account
Referral (referrer)250 ptsReferred user completes signupPer successful referral
Referral (referred user)50 ptsUser signs up via referral linkOnce per account
Daily login10 ptsUser logs in on a new calendar day (UTC)Once per day
7-day login streak bonus50 ptsUser logs in 7 consecutive daysOnce per streak completion
Oracle interaction5 ptsUser views a unique model’s pricing on the oracle pageUp to 12 per day (one per model)

Ledger model

The points ledger is an append-only log. No entries are ever updated or deleted. Your canonical points balance is the sum of all your ledger entries. The denormalized points_balance field on your CF ID record is a performance optimization that is reconciled periodically.

FieldTypeDescription
idUUIDPrimary key
cf_idString (FK)The user who earned the points
typeEnumOne of: signup, referral, referral_welcome, daily_login, streak_bonus, oracle_interaction
amountIntegerPoints earned (always positive — append-only, no negative entries)
sourceStringHuman-readable source descriptor (e.g. referral:cf_usr_a3k9m2x7p1b4, oracle:gpt-5.5)
created_atTimestampWhen the points were earned

The append-only design means: no points can be silently removed or altered, the complete earning history is preserved and queryable, and any future audit can reconstruct the exact points balance at any point in time.

Streaks

Use Compute Finance on consecutive calendar days to build a streak. Longer streaks earn bonus points. Your current streak and longest streak are shown in your profile. Streaks reset if you miss a calendar day (UTC).

Leaderboard

The top 50 users by total points are displayed on the public leaderboard, refreshed periodically. The leaderboard shows display name and points only — no other profile data is exposed.

Non-transferability

Points are non-transferable in V1. They have no monetary value, are not convertible to any token or currency, and cannot be sold, traded, or assigned to another account. A points-to-credits conversion ratio for V2 will be announced before V2 ships, and the append-only ledger ensures all V1 earning history is preserved and can be converted accurately at that time.

API endpoints

Points data is queryable via the following endpoints. Authentication is required for endpoints that return personal data; the leaderboard is public.

GET/v1/pointsYour points summary (total, tier, current streak, longest streak)
GET/v1/points/historyPaginated points ledger entries for your CF ID
GET/v1/points/leaderboardTop 50 users by total points (public, no auth)

Referral Program

Every CF ID includes a unique referral code (8 characters). Share your link to invite new users — both sides earn points. The program uses first-touch attribution with a 30-day cookie window.

Referral rewards

EventPointsWho Earns
New user signs up with your code50 ptsNew user (welcome bonus)
You referred a new user250 ptsReferrer

Sharing your referral link

// Referral URL format
https://compute.finance/r/cf_ref_XXXXXXXX

Find your referral code in your Compute Finance ID settings. Share buttons are available for X, LinkedIn, Telegram, and copy-to-clipboard. The link uses a 30-day attribution cookie — referrals count when the referred user creates a CF ID within 30 days of clicking your link.

Attribution model

Referral attribution is first-touch with a 30-day window. The first referral link a user clicks is the one credited if they sign up within the window. Subsequent referral links from other users do not overwrite the original cookie.

How it works step by step:

  • A user visits https://compute.finance/r/cf_ref_XXXXXXXX
  • The server redirects to https://compute.finance and sets a cookie: cf_ref=cf_ref_XXXXXXXX with Max-Age=2592000 (30 days), SameSite=Lax, Secure
  • The click is recorded in the database with the referral code, timestamp, hashed IP address, and user agent
  • If the user signs up within 30 days — even if they navigate directly to https://compute.finance without the referral link — the cookie is read during CF ID creation and the referral relationship is stored
  • If the user has already clicked a different referral link, the first-touch cookie is preserved

Anti-gaming rules

The referral program enforces several rules to prevent farming and abuse. None of these rules surface error messages — invalid referrals are silently ignored to avoid leaking information about user accounts.

RuleImplementation
No self-referralIf the cf_ref cookie matches the signing-up user's own referral code, the referral is silently ignored
Email deduplicationOne CF ID per email — a user cannot create multiple accounts with the same email to farm referral points
IP rate limitingMaximum 10 CF ID creations per IP address per 24 hours, preventing mass account creation from a single source
Click rate limitingMaximum 100 clicks per referral code per hour. Clicks beyond the limit are not recorded.
Disposable email detectionOptional: reject signups from known disposable email domains (mailinator, guerrillamail, etc.)

Referral dashboard

Your CF ID profile includes a referral dashboard showing:

  • Total referral link clicks (all-time)
  • Total signups from your referral link
  • Conversion rate (signups ÷ clicks)
  • Total points earned from referrals
  • List of referred users (display name or truncated email, signup date, status: pending or confirmed)

Status transitions

A referral has two possible states. Points are awarded when the status transitions from pending to confirmed:

  • pending — The user clicked the referral link but has not yet completed signup
  • confirmed — The user has created a CF ID. Points are awarded to both sides within 60 seconds of confirmation.

The CPI is a public benchmark, not financial advice. Data is sourced from public provider pricing pages, may not reflect negotiated enterprise rates, and does not constitute an offer of any token or security. Compute Finance is independent and not affiliated with any of the providers whose public pricing is tracked in the index.

Read the full disclaimer →

Have a question about the index, the basket, or the methodology?

Ask AI about compute.finance

AI compute, priced.

Join the first wave. Get early access to the Compute Price Index