cpc, “Cryptocurrency Contracts”). Do not parse the instrument symbol or slug — symbol formats are not part of the public contract and may change. Identify markets using the fields below.
Every crypto price market settles against a published reference index, not a spot venue. Today that index is CF Benchmarks’ Bitcoin Real-Time Index (BRTI). The Retail API exposes the same terms as the typed assetPriceTerms object; see Crypto Price Market Fields.
The automated market families in Section 2 are listed in the preprod environment and roll out to production as announced in the changelog. Production currently carries the hand-listed Bitcoin markets described in Section 4.
Section 1: Common Identifying Fields
The following fields appear on every automated crypto instrument. Together they identify the asset, the reference index, the market type, the time window, and the threshold of a contract.Field Reference
The instrument also carries display fields you can ignore for mapping:
market_title, market_subtitle, event_sort_type, market_sort_order, market_color, market_dark_color, event_image, event_image_display_type, event_tags, and the CFTC reporting fields cftc_instrument_id, cftc_product_desc, cftc_binary_option_strike_price_alias. Operational fields (requires_manual_settlement, manual_settlement_*, expected_settlement_side, settlement_*) can appear while the exchange is settling an instrument and must be ignored.
crypto_market_type Enum
Treat an unknown value as a newer family: render the fields that are present and watch the changelog.
crypto_horizon Enum
Series
event_series combines asset, family and cadence. Current values:
Event Attributes
event_attributes records the strike for the exchange’s DCM record. strike_unit is USD and strike_description is the index symbol on every family except up/down, which uses strike_value: "Up" with strike_unit: "string". Price range interior buckets record the exact bounds as strike_value: "<lower>-<upper>" with evaluation_type: "==". Settlement never depends on these fields; the crypto_* metadata above is authoritative.
Every family resolves each instrument independently (EVENT_OUTCOME_INDEPENDENT) except price range, whose event is mutually exclusive (EVENT_OUTCOME_MUTUALLY_EXCLUSIVE) so that exactly one bucket settles Yes. See Mutually Exclusive Collateral Return for the margin treatment.
Section 2: Market Families
All families share the same contract attributes: tick size0.01, valid prices 0.01 to 0.99, minimum order 0.01 contract, payout $1.00 per contract, position accountability level 25,000 contracts, and a daily trade-day roll at 5:00 PM ET. Last trade is the settlement instant (interval_end); the instrument expires 30 minutes later, which leaves time for the exchange to resolve it. Source agency is CF Benchmarks.
Up/Down
Will the price close the window at or above its open?Above/Below
Will the price be at or above $X at expiry?Price Range
Will the price be between $A and $B at expiry?One-Touch
Will the price reach (or dip to) $X before the end of the month?Section 3: Identifying Markets
Use this table to identify a market from instrument metadata. Match oncrypto_market_type, then read the window from interval_start / interval_end and the threshold from outcome_strike or the range bounds.
Worked Example: 15-Minute Up/Down
A settled 15-minute Bitcoin window that opened at 00:15 UTC on September 21, 2026:crypto_market_type = "updown"→ an up/down window;crypto_horizon = "15m"→ 15 minutes long.interval_start/interval_end→ the window ran from 00:15:00 to 00:30:00 UTC.price_to_beat = "81650.14"→ the open value;crypto_settlement_price = "81730.83"→ the close value.- Close ≥ open, so the long side (Yes, “Up”) paid $1.00.
Worked Example: Daily Above/Below Strike
One leg of the daily ladder expiring at 5:00 PM ET on September 21, 2026:crypto_market_type = "strike"→ an above/below leg.outcome_strike = "74000"→ pays if the settlement value is at or above $74,000.interval_end = "1790024400"→ settles on the last-minute average before 21:00 UTC (5:00 PM ET).- Every other strike of the same ladder shares
event_id = "btc-above-day-2026-09-21".
Worked Example: Daily Price Range Bucket
An interior bucket of the price range ladder with the same expiry:crypto_market_type = "range"→ a price range bucket in a mutually exclusive event.crypto_range_lower/crypto_range_upper→ pays if the settlement value is between $74,000.00 and $74,499.99 inclusive.- The neighbouring buckets are
$73,999.99 or below(crypto_range_kind = "below", no lower bound) and$74,500 to $74,999.99.
Worked Example: Monthly One-Touch
A “Dips to” leg of a monthly one-touch ladder has this shape:crypto_market_type = "hit"withcrypto_hit_direction = "low"→ pays if the rolling trimmed mean is at or below the target at any point in the window.outcome_strike = "57500"→ the target.interval_start/interval_end→ the window runs from midnight ET on October 1 to midnight ET on November 1, 2026. The market can settle Yes early; a No is decided afterinterval_end.
Section 4: Hand-Listed Markets
The exchange also lists crypto markets by hand, for example the year-end Bitcoin ladders (btc-pricerange-yr-12-31-2026, btc-hitprice-high-yr-12-31-2026, btc-hitprice-low-yr-12-31-2026, btc-above-yr-12-31-2026) and the “When will Bitcoin hit $150k?” date ladder (btc-150k). These carry event_category = "CRY" and a cpc- symbol but none of the crypto_* fields, and on the Retail API they show marketType: "futures" with assetPriceTerms: null.
For these markets the contract terms are only in instrument_rules (Retail description). Read that text for the index, the statistic and the settlement instant: the year-end markets settle on a 60-second 20% trimmed mean of BRTI, for example, whereas the automated above/below and price range ladders settle on a simple last-minute average.
Best Practices
- Never parse the symbol or slug to determine the market type, window, or strike. Symbol formats are not part of the public contract.
- Map on
crypto_market_type. Treat an unknown value as a newer family: render the terms that are present and watch the changelog. - Read windows from
interval_startandinterval_end, not from the instrument’s expiration date, which is 30 minutes after settlement. - Treat every price as a decimal string (
outcome_strike,price_to_beat,crypto_range_*,crypto_settlement_price) and convert it yourself. Compare in cents; bounds end in.99. - Expect
price_to_beatto appear a few seconds after an up/down window opens. Re-read the instrument metadata afterinterval_startrather than assuming the value at listing. - Ladders are wide. An hourly above/below or price range ladder has 30 to 100 legs; subscribe to instrument updates via the streaming APIs to catch each new ladder as it lists.
- Follow each market’s own rules text. Hand-listed markets and automated markets can use different statistics for the same asset.