# Market status

> The seven market statuses, and why a response can say "suspended" when you filtered for open.

Source: https://docs.stxapp.io/guides/market-status/

A market has one of **seven** stored statuses. These are the values `?status=`
accepts — lowercase, comma-separated, e.g. `?status=open,pre_open`.

| Status | Meaning |
| --- | --- |
| `scheduled` | Created and ready to pre-open. No orders accepted yet. |
| `pre_open` | Accepts limit orders ahead of open. No trades, and no market orders. |
| `open` | Open for all orders and trades. |
| `closed` | The result is known. No new orders; pending orders are cancelled. Awaiting admin confirmation or feed delay. |
| `resulted` | Result confirmed. Settlements generated for all trades. |
| `cancelled` | Cancelled. No new orders; pending orders are cancelled. Awaiting confirmation. |
| `voided` | Cancellation confirmed. Void settlements generated. |

An uppercase value returns `400`. Omit the parameter entirely and you get every
non-archived market — not just the open ones.

## `suspended` is not one of them

A response's `status` field can read **`suspended`**, which is not in the list
above and cannot be filtered on. It is derived at render time:

```text
trading == false  AND  status in (open, pre_open)   ->   suspended
```

So a market returned by `?status=open` can report `"status": "suspended"`. The
filter is not wrong — that market genuinely *is* open — it simply is not taking
trades at this moment.

The two fields answer different questions:

| Field | Answers |
| --- | --- |
| `status` | Where the market is in its lifecycle |
| `trading` | Whether it is accepting orders **right now** |

A market you can actually trade against has `status: open` **and**
`trading: true`.

:::caution[`?trading=true` is not applied]
The parameter is accepted, but the response is identical with or without it, so
a filtered call still returns markets with `trading: false`. Until that is
fixed, filter on the `trading` field client-side:

```python
tradeable = [m for m in get("/api/v1/markets?status=open")["markets"] if m["trading"]]
```

Or use the GraphQL query in the [quickstart](/guides/quickstart-rest/), which
applies both conditions server-side.
:::

## Events have their own statuses

Do not confuse these with event status, which is a separate, shorter set:
`scheduled`, `in_progress`, `completed`, `cancelled`. A market carries its
event's status alongside its own as `event_status`.
