Skip to content
SF·SIX
SF·SIX / DEVELOPERS

SF·SIX API: Live AI Model Prices, Usage and Prediction Market Data

Free, keyless JSON API for dated AI model API prices, price history, OpenRouter usage snapshots, benchmarks and Hedera testnet prediction market data. OpenAPI 3.1 spec, curl quickstart, rate limits and attribution rules.

Testnet only. Prediction markets and model token offerings run on the Hedera testnet with test funds that have no real value. Prices are dated observations from named sources, not quotes; nothing here is investment advice.

Base URL
https://sfsi.exchange/api/aiex/v2
OpenAPI 3.1
/api/aiex/v2/openapi.json
Authentication
None: public, read-only
Format
JSON (CSV export), br/gzip
Endpoints
29 GET operations
Version
1.3.0 · updated

Quickstart

No key and no sign-in. Call the API from a server, script, notebook or agent (browsers on other sites are not granted CORS access). Every price names its source and observation time; keep both when you store or show it.

# 1. Is there a new catalog? (tiny; poll this instead of the catalog)
curl -s 'https://sfsi.exchange/api/aiex/v2/catalog/version'

# 2. Every model with dated prices (large: always ask for compression)
curl -s --compressed -D headers.txt 'https://sfsi.exchange/api/aiex/v2/catalog?community=1' -o catalog.json

# 3. Revalidate later with the ETag from headers.txt: 304 and no body when unchanged
curl -s --compressed -o /dev/null -w '%{http_code}\n' 'https://sfsi.exchange/api/aiex/v2/catalog?community=1' -H 'If-None-Match: "cat-full-…"'

# 4. The headline price of one model (jq), then all of its offers and its observed price history
jq '.models[] | select(.id=="anthropic/claude-opus-5.5") | .headlineOfferId as $h | .offers[] | select(.id==$h) | {provider, input, output, unit, observedAt, sourceUrl}' catalog.json
curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/catalog/models/anthropic%2Fclaude-opus-5.5'
curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/price-history?model=anthropic%2Fclaude-opus-5.5'

# 5. Price cuts, increases and new listings of the last 30 days
curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/changes?kind=price'

# 6. OpenRouter daily token rankings (the NATDAQ input) and testnet model markets
curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/source-snapshots/usage.json'
curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/prediction-markets/models?tradable=1&limit=10'

Import the OpenAPI document into Postman, Insomnia or an OpenAPI client generator, or give it to an AI agent as a tool description.

Endpoint reference

Generated from the OpenAPI document. Response bodies are open objects: new members may be added without notice, documented members keep their meaning. Errors are JSON ({"error":{"code":"…"}} or {"error":"…"}).

Catalog and prices

Models, dated price observations, changes, history, benchmarks and exports.

GET /api/aiex/v2/catalog

Model and price catalog. Every rights-qualified model with its dated price observations, the sources behind them, coverage counts and units. Default: models with connected markets; community=1: the full catalog incl. community references; view=slim / view=recent: compact encodings for first paint and the newest releases; view=index (with or without community=1): a small list and search projection with each model's headline offer only. Large (the full catalog is tens of MB uncompressed): prefer view=index plus /catalog/models/{id}, revalidate with If-None-Match, or poll /catalog/version.

Parameters of GET /api/aiex/v2/catalog
ParameterInRequiredDescription
communityquerynoFull catalog, including community catalog references (with view=index: index every model).one of 1
viewquerynoslim: lossless compact encoding of the community catalog; recent: newest releases only (compact); index: lossy list and search projection.one of slim, recent, index
  • 200 The catalog (default and community=1: Catalog; view=slim|recent: CompactCatalog; view=index: CatalogIndex). Unrecognised query values select the default view (never a 400). An empty models list is still a 200 (with X-SFAIE-Catalog-Diagnostic).
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 The catalog is initializing or temporarily unavailable.

Rate limit: 120 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-v2-public-read); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: private, max-age=30, stale-while-revalidate=300 or shorter, never past the data's qualification. Rights: Offers appear only while their source is current and its rights allow redistribution; a revocation removes them on the next request (never served from a shared cache). Each offer names its source, sourceUrl and observedAt: attribute the source when you republish a value. models.dev community references are MIT-licensed catalog data, not provider-confirmed prices.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/catalog?view=index'

GET /api/aiex/v2/catalog/models/{id}

One model with all of its offers. One model of the catalog with every offer, the sources those offers come from, and the catalog-level coverage, units and policy, cut from the same snapshot as /catalog. {id} is the model's SF·SIX slug, its catalog id (URL-encoded: ids contain /) or an alias; connected-market models are matched before community references. canonical: false means you used an id or alias: link to slug.

Parameters of GET /api/aiex/v2/catalog/models/{id}
ParameterInRequiredDescription
idpathyesSlug, URL-encoded catalog id (anthropic%2Fclaude-opus-5.5) or alias. No control characters.at most 500 characters
  • 200 The model.
  • 400 Empty, over 500 characters or containing control characters.
  • 404 No model matches (not_found), or no source may currently be republished (rights_unavailable).
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 The catalog is initializing or temporarily unavailable.

Rate limit: 120 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-v2-public-read); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: private, max-age=30, stale-while-revalidate=300 or shorter, never past the data's qualification. Rights: Offers appear only while their source is current and its rights allow redistribution; a revocation removes them on the next request (never served from a shared cache). Each offer names its source, sourceUrl and observedAt: attribute the source when you republish a value. models.dev community references are MIT-licensed catalog data, not provider-confirmed prices.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/catalog/models/anthropic%2Fclaude-opus-5.5'

GET /api/aiex/v2/catalog/version

Catalog version probe. A tiny probe: poll it and refetch the catalog only when catalogVersion changes. Also returns the current ETag of each catalog view and source freshness.

  • 200 Current catalog version.
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 The catalog is initializing.

Rate limit: 120 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-v2-public-read); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/catalog/version'

GET /api/aiex/v2/freshness

Source freshness. Per-source last successful refresh, age and thresholds, and the newest price observation.

  • 200 Freshness state.
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 Freshness data temporarily unavailable.

Rate limit: 120 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-v2-public-read); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/freshness'

GET /api/aiex/v2/changes

Observed price changes. The latest 250 observed material changes (price, status, unit, pricing rules or a new offer) within the 30-day retention window, newest first, optionally for one model. kind=price: list-price cuts and increases (at most 1,000) and new priced listings (at most 300) instead, each with its kind; the scan is shared for 5 minutes. Only sources that currently permit redistribution are included.

Parameters of GET /api/aiex/v2/changes
ParameterInRequiredDescription
modelquerynoExchange model id (e.g. anthropic/claude-opus-5.5). Not with kind.at most 400 characters
kindquerynoprice: material price changes and new priced listings across all models.one of price
  • 200 Changes, newest first (a JSON array of PriceChange; with kind=price of MaterialChange).
  • 400 model longer than 400 characters, or kind other than price or combined with model.
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 History is temporarily unavailable.

Rate limit: 120 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-v2-public-read); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: private, max-age=30, stale-while-revalidate=300. Rights: Offers appear only while their source is current and its rights allow redistribution; a revocation removes them on the next request (never served from a shared cache). Each offer names its source, sourceUrl and observedAt: attribute the source when you republish a value. models.dev community references are MIT-licensed catalog data, not provider-confirmed prices.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/changes?model=anthropic%2Fclaude-opus-5.5'

GET /api/aiex/v2/changes/latest

Latest change per model. The newest material change per model within the retention window (the exchange sitemap's lastmod). The grouped scan is shared for 5 minutes; source rights are re-checked on every request.

  • 200 [model id, newest change] pairs.
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 History is temporarily unavailable.

Rate limit: 120 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-v2-public-read); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: private, max-age=30, stale-while-revalidate=300. Rights: Offers appear only while their source is current and its rights allow redistribution; a revocation removes them on the next request (never served from a shared cache). Each offer names its source, sourceUrl and observedAt: attribute the source when you republish a value. models.dev community references are MIT-licensed catalog data, not provider-confirmed prices.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/changes/latest'

GET /api/aiex/v2/price-history

Price history of a model. The observed price step series of every offer of one model (30-day retention), plus separately labeled community-reported list price history.

Parameters of GET /api/aiex/v2/price-history
ParameterInRequiredDescription
modelqueryyesExchange model id (no surrounding whitespace or control characters).at most 500 characters
  • 200 Price history.
  • 400 Missing or invalid model.
  • 404 No currently permitted offers for this model.
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 History is temporarily unavailable.

Rate limit: 120 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-v2-public-read); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: no-store. Rights: Offers appear only while their source is current and its rights allow redistribution; a revocation removes them on the next request (never served from a shared cache). Each offer names its source, sourceUrl and observedAt: attribute the source when you republish a value. models.dev community references are MIT-licensed catalog data, not provider-confirmed prices. Community series name their repository and licence; cite them as such.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/price-history?model=anthropic%2Fclaude-opus-5.5'

GET /api/aiex/v2/benchmarks

Published benchmark scores. Published benchmark scores (Artificial Analysis, OpenRouter) keyed by modelKey, each with its citation, evaluation configuration and date. Not an SF·SIX quality score.

  • 200 Benchmarks.
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 Benchmark data temporarily unavailable.

Rate limit: 120 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-v2-public-read); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: private, max-age=30, stale-while-revalidate=300 or shorter, never past the data's qualification. Rights: Scores belong to the named benchmark publisher. Republish them only with the citation (and licence, where given) and the evaluation date; a source whose rights or storage are unavailable is listed in sources as unavailable and contributes no scores. A source whose last refresh failed, or whose last successful refresh is older than 48 hours, is also listed unavailable; its scores stay in benchmarks with their dates, and SF·SIX pages publish none of them.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/benchmarks'

GET /api/aiex/v2/export

Catalog as CSV. The full catalog (incl. community references), one row per offer, read fresh on every request. Columns: Model, Developer, Provider, Channel, Price status, Currency, Unit, Input, Output, Cache read, Unit price, Source (URL), Provenance, Observed at, Tier, Region. Every cell is quoted; a cell starting with =, +, - or @ is prefixed with '. Expensive: 10 requests per minute, refused (503 RATE_LIMIT_UNAVAILABLE, Retry-After: 30) when the limiter cannot be consulted.

  • 200 CSV with a header row and CRLF line endings; columns may be appended, never reordered.
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 Export temporarily unavailable ({error}), or the rate limiter is unavailable (RATE_LIMIT_UNAVAILABLE, Retry-After: 30).

Rate limit: 10 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-v2-export); over budget: 429 RATE_LIMITED with Retry-After: 60. Refused (503) while the limiter is unavailable. Cache-Control: no-store. Rights: Offers appear only while their source is current and its rights allow redistribution; a revocation removes them on the next request (never served from a shared cache). Each offer names its source, sourceUrl and observedAt: attribute the source when you republish a value. models.dev community references are MIT-licensed catalog data, not provider-confirmed prices.

curl -s -o sfsix-catalog.csv 'https://sfsi.exchange/api/aiex/v2/export'

Usage data and NATDAQ

Rights-qualified usage snapshots, model identity history and NATDAQ index evidence.

GET /api/aiex/v2/source-snapshots/{file}

Rights-qualified source snapshot. usage.json: OpenRouter daily token rankings (the NATDAQ input); modalities.json: weekly request counts for image, video, speech and transcription models; model-usage.json: weekly per-model request series by modality; opencode.json: opencode public usage data (not part of NATDAQ).

Parameters of GET /api/aiex/v2/source-snapshots/{file}
ParameterInRequiredDescription
filepathyesSnapshot file.one of usage.json, opencode.json, modalities.json, model-usage.json
  • 200 The snapshot.
  • 404 Unknown snapshot file.
  • 503 Not currently redistributable or past its maximum age (reason: rights_unavailable: withdrawn, drop any copy; daily token usage 7 days after its last complete day, the weekly request feeds 21 days after their last complete week), missing or failing validation (or snapshot storage is not configured).

Rate limit: No per-client budget. Cache-Control: no-store. Rights: Served only while the source's retention AND redistribution rights are approved and unexpired (re-checked before and after every read); otherwise 503. Attribute OpenRouter (or opencode) and link the source page; the license field states the licence the source asserts for request feeds, if any.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/source-snapshots/usage.json'

GET /api/aiex/v2/model-identity-history

Model identity timeline. When a source listed or stopped listing a model id, and what canonical identity it carried, as recorded by SF·SIX (paged, 50 events per page). With at (and optionally knownAt) it also resolves the identity in force at that time as SF·SIX knew it then.

Parameters of GET /api/aiex/v2/model-identity-history
ParameterInRequiredDescription
sourcequeryyesSource catalog.one of openrouter, huggingface, fal, models.dev
modelIdqueryyesThe source's model id.at most 500 characters
atquerynoResolve the identity in force at this instant (exact toISOString() form, e.g. 2026-09-22T00:00:00.000Z).date-time
knownAtquerynoKnowledge cutoff for the resolution (requires at).date-time
revisionquerynoHead revision the client paged from; 409 if the history changed since.pattern ^(0|[1-9]\d{0,3}|10000)$
beforequerynoReturn events before this revision (requires revision).pattern ^[1-9]\d{0,4}$
  • 200 Identity timeline.
  • 400 Invalid query, pagination without its revision, or a future cutoff.
  • 409 History changed since revision: refresh.
  • 503 Identity history is not enabled or temporarily unavailable.

Rate limit: No per-client budget. Cache-Control: no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/model-identity-history?source=openrouter&modelId=openai%2Fgpt-5'

GET /api/aiex/v2/natdaq/frozen-baskets

Frozen NATDAQ baskets. The frozen basket members and base tokens behind listed NATDAQ basket markets. SF·SIX runs on the Hedera testnet. Prediction markets, model token offerings and their prices use test funds (tUSD, test HBAR) with no real value; nothing here is investment advice or an executable quote.

  • 200 Baskets (disabled with an empty list when markets are off).
  • 400 Any query parameter (invalid_request).
  • 503 Baskets temporarily unavailable.

Rate limit: No per-client budget. Cache-Control: no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/natdaq/frozen-baskets'

GET /api/aiex/v2/natdaq/evidence/{sha256}

NATDAQ evidence package. A signed, provisional NATDAQ benchmark package with its replayable evidence, readable while every observation source still permits redistribution and the signer is trusted. Final packages are not public.

Parameters of GET /api/aiex/v2/natdaq/evidence/{sha256}
ParameterInRequiredDescription
sha256pathyesPackage SHA-256.pattern ^[a-f0-9]{64}$
  • 200 The package.
  • 400 Invalid hash.
  • 403 Not available under current source or signer permissions.
  • 404 No such package.

Rate limit: No per-client budget. Cache-Control: no-store. Rights: Re-checks every observation source's redistribution right and the signer key on each request.

Prediction markets (testnet)

Hedera testnet prediction markets on AI model prices and usage (test funds only).

GET /api/aiex/v2/prediction-markets

Open prediction markets. Open, funded prediction markets with their resolution rules, 10 per page (cursor pagination). SF·SIX runs on the Hedera testnet. Prediction markets, model token offerings and their prices use test funds (tUSD, test HBAR) with no real value; nothing here is investment advice or an executable quote.

Parameters of GET /api/aiex/v2/prediction-markets
ParameterInRequiredDescription
afterquerynoCursor: nextCursor of the previous page.pattern ^[A-Za-z0-9_-]{1,120}$
limitquerynoPage size 1–10 (default 10).pattern ^(?:[1-9]|10)$
  • 200 A page of markets.
  • 400 Unknown, repeated or malformed parameter (invalid_directory_query).
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 Busy (prediction_directory_busy, Retry-After: 1) or unavailable.

Rate limit: 20 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-prediction-directory); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: private, no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/prediction-markets'

GET /api/aiex/v2/prediction-markets/models

Model markets directory. Models with weekly price and usage markets: whether each is tradable (and why not), market counts, volume and next close. SF·SIX runs on the Hedera testnet. Prediction markets, model token offerings and their prices use test funds (tUSD, test HBAR) with no real value; nothing here is investment advice or an executable quote.

Parameters of GET /api/aiex/v2/prediction-markets/models
ParameterInRequiredDescription
qquerynoSearch text.at most 100 characters
sortquerynoOrder (default activity).one of activity, closing, name
limitquerynoPage size (default 24).1–60
offsetquerynoOffset (default 0).0–100000
tradablequeryno1: tradable models only.one of 1, 0
  • 200 Matching models.
  • 400 Invalid or unknown parameter (invalid_query).
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 Model markets are disabled (model_markets_disabled) or unavailable.

Rate limit: 240 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-model-markets-read); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: public, max-age=10.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/prediction-markets/models?tradable=1&limit=10'

GET /api/aiex/v2/prediction-markets/models/coverage

Model market coverage. How many catalog models are tradable per ladder, and why the others are not.

  • 200 Coverage.
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 Model markets are disabled or unavailable.

Rate limit: 240 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-model-markets-read); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: public, max-age=60.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/prediction-markets/models/coverage'

GET /api/aiex/v2/prediction-markets/models/{modelId}

Markets of one model. Current reference values (average provider price, daily tokens), the provider breakdown and every ladder of weekly strikes for one model. Unknown models answer 200 with known: false. SF·SIX runs on the Hedera testnet. Prediction markets, model token offerings and their prices use test funds (tUSD, test HBAR) with no real value; nothing here is investment advice or an executable quote.

Parameters of GET /api/aiex/v2/prediction-markets/models/{modelId}
ParameterInRequiredDescription
modelIdpathyesURL-encoded model id (openai%2Fgpt-5).at most 350 characters
  • 200 Model markets.
  • 400 Invalid model id or any query parameter.
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 Model markets are disabled or unavailable.

Rate limit: 240 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-model-markets-read); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/prediction-markets/models/openai%2Fgpt-5'

GET /api/aiex/v2/prediction-markets/{market}/data

Order book, trades and candles. Aggregate YES/NO order book, the latest confirmed trades (with HashScan testnet links) and YES price candles of one market. No order ids, owners or wallets. SF·SIX runs on the Hedera testnet. Prediction markets, model token offerings and their prices use test funds (tUSD, test HBAR) with no real value; nothing here is investment advice or an executable quote.

Parameters of GET /api/aiex/v2/prediction-markets/{market}/data
ParameterInRequiredDescription
marketpathyesChain market id (0x + 64 hex) or listing id.pattern ^(0x[a-f0-9]{64}|[A-Za-z0-9_-]{1,120})$
rangequerynoCandle range (default 1D).one of 1H, 1D, 1W, ALL
  • 200 Market data (disabled/not_installed when markets are off).
  • 400 Invalid market reference or query.
  • 404 Unknown market (market_not_found).
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 Busy (Retry-After: 1) or unavailable.

Rate limit: 240 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-prediction-market-data); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: public, max-age=2 or no-store.

GET /api/aiex/v2/market-activity/recent

Recent trades across venues. The latest confirmed testnet trades across prediction markets and model token venues. Never exposes user ids, order ids or wallets. SF·SIX runs on the Hedera testnet. Prediction markets, model token offerings and their prices use test funds (tUSD, test HBAR) with no real value; nothing here is investment advice or an executable quote.

Parameters of GET /api/aiex/v2/market-activity/recent
ParameterInRequiredDescription
limitquerynoTrades to return, 1–100 (default 30).pattern ^\d{1,3}$
kindquerynoVenue filter (default all).one of all, prediction, model_token, open_market
  • 200 Recent trades.
  • 400 Invalid query (invalid_market_activity_query).
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 Busy (Retry-After: 1) or unavailable.

Rate limit: 120 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-market-activity); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: public, max-age=3 or no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/market-activity/recent?limit=10'

GET /api/aiex/v2/market-activity/summary

24-hour market summary. 24-hour trade counts and volumes (trader counts below 5 are withheld). SF·SIX runs on the Hedera testnet. Prediction markets, model token offerings and their prices use test funds (tUSD, test HBAR) with no real value; nothing here is investment advice or an executable quote.

  • 200 Summary.
  • 400 Any query parameter.
  • 429 Per-client budget exceeded (RATE_LIMITED). Wait Retry-After seconds.
  • 503 Busy or unavailable.

Rate limit: 120 requests per minute per client IP address (IPv4) or IPv6 /64 prefix (budget aiex-market-activity); over budget: 429 RATE_LIMITED with Retry-After: 60. Cache-Control: public, max-age=10 or no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/market-activity/summary'

Model token offerings (testnet)

Hedera testnet model token offerings and their aftermarkets (test funds only).

GET /api/aiex/v2/ito/status

Model token offering status. Whether model token offerings are available on this deployment, and their fee and royalty parameters. SF·SIX runs on the Hedera testnet. Prediction markets, model token offerings and their prices use test funds (tUSD, test HBAR) with no real value; nothing here is investment advice or an executable quote.

  • 200 Status.

Rate limit: No per-client budget. Cache-Control: private, no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/ito/status'

GET /api/aiex/v2/ito/offerings

Model token offerings. Published model token offerings, newest first, in pages of up to 100 (keyset cursor pagination: offerings launched while you page never repeat or shift a page). Without parameters the first page is returned. SF·SIX runs on the Hedera testnet. Prediction markets, model token offerings and their prices use test funds (tUSD, test HBAR) with no real value; nothing here is investment advice or an executable quote.

Parameters of GET /api/aiex/v2/ito/offerings
ParameterInRequiredDescription
limitquerynoPage size 1–100 (default 100); larger values are capped at 100, 0 is invalid_limit.pattern ^\d{1,6}$
cursorquerynoOpaque cursor: nextCursor of the previous page.pattern ^[A-Za-z0-9_-]{1,200}$
  • 200 A page of offerings.
  • 400 Malformed limit (invalid_limit) or a cursor this API did not issue (invalid_cursor).
  • 409 Per-client read budget exceeded (rate_limited).
  • 503 Offerings are not configured (ITO_NOT_CONFIGURED) or unavailable.

Rate limit: 240 requests per minute per client IP address, counted per API instance (budget ito-read); over budget: 409 rate_limited. Cache-Control: private, no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/ito/offerings'

GET /api/aiex/v2/ito/offerings/{id}

One model token offering. An offering with its aftermarket order book (aggregated), recent trades and hourly candles. SF·SIX runs on the Hedera testnet. Prediction markets, model token offerings and their prices use test funds (tUSD, test HBAR) with no real value; nothing here is investment advice or an executable quote.

Parameters of GET /api/aiex/v2/ito/offerings/{id}
ParameterInRequiredDescription
idpathyesOffering id (lowercase UUID).uuid
  • 200 The offering.
  • 404 Unknown or unpublished offering (offering_not_found), or an id that is not a UUID (invalid_id).
  • 409 Per-client read budget exceeded (rate_limited).
  • 503 Offerings are not configured or unavailable.

Rate limit: 240 requests per minute per client IP address, counted per API instance (budget ito-read); over budget: 409 rate_limited. Cache-Control: private, no-store.

Exchange contracts

Feature flags, versioned measurement and release contracts, status and network fees.

GET /api/aiex/v2/openapi.json

This OpenAPI document. The OpenAPI 3.1 description of the public read API.

  • 200 OpenAPI document.

Rate limit: No per-client budget. Cache-Control: public, max-age=3600.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/openapi.json'

GET /api/aiex/v2/capabilities

Enabled exchange features. Which exchange features this deployment has enabled and why the others are not. SF·SIX runs in research mode: no paid inference, custody or real-money trading.

  • 200 Capabilities.
  • 500 Unexpected server failure (INTERNAL_ERROR); a later retry may succeed. The body names the request but never the cause.

Rate limit: No per-client budget. Cache-Control: no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/capabilities'

GET /api/aiex/v2/measurement-contract

Measurement contract. The versioned measurement domains the exchange keeps apart, and how each is deduplicated (static).

  • 200 Measurement contract.
  • 500 Unexpected server failure (INTERNAL_ERROR); a later retry may succeed. The body names the request but never the cause.

Rate limit: No per-client budget. Cache-Control: no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/measurement-contract'

GET /api/aiex/v2/release-policy

Release policy. The versioned release gates in force (static).

  • 200 Release policy.
  • 500 Unexpected server failure (INTERNAL_ERROR); a later retry may succeed. The body names the request but never the cause.

Rate limit: No per-client budget. Cache-Control: no-store.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/release-policy'

GET /api/aiex/v2/status

Platform status. Redacted public status of the exchange and each feature.

  • 200 Status.
  • 503 Status is disabled or unavailable (platform_health_disabled, platform_status_unavailable).

Rate limit: No per-client budget. Cache-Control: public, max-age=30.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/status'

GET /api/aiex/v2/network-fees/estimates

Network fee estimates. Per-operation Hedera network fee estimates (USD, incl. the published markup) and the fee policy. SF·SIX runs on the Hedera testnet. Prediction markets, model token offerings and their prices use test funds (tUSD, test HBAR) with no real value; nothing here is investment advice or an executable quote.

  • 200 Estimates.
  • 503 Network fees are not configured (network_fees_unavailable).

Rate limit: No per-client budget. Cache-Control: public, max-age=60.

curl -s --compressed 'https://sfsi.exchange/api/aiex/v2/network-fees/estimates'

Rate limits

Budgets are per client: an IPv4 address or an IPv6 /64. The catalog, single-model reads, version probe, freshness, changes, price history and benchmarks share one budget of 120 requests per minute; the CSV export allows 10 per minute; the prediction market directory 20 per minute; other market reads 120–240 per minute. Over budget you get 429 with Retry-After (seconds) and {"error":{"code":"RATE_LIMITED"}}. Model token offering reads answer 409 rate_limited instead.

Need more? Revalidate instead of refetching (a 304 is a few hundred bytes), poll /catalog/version rather than the catalog, read ?view=index and /catalog/models/{id} instead of the full catalog, and back off on 429 and 503.

Every response carries an X-Request-Id header, and error bodies repeat it as requestId. Quote it when you report a problem. You may send your own well-formed X-Request-Id.

Caching and ETags

Catalog-class data (catalog, changes, benchmarks) is sent with Cache-Control: private, max-age=30, stale-while-revalidate=300 and a strong ETag. Reuse it in your own client, but do not put it in a shared cache, CDN or public mirror: a source can withdraw its redistribution rights at any time, and the API stops serving that data on the next request.

Every 200 carries an ETag; send it back as If-None-Match for a 304 Not Modified. Live views (version probe, freshness, price history, market data) are no-store or cached for seconds. Large bodies are compressed (br or gzip) when you send Accept-Encoding.

Attribution and licensing

SF·SIX does not grant a licence to the data, and none is implied by this API being free and public. The values are observations of third-party sources, each under its own terms:

  • Every price names its source, sourceUrl and observedAt. When you republish a price, cite that source (for example “OpenRouter, observed 2026-10-13”) and link the source URL. Community references (provenance: "community") are models.dev catalog data under the MIT licence, not provider-confirmed prices.
  • Benchmark scores belong to their publisher (Artificial Analysis, OpenRouter): keep the citation, evaluation configuration and date.
  • Usage snapshots name their source (OpenRouter rankings, opencode) and the licence the source itself states for request feeds, if any (license); “Unverified for public-page feeds” means no licence was confirmed.
  • Price history from LiteLLM and models.dev is labeled as community-reported, with its repository and licence.
  • Prediction market and model token data are SF·SIX testnet records with no monetary value.

Do not present SF·SIX data as provider quotes or as a guarantee of availability, and attribute SF·SIX (“via SF·SIX, sfsi.exchange”) when you use its compilation, rankings or indexes. Use of the API is subject to ColdAI’s terms; how the data is collected is described in Sources, methodology and editorial policy.

Changelog

Additive changes keep the version line; a breaking change gets a new major version and an entry here first.

Updated · OpenAPI JSON · llms.txt · Methodology