Skip to main content

Markets

Sentico supports spot instruments and outcome markets. The authoritative market catalog and trading rules come from:

GET https://api.sentico-labs.xyz/api/v1/public/markets
GET https://api.sentico-labs.xyz/api/v1/public/exchange-info

/public/markets returns { items: [...], featuredMarketId }; each item carries marketId, symbol, marketType (spot, binary_option, prediction), status, tickSizeMicro, lotSizeMicro, priceDecimals, instrumentConfig (base/quote or collateral asset, minNotionalMicro, oracleBinding, maxPriceMicro), resolutionPolicy, expiryTsMs and rules, plus maxOrderQtyMicro where a market sets one. /public/exchange-info is the compact trading-rules view (microsScale, tick, lot and minimum notional per symbol).

Order limits on the market item​

FieldCarried byMeaning
instrumentConfig.maxPriceMicrobinary_option items onlyHighest limit price in micro-USDC per share. A binary market definition is only accepted with exactly 1000000 (1.000 USDC).
maxOrderQtyMicro (top level of the item, not inside instrumentConfig)Only markets that set a per-order quantity cap; absent means no per-order capLargest qty of one order, in the same micro units as qty. A larger order is rejected with qty_exceeds_max.

Readback 2026-09-23: markets 1, 17 and 22–35 (binary options) carry maxPriceMicro: 1000000; prediction markets 9–13 carry maxOrderQtyMicro: 250000000 (250 shares per order) and the internal test markets 6–8 carry 500000; no spot or binary market carried maxOrderQtyMicro.

The 1.000 price cap applies to every outcome market, including prediction markets that do not publish maxPriceMicro. The engine checks it for all YES/NO books (binary option and prediction) on limit orders: a price above 1000000 is rejected, 1000000 itself is accepted, and the price must be greater than zero (price_must_be_positive). Because 1.000 is a multiple of the 1000-micro tick, the highest valid outcome limit price is 1000000 and the lowest is 1000. Keep the price field of outcome market orders at or below 1000000 as well: the engine check skips market orders, but the sequencer pre-check applied to outcome PlaceOrder actions does not. The reject has no dedicated code yet; see Order Types.

Do not hardcode market IDs, tick sizes, lot sizes, or lifecycle state from this page. Resolve them at startup and refresh them after reconnects or configuration changes.

Live private-beta snapshot (2026-09-23)​

The public catalog contained these markets on 2026-09-23 (read from GET /api/v1/public/markets; internal test markets listed separately below). Expiry times are UTC and come from expiryTsMs.

Spot

Market IDSymbolStatusTick / lot (micro)Min notional (micro)
2SPOT:USDC/USDTopen100 / 11
3SPOT:ETH/USDC (base asset WETH)open100 / 11
4SPOT:CKT/USDCopen100 / 11
5SPOT:TCO/USDCopen100 / 11
14SPOT:BTC/USDC (base asset WBTC, 8 decimals)open10000 / 11000000
15SPOT:ARB/USDCopen100 / 10001000000
21FYT/USDC (1 lot = 1 whole FYT)open1 / 10000001000000
20SPOT:FYT/USDCscheduledduplicate of 21; do not quote it

Binary options (YES/NO books, USDC collateral, tick 1000, lot 1, maxPriceMicro: 1000000)

Market IDSymbolOracle bindingStatusExpiry (UTC)
1BO:BTC-100k-1-1-27V1 price_barrier_v1open2027-01-01 04:59:59
17BO:BTC-USD-20260913-1789304400000-V2V2 canonical_v2resolved_no2026-09-13 13:00
22BO:BTC-USD-20261003-1791043200000-V2V2 canonical_v2open2026-10-03 16:00
23BO:ETH-USD-20261004-1791136800000-V2V2 canonical_v2open2026-10-04 18:00
24BO:SOL-USD-20261005-1791208800000-V2V2 canonical_v2open2026-10-05 14:00
25BO:BNB-USD-20261006-1791302400000-V2V2 canonical_v2open2026-10-06 16:00
26BO:HYPE-USD-20261007-1791399600000-V2V2 canonical_v2open2026-10-07 19:00
27BO:XRP-USD-20261008-1791478800000-V2V2 canonical_v2open2026-10-08 17:00
28BO:ZEC-USD-20261009-1791568800000-V2V2 canonical_v2open2026-10-09 18:00
29BO:LINK-USD-20261010-1791648000000-V2V2 canonical_v2open2026-10-10 16:00
30BO:XAU-PERP-USD-20261013-1791903600000-V2V2 canonical_v2open2026-10-13 15:00
31BO:XAG-PERP-USD-20261014-1791986400000-V2V2 canonical_v2open2026-10-14 14:00
32BO:TSLA-PERP-USD-20261106-1793984400000-V2V2 canonical_v2open2026-11-06 17:00
33BO:META-PERP-USD-20261113-1794589200000-V2V2 canonical_v2open2026-11-13 17:00
34BO:PLTR-PERP-USD-20261118-1795021200000-V2V2 canonical_v2open2026-11-18 17:00
35BO:NVDA-PERP-USD-20261203-1796317200000-V2V2 canonical_v2open2026-12-03 17:00

The strike of each binary option is in strike and its question in question / rules on the market item; the millisecond number in the V2 symbol is the expiry.

Prediction markets (economic_dispute, tick 1000, lot 1000, maxOrderQtyMicro: 250000000)

Market IDSymbolStatusExpiry (UTC)
9PM:ALCARAZ-USO-PLAY-2026resolved_yes2026-08-30
10PM:ALCARAZ-USO-FINAL-2026resolved_no2026-09-11
11PM:ECB-RATES-UNCH-20260910resolved_no2026-09-10
12PM:MOURINHO-RMA-2026-27open2027-05-01
13PM:SPT-MCAP-50M-20270401open2027-04-01

Markets 6–8 are resolved internal test markets (PRED:TEST-*, resolved_yes / resolved_no) and markets 16, 18 and 19 were internal Oracle V2 canaries (closed, resolved_invalid, resolved_no). They remain in the catalog; do not quote them. Resolved markets also stay in the catalog: a quote engine must skip every market whose status is not open and every market whose expiryTsMs has passed, and re-check both periodically while it runs, not only at startup.

The endpoint response overrides this dated snapshot. A market being present in the catalog does not by itself prove placement readiness; also require GET /api/v1/readiness to return HTTP 200 and GET /api/v1/status to report tradingHalted: false.

Public market data​

RouteNotes
GET /api/v1/public/markets/{id}Full market item including instrumentConfig and its oracleBinding
GET /api/v1/public/markets/{id}/orderbook?depth=N&book=SPOTbook is SPOT, YES or NO. Levels are { price_micros, total_qty }; total_qty is a decimal string holding the base-asset quantity in micro units (same scale as trade qty, always a multiple of lotSizeMicro). There is no /book alias (404).
GET /api/v1/public/markets/{id}/trades?limit=Nitems[] with price and quantity in micro units, book and timestamp
GET /api/v1/public/markets/{id}/tickerLast price and 24 h statistics
GET /api/v1/public/markets/{id}/candles?tf=1m&count_back=NOHLCV; see Charting
GET /api/v1/public/assetsRegistered vault assets (ARB, CKT, FYT, TCO, USDC, USDT, WBTC and ETH, listed as WETH) with token address, decimals and assetId

Product families​

Oracle bindings (readback 2026-09-14): market 1 retains its V1 barrier binding (instrumentConfig.oracleBinding.kind: price_barrier_v1; median of Binance, Kraken and Coinbase, minHealthySources: 3, degradedPolicy: resolve_no). Short-dated binaries are bound to Oracle V2 (oracleBinding.kind: canonical_v2 with a policyHash, resolutionPolicy: oracle_v2); market 17 resolved resolved_no through that path on 2026-09-13. Prediction markets carry resolutionPolicy: economic_dispute. New binary markets require a committed V2 policy before opening. See Oracle V2 and price resolution.

ProductBalance model
SpotBuy reserves quote asset; sell reserves the configured base asset
Binary optionYES/NO contracts settle to the configured collateral asset
Prediction marketOutcome exposure follows its market-specific resolution policy

Spot and outcome action boundary​

Spot clients must use SpotPlaceOrder or SpotQuoteReplace and omit the YES/NO book field. Binary and prediction markets use OutcomePlaceOrder (wire alias PlaceOrder) or QuoteReplace with book: YES | NO.

For a spot ask, the engine reserves the configured base asset: market 2 uses USDC, market 3 WETH, market 4 CKT, market 5 TCO, market 14 WBTC, market 15 ARB and market 21 FYT. An ask on a binary or prediction book reserves YES or NO shares, which you create from collateral with a Split action first (1 USDC mints 1 YES + 1 NO). Order qty uses the exchange-info microsScale; ERC-20 balances, deposits, and withdrawals use the asset's native token decimals. Convert between those units before a client-side funding precheck. An InsufficientShares ... book YES response for a spot market means the client sent an outcome-market envelope; it is not a genuine spot balance reject.

Prices, quantities and minimum notional​

  • Prices are integers in tickSizeMicro steps; priceDecimals is the display precision (2 to 6 decimals on the spot markets, 3 decimals on binary and prediction markets, whose prices run from 0.000 to 1.000 USDC per share).
  • Quantities are integers in lotSizeMicro steps of the base asset or of one outcome share. Lot size differs per market: 1 micro on ETH/USDC, 1000 micro on ARB/USDC and on the prediction markets, 1 000 000 micro (one whole token) on FYT/USDC.
  • instrumentConfig.minNotionalMicro is the per-order minimum in quote units: 1 USDC (1000000) on BTC/USDC, ARB/USDC and FYT/USDC; the older spot markets 2–5 carry 1. An order below the minimum is rejected (spot_notional_below_minimum). On the BSL compact lane the failing action is dropped at apply (receipt status: dropped, applied: false); when it is a leg of a SpotQuoteReplace, the whole replace action, including its other legs, is dropped.

Lifecycle​

status on the market item is the only lifecycle field today; there is no separate "expired" or "resolving" flag. Values observed on production:

statusBehavior
scheduledDefinition exists but is not yet tradable
openOrders may be accepted when the global placement gate is ready and the action ts is before expiryTsMs. status does not change automatically at expiryTsMs: a market can still read open after its expiry while every new order, quote-replace, conditional or algo order is rejected with market N expired for trading at T. Compare expiryTsMs with the current time before quoting. Resting orders are not cancelled at expiry; they stay on the book, cannot trade, and can still be cancelled until the market is closed or resolved.
haltedNew matching is paused. A prediction market shows halted while a resolution case is in its 24 h challenge window (see Resolution); a venue-wide halt is separate and reported as tradingHalted on GET /api/v1/status.
closedNot tradable: a binary market before its oracle policy is bound and it is opened, or a market closed by an operator. Closing a market cancels its resting orders and releases their reservations.
resolved_yes / resolved_no / resolved_invalidFinal result exists; new trading is disabled, all resting orders of the market are cancelled with their reservations released, and settlement pays out per Resolution. resolved_invalid occurs on Oracle V2 binaries only.

What happens at expiryTsMs​

Market familyAt expiryTsMsResolution
Oracle V2 binary (resolutionPolicy: oracle_v2)New orders rejected from ts >= expiryTsMs; status stays open; resting orders stay until resolutionAutomatic. The decision is committed only after the policy's recovery deadline (committed per market, between 1 ms and 24 h after the cutoff; the current exchange policies state 5 seconds in rules.rulesText). The market then moves to resolved_*, resting orders are cancelled, and positions are credited by the settlement worker. See Oracle V2.
Prediction market (economic_dispute)New orders rejected from ts >= expiryTsMs; status stays open until an operator closes the market or a resolution case is filedThrough the resolution-case process in Resolution; a case in its challenge window shows halted.

Each market definition supplies its own asset IDs, native decimals, tick and lot sizes, minimum notional, precision, and lifecycle policy. Client examples must derive these values from the market catalog instead of assuming BTC/ETH/SOL launch parameters.