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.
| Parameter | In | Required | Description |
|---|---|---|---|
community | query | no | Full catalog, including community catalog references (with view=index: index every model).one of 1 |
view | query | no | slim: lossless compact encoding of the community catalog; recent: newest releases only (compact); index: lossy list and search projection.one of slim, recent, index |
200The catalog (default andcommunity=1:Catalog;view=slim|recent:CompactCatalog;view=index:CatalogIndex). Unrecognised query values select the default view (never a 400). An emptymodelslist is still a 200 (withX-SFAIE-Catalog-Diagnostic).429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503The 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.
| Parameter | In | Required | Description |
|---|---|---|---|
id | path | yes | Slug, URL-encoded catalog id (anthropic%2Fclaude-opus-5.5) or alias. No control characters.at most 500 characters |
200The model.400Empty, over 500 characters or containing control characters.404No model matches (not_found), or no source may currently be republished (rights_unavailable).429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503The 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.
200Current catalog version.429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503The 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.
200Freshness state.429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503Freshness 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.
| Parameter | In | Required | Description |
|---|---|---|---|
model | query | no | Exchange model id (e.g. anthropic/claude-opus-5.5). Not with kind.at most 400 characters |
kind | query | no | price: material price changes and new priced listings across all models.one of price |
200Changes, newest first (a JSON array ofPriceChange; withkind=priceofMaterialChange).400modellonger than 400 characters, orkindother thanpriceor combined withmodel.429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503History 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.429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503History 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.
| Parameter | In | Required | Description |
|---|---|---|---|
model | query | yes | Exchange model id (no surrounding whitespace or control characters).at most 500 characters |
200Price history.400Missing or invalidmodel.404No currently permitted offers for this model.429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503History 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.
200Benchmarks.429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503Benchmark 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.
200CSV with a header row and CRLF line endings; columns may be appended, never reordered.429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503Export 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).
| Parameter | In | Required | Description |
|---|---|---|---|
file | path | yes | Snapshot file.one of usage.json, opencode.json, modalities.json, model-usage.json |
200The snapshot.404Unknown snapshot file.503Not 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.
| Parameter | In | Required | Description |
|---|---|---|---|
source | query | yes | Source catalog.one of openrouter, huggingface, fal, models.dev |
modelId | query | yes | The source's model id.at most 500 characters |
at | query | no | Resolve the identity in force at this instant (exact toISOString() form, e.g. 2026-09-22T00:00:00.000Z).date-time |
knownAt | query | no | Knowledge cutoff for the resolution (requires at).date-time |
revision | query | no | Head revision the client paged from; 409 if the history changed since.pattern ^(0|[1-9]\d{0,3}|10000)$ |
before | query | no | Return events before this revision (requires revision).pattern ^[1-9]\d{0,4}$ |
200Identity timeline.400Invalid query, pagination without its revision, or a future cutoff.409History changed sincerevision: refresh.503Identity 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.
200Baskets (disabledwith an empty list when markets are off).400Any query parameter (invalid_request).503Baskets 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.
| Parameter | In | Required | Description |
|---|---|---|---|
sha256 | path | yes | Package SHA-256.pattern ^[a-f0-9]{64}$ |
200The package.400Invalid hash.403Not available under current source or signer permissions.404No 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.
| Parameter | In | Required | Description |
|---|---|---|---|
after | query | no | Cursor: nextCursor of the previous page.pattern ^[A-Za-z0-9_-]{1,120}$ |
limit | query | no | Page size 1–10 (default 10).pattern ^(?:[1-9]|10)$ |
200A page of markets.400Unknown, repeated or malformed parameter (invalid_directory_query).429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503Busy (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.
| Parameter | In | Required | Description |
|---|---|---|---|
q | query | no | Search text.at most 100 characters |
sort | query | no | Order (default activity).one of activity, closing, name |
limit | query | no | Page size (default 24).1–60 |
offset | query | no | Offset (default 0).0–100000 |
tradable | query | no | 1: tradable models only.one of 1, 0 |
200Matching models.400Invalid or unknown parameter (invalid_query).429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503Model 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.
200Coverage.429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503Model 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.
| Parameter | In | Required | Description |
|---|---|---|---|
modelId | path | yes | URL-encoded model id (openai%2Fgpt-5).at most 350 characters |
200Model markets.400Invalid model id or any query parameter.429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503Model 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.
| Parameter | In | Required | Description |
|---|---|---|---|
market | path | yes | Chain market id (0x + 64 hex) or listing id.pattern ^(0x[a-f0-9]{64}|[A-Za-z0-9_-]{1,120})$ |
range | query | no | Candle range (default 1D).one of 1H, 1D, 1W, ALL |
200Market data (disabled/not_installedwhen markets are off).400Invalid market reference or query.404Unknown market (market_not_found).429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503Busy (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.
| Parameter | In | Required | Description |
|---|---|---|---|
limit | query | no | Trades to return, 1–100 (default 30).pattern ^\d{1,3}$ |
kind | query | no | Venue filter (default all).one of all, prediction, model_token, open_market |
200Recent trades.400Invalid query (invalid_market_activity_query).429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503Busy (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.
200Summary.400Any query parameter.429Per-client budget exceeded (RATE_LIMITED). WaitRetry-Afterseconds.503Busy 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.
200Status.
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.
| Parameter | In | Required | Description |
|---|---|---|---|
limit | query | no | Page size 1–100 (default 100); larger values are capped at 100, 0 is invalid_limit.pattern ^\d{1,6}$ |
cursor | query | no | Opaque cursor: nextCursor of the previous page.pattern ^[A-Za-z0-9_-]{1,200}$ |
200A page of offerings.400Malformedlimit(invalid_limit) or a cursor this API did not issue (invalid_cursor).409Per-client read budget exceeded (rate_limited).503Offerings 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.
| Parameter | In | Required | Description |
|---|---|---|---|
id | path | yes | Offering id (lowercase UUID).uuid |
200The offering.404Unknown or unpublished offering (offering_not_found), or an id that is not a UUID (invalid_id).409Per-client read budget exceeded (rate_limited).503Offerings 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.
200OpenAPI 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.
200Capabilities.500Unexpected 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).
200Measurement contract.500Unexpected 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).
200Release policy.500Unexpected 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.
200Status.503Status 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.
200Estimates.503Network 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,sourceUrlandobservedAt. 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
- · 1.3.0: ITO offerings (GET /ito/offerings and /ito/offerings/{id}) carry tradingPausedAt while SF·SIX operators have paused that offering's trading: when the pause began. It is absent otherwise.
- · 1.2.0: GET /ito/offerings pages past its first 100 offerings: `limit` (1–100, capped) and `cursor` query parameters, and `nextCursor` in the response. A request without them returns the same first page as before; a malformed `limit` or `cursor` answers 400.
- · 1.1.2: GET /ito/offerings/{id} answers 404 invalid_id (was 409) for an id that is not a UUID: it names no offering. 409 now means only the read budget (rate_limited).
- · 1.1.1: Documented the 500 INTERNAL_ERROR that /capabilities, /measurement-contract and /release-policy answer on an unexpected server failure.
- · 1.1.0: Documented GET /api/aiex/v2/catalog/models/{id}: one model with all of its offers (slug, raw id or alias). Documented /catalog?view=index (compact list and search projection) and its ETags in /catalog/version. Documented /changes?kind=price: material price changes and new priced listings over 30 days. Every response carries X-Request-Id; error bodies name the same requestId. The prediction market directory has its own budget of 20 requests per minute.
- · 1.0.0: First published OpenAPI 3.1 description of the public read endpoints, served at /api/aiex/v2/openapi.json. Documented rate limits, caching and ETag revalidation, source-rights gating and Hedera testnet status per endpoint.
Additive changes keep the version line; a breaking change gets a new major version and an entry here first.