Market Lifecycle

Overview

Every market moves through a fixed sequence of stages over its life. The stage a market is in determines which actions the exchange will accept, from building the initial order book, through normal trading, to an orderly wind-down and eventual removal. Each stage progressively narrows what you can do.

Lifecycle Stages

post_only → trading → wind_down → halted → delisting → delisted
(build book)  (normal)  (close only)  (frozen)  (force-close)  (gone)

The lifecycle is admin-driven, not strictly linear -- admins can move markets forward or backward between stages as needed. The markets endpoint reports the current stage as one of these values.

One additional stage sits outside this progression: off_hours. Markets that track an underlying exchange with fixed trading hours (equity perpetuals) are placed in off_hours automatically whenever that exchange is closed, and return to their previous stage when it reopens. The schedule field on the Market object describes each market's trading hours.

Pre-launch

Before a market opens, it accepts only maker (post-only) orders. Participants build up the order book without any trades occurring, so the market has depth on both sides the moment it goes live.

Normal trading

The everyday state. All order types are accepted from every participant. A healthy, live market spends nearly all of its time here.

Winding down

When a market is being retired it stops accepting new exposure, so you can only reduce or close an existing position. To make sure there is someone to trade against while everyone exits, designated market makers may still post resting liquidity.

Halted

An emergency freeze. No new orders are accepted, but you can still cancel resting orders, and open positions are left untouched. Halts cover situations like oracle problems or containing a suspected exploit.

Off-hours

Applies only to markets with a trading schedule, such as equity perpetuals. While the underlying exchange is closed, the market is automatically placed in off_hours: no new orders, no mark or index price updates, no liquidations. You can still cancel resting orders, and open positions are untouched. When the exchange reopens, the market returns to its previous stage automatically.

Delisting

The market is being delisted. All user orders are blocked and force-close OTC is allowed. The exchange uses this stage to close out remaining positions via OTC before the market is fully removed. Cancellations are also blocked during this stage.

Delisted

The market is permanently gone. Every operation is blocked, including cancellation, and the market is removed from active listings. Before a market reaches this point, all resting orders are canceled and all open positions are closed for you.

Gating Matrix

ModePlace (regular)Place (market maker)CancelPrice updateLiquidationVisible
post_onlypost-only onlypost-only onlyyesyesyesyes
tradingall order typesall order typesyesyesyesyes
wind_downreduce-only onlyreduce-only + post-onlyyesyesyesyes
haltedblockedblockedyesblockedblockedyes
off_hoursblockedblockedyesblockedblockedyes
delistingblockedblockedyes (by admin)blockedblockedyes
delistedblockedblockedblockedblockedblockedno

Market maker status is a flag on the wallet record, set by admin operations.

Mode Wire Values

The GET /markets response includes a mode field for each market. The wire values correspond to each lifecycle stage:

Stagemode value
Pre-launchpost_only
Tradingtrading
Wind-downwind_down
Haltedhalted
Off-hoursoff_hours
Delistingdelisting
Delisteddelisted

Market makers and integrators should use the mode field from GET /markets to determine exactly which operations are allowed, rather than relying on the enabled or post_only boolean flags alone.

Error Messages

When an operation is rejected due to mode:

Error messageMode
only post-only orders are allowed in {id} marketpost_only
market {id} is in wind-down mode, only reduce-only orders allowedwind_down
market {id} is haltedhalted
market {id} is outside trading hoursoff_hours
market {id} is being delisteddelisting
market {id} has been delisteddelisted

Legacy Boolean Flags

For backward compatibility, the enabled and post_only boolean flags remain on the Market object. Prefer mode for new integrations.

modeenabledpost_only
tradingtruefalse
post_onlytruetrue
wind_downfalsefalse
haltedfalsefalse
off_hoursfalsefalse
delistingfalsefalse
delistedfalsefalse

Visibility

A market can be hidden from the default listings independently of its lifecycle stage. A hidden market still trades normally and stays reachable if you ask for it directly; hiding only affects whether it appears in the standard market list.

Reading the current state

The markets endpoint reports a market's current stage and whether it is hidden. See List all available markets for the exact fields. When an order is rejected because of the market's stage, the API returns a specific message; see Error Handling for those messages and what they mean.

On this page