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
| Mode | Place (regular) | Place (market maker) | Cancel | Price update | Liquidation | Visible |
|---|---|---|---|---|---|---|
post_only | post-only only | post-only only | yes | yes | yes | yes |
trading | all order types | all order types | yes | yes | yes | yes |
wind_down | reduce-only only | reduce-only + post-only | yes | yes | yes | yes |
halted | blocked | blocked | yes | blocked | blocked | yes |
off_hours | blocked | blocked | yes | blocked | blocked | yes |
delisting | blocked | blocked | yes (by admin) | blocked | blocked | yes |
delisted | blocked | blocked | blocked | blocked | blocked | no |
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:
| Stage | mode value |
|---|---|
| Pre-launch | post_only |
| Trading | trading |
| Wind-down | wind_down |
| Halted | halted |
| Off-hours | off_hours |
| Delisting | delisting |
| Delisted | delisted |
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 message | Mode |
|---|---|
only post-only orders are allowed in {id} market | post_only |
market {id} is in wind-down mode, only reduce-only orders allowed | wind_down |
market {id} is halted | halted |
market {id} is outside trading hours | off_hours |
market {id} is being delisted | delisting |
market {id} has been delisted | delisted |
Legacy Boolean Flags
For backward compatibility, the enabled and post_only boolean flags remain on the Market object. Prefer mode for new integrations.
mode | enabled | post_only |
|---|---|---|
trading | true | false |
post_only | true | true |
wind_down | false | false |
halted | false | false |
off_hours | false | false |
delisting | false | false |
delisted | false | false |
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.