https://api.mecone.trade · JSON over HTTPS
The versioned public API is the recommended integration surface. Version v1
uses resource-oriented paths, a stable response envelope, wire-stable decimal
string companions,
RFC 9457 errors, request IDs, ETags, and a generated OpenAPI contract.
POST /api/refresh, the private research preview under /api/research/indices,
and the internal /metrics scrape. In addition, scoped mck_ API keys are
accepted on every public read plane, and credential administration itself lives
on an operator-only plane under /api/admin/** — neither changes the anonymous
read behavior above.
API keys
Anonymous testnet reads need no key. Licensed integrations receive a scoped, per-consumer API key — an opaquemck_… credential. Terminal users mint and
manage their own keys from the terminal’s API Keys page; venue keys are issued
during onboarding (write to info@mecone.trade).
Present the key in either header form:
indices:read,
benchmarks:read, lake:read, markets:read, and research:read — one scope
per read plane — plus a per-key per-minute rate limit and an optional expiry.
Keys can be revoked or rotated at any time.
A key may additionally carry a per-index entitlement list — the
mechanism behind scoped trials. One list spans the whole catalog, by slug
(say us-gdp, us-cpi-yoy, gpu-h100-rental). An entitled key reads only
the slugs fixed at issuance, on both planes; a key with no list reads
everything. The list can be widened or cleared at any time — contact us and
the change is live within a minute.
A presented key is strictly enforced and never falls back to anonymous access:
- an unknown, revoked, or expired key is a
401credential-invalidproblem; - a valid key that lacks the plane’s scope is a
403credential-scopeproblem; - an entitled key reading a benchmark or flagship index outside its list is a
403benchmark-not-entitledproblem; - a key over its per-minute limit is a
429rate-limitedproblem carryingRetry-After,RateLimit-Limit,RateLimit-Remaining, andRateLimit-Resetheaders.
Resources
{id} accepts the stable Mecone symbol (MCPI) or slug (us-cpi-yoy).
Responses return the canonical symbol and slug; generated links use the slug.
Response envelope
Successful responses have three top-level members:v1. A removal, type change, or
semantic change normally requires a new major URI version. The versioned API is
still pre-GA; this release removes inadvertently exposed transformation
implementation fields before partner migration. The legacy partner endpoints
are not redirected or reinterpreted and retain their existing display fields.
Index metadata
- identity and the curated
thesisdescription; - methodology version, estimand, high-level calculation class, transformation disclosure status,
and venue weights. The
methodology.index_transformationblock describes the calculation class without exposing implementation parameters; lifecycle and release records remain available in their specifically labeled resources; - prediction-market contracts, roles, lifecycle clocks, links, and source-native volume/open-interest units;
- latest and next release or resolution details; and
- links to the latest snapshot, committed round, and distribution.
Live snapshot
scope: "live_indicative" and official: false.
It includes separate source_observed_at and computed_at clocks plus the
current publication/oracle eligibility state. It is appropriate for charts and
marks when a venue’s rules designate this transport; it is not automatically a
settlement record.
Stored history
range is 1d, 1w, 1m, 6m, 1y or all
(default 1m); resolution is auto or an explicit bucket (1m…1w); a
combination too fine for the range is a 400 unsupported-history-resolution
problem. Every response discloses its own coverage: meta.availability
(available | partial | empty) and meta.coverage state exactly which
slice of the requested window the store holds, so a client never mistakes a
short series for a quiet market.
History starts at each feed’s launch — the indices are derived from live
prediction markets, so there is no pre-launch backfill. The series is
indicative chart history (official: false, settlement_grade: false):
settlement-grade history is the signed official rounds on the
oracle, never this resource.
Latest committed round
value.decimal when a client needs a wire-stable string representation;
value.number is a binary-floating-point convenience for charts. Both originate
from the same already-computed Python scalar, so this is not yet a source-signed
integer-and-scale representation. The clocks remain distinct.
api_committed does not claim that the same tuple was confirmed on-chain.
It also does not mean the round is fresh: consumers must enforce the maximum age
defined by their own market rules against clocks.computed_at.
clocks.round_effective_at is the five-minute round bucket (and matches
round_id); it is deliberately not labeled as a database commit time because
the legacy store does not record that clock for every feed.
For the current Arbitrum Sepolia pilot, the venue’s rules must name either this
API transport or the on-chain transport and must not mix independent latest
reads. When no committed round exists, this route returns 503; it never
launders a live fallback into an official-looking response.
Probability distribution
observed_at
clock. This is the data used for website distribution visualizations.
Index news
-
kind—official_release(the anchor agency’s own print, e.g. the BLS CPI release),official_statement(FOMC statements and minutes),filing(SEC EDGAR Form D / S-1 / F-1 by the pre-IPO entity —relevance: direct— or a fund/SPV vehicle named after it —related; links go to the human-readable EDGAR filing index),venue_context(the source venue’s own context on the bound contract: Polymarket’s market-context narrative, which is AI-generated by the venue and not verified by Mecone — such items say so in their title,source.name,provenance.noteandpayload.generated_by: "venue_ai", and should be displayed as the venue’s commentary, never as fact; or Kalshi’s contract terms — strike ladder, settlement sources, expected settlement and close — versioned so a change is a new item),venue_event(something the venue did or scheduled: a Kalshi settlement with the winning strike, or a Kalshi milestone such as “BLS CPI data release for August 2026” with its start/end window),editorial(a publisher post that links the bound contract — headline and link only); -
relevance—direct(about the index’s own release or contract) orrelated(surrounding context such as monetary-policy statements attached to the macro indices); -
licence—public_domain(US-government publication),venue_public_api(read from the venue’s public API; display with venue attribution, subject to its terms) orheadline_link_only(the publisher’s text is never served); -
source{id,name,domain},url,t(the item’s own clock),observed_at(first seen by the backend), an optionalsummary(≤ 2,000 characters; alwaysnullforheadline_link_only), andprovenance{feed, retrieved_at}. -
authorship— the editorial classification, made explicit so no client has to infer it:primary_document(an agency release, an SEC filing, a settled Kalshi market, a venue’s contract terms or milestone — a document that exists independently of anyone’s model),venue_generated(text a venue’s own model wrote — Polymarket’s market context; always carriesprovenance.note),editorial(a publisher headline, link only).
authorship=primary_document,editorial,
relevance=direct). Venue-generated commentary is served only with
?authorship=venue_generated (or all), and related items (e.g. SPV filings that reference a
company) only with ?relevance=related (or all); data.policy states the defaults and what
was applied. If you display venue-generated items, show provenance.note with them and do not
interleave them with primary documents.
data.sources lists the feeds configured for the index; data.availability is available,
empty (sources configured, nothing yet), no_sources (none configured for this index) or
disabled. Query parameters: limit (1–100, default 50), kind (comma-separated subset of the
kinds above), relevance (direct | related | all), authorship (comma-separated subset or
all), since (RFC 3339). Items are metadata about a source document, never a substitute for
it, and are not settlement-relevant.
Mecone Data Lake
dates) and its snapshots listing rather
than copying the values above. at is the object key’s HHMM, which is the cycle
start, not the response time. quotes paginates with page (default 1) and page_size
(default 100, maximum 500); a page past the end is a 404 page-not-found problem. Rows are
produced by the lake’s own normalizer, so an API row and a lake row cannot disagree.
Four semantics are carried in the payload rather than only in prose, because each one is a
mistake that produces a plausible number instead of an error:
- An unquoted side is
null, never0. Limitless, Myriad and ForecastEx publish no order book at all — one indicative price per outcome.midandspreadare emitted only when both sides were quoted on a venue with a two-sided book; for a bookless venue they are absent, not zero. - Populated price fields differ per venue. Each venue publishes
quote_fields, the columns it actually fills. Do not assumebidandaskexist. tape_originnames any venue that mirrors another exchange’s book. A mirror is not a second opinion on a price, and averaging it against its source is averaging a book with itself.- A snapshot may be a partial board.
completeness.statusisincompletewhen the collector recorded a failure andnot_recordedwhen the writing collector does not record completeness at all — absence of a failure is not a claim of completeness.
GET /api/v1/lake publishes each exclusion with its reason. Listing is cheap and
reading is not, so page sizes are capped and snapshots above a published byte ceiling are refused
with 413 rather than rendered — whole-day analysis belongs on the bulk path.
HTTP behavior
- Responses include
X-Request-IDandX-API-Version. - Read resources include an
ETag; sendIf-None-Matchto receive304 Not Modified. - Current resources use short, explicit cache lifetimes.
- Any resource that cannot be served safely fails closed with a
503problem document (e.g.official-round-unavailable,index-unavailable) carryingRetry-After— never a stale or fabricated payload. - Errors use
application/problem+jsonwithtype,title,status,detail,instance, andrequest_id. - Temporary failures may include
Retry-After. - Timestamps are RFC 3339 strings with explicit UTC offsets.
Legacy compatibility
The unversioned/api/markets routes remain operational and unchanged for the
website, oracle publisher, data lake, existing scripts, and partner pilots.
They are not redirected to v1. New integrations should use the versioned API;
legacy deprecation will only begin after partner coordination and usage
telemetry, with standard Deprecation and Sunset headers.
A WebSocket at wss://api.mecone.trade/ws sends a full market snapshot on
connect, then streams live index updates; it is the terminal’s transport and
carries the legacy payload shapes.
The legacy operator POST /api/refresh is the deliberate security exception:
it now requires a dedicated bearer token and fails closed when that token is not
configured. It is not a public integration endpoint.
/api/v1/indices/{id}/rounds/latest is the canonical API-committed record.
The latest value confirmed on-chain is a separate transport today. See
Consuming the Feeds before writing settlement rules.