> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bullionwale.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Market status

> Whether trading is halted, which symbols are frozen, the market clock and your rates at the latest official close.

Market status answers "can I trade right now, and what did the market close at?" in one call: the platform-wide trading halt, the symbols whose price is frozen, the India Standard Time (IST) trading clock, and your own Buy and Sell rates at the latest official close. Test and production return the same answer.

| Call | Endpoint | Scope |
| - | - | - |
| [Market status](#read-the-market-status) | `GET /market/status` | `rates:read` |

| Environment | Endpoint |
| - | - |
| Test | `/api/trading/test/v1/market/status` |
| Production | `/api/trading/v1/market/status` |

## The market status object

| Field | Type | Meaning |
| - | - | - |
| `server_time` | string | The server's clock in IST (ISO 8601, `+05:30`). Use it instead of your own clock when you reason about the trading day. |
| `utc_offset` | string | The market timezone's offset: `+05:30`. |
| `trading_halted` | boolean | Bullionwale has halted trading: every order is refused with `403 trading_halted` until it is lifted. |
| `frozen_symbols` | array of strings | Symbols whose price has not moved for a while. Their orders are refused with `400 symbol_frozen` until the price moves. Empty when none. |
| `market_close_time` | string | When the market closes each day (`HH:MM`, IST): `23:30`. |
| `official_close_time` | string or null | When the official closing prices are captured (`HH:MM`, IST): `23:32`. `null` when they are not captured automatically. |
| `official_close_days` | array of strings | The days the official close is captured: `Mon` to `Fri`. |
| `closing_prices` | array | Your rates at the latest official close, one entry per symbol (below). A symbol without an official close yet is left out. |

Each `closing_prices` entry:

| Field | Type | Meaning |
| - | - | - |
| `symbol_code` | string | The symbol. |
| `buy` | string or null | Your Buy rate at the official close, in rupees per the symbol's `unit`, 2 decimals. |
| `sell` | string or null | Your Sell rate at the official close, 2 decimals. |
| `captured_at` | string | When that close was captured (ISO 8601 with its offset). |

The closing prices are **your** rates, priced for your account like the live board, not an exchange settlement figure. See [Market hours](/market-hours) for the trading day and the official close.

## Read the market status

```bash curl theme={null}
curl -s https://api.bullionwale.com/api/trading/test/v1/market/status \
  -H "X-API-Key: $BULLIONWALE_API_KEY"
```

```python Python theme={null}
import os
import requests

BASE = "https://api.bullionwale.com/api/trading/test/v1"
HEADERS = {"X-API-Key": os.environ["BULLIONWALE_API_KEY"]}

status = requests.get(f"{BASE}/market/status", headers=HEADERS, timeout=10).json()
print(status["trading_halted"], status["frozen_symbols"], status["server_time"])
```

```json 200 OK theme={null}
{
  "server_time": "2026-10-21T15:04:05.120000+05:30",
  "utc_offset": "+05:30",
  "trading_halted": false,
  "frozen_symbols": [],
  "market_close_time": "23:30",
  "official_close_time": "23:32",
  "official_close_days": ["Mon", "Tue", "Wed", "Thu", "Fri"],
  "closing_prices": [
    {"symbol_code": "GOLD_TRADE_999", "buy": "141200.00", "sell": "141150.00",
     "captured_at": "2026-10-20T18:02:00+00:00"},
    {"symbol_code": "SILVER_999", "buy": "170800.00", "sell": "170300.00",
     "captured_at": "2026-10-20T18:02:00+00:00"}
  ]
}
```

`captured_at` `2026-10-20T18:02:00+00:00` is 23:32 IST on 20 October: the official close of that trading day.

While trading is halted and a symbol is frozen, the same call answers:

```json 200 OK theme={null}
{
  "server_time": "2026-10-21T15:10:00.000000+05:30",
  "utc_offset": "+05:30",
  "trading_halted": true,
  "frozen_symbols": ["SILVER_999"],
  "market_close_time": "23:30",
  "official_close_time": "23:32",
  "official_close_days": ["Mon", "Tue", "Wed", "Thu", "Fri"],
  "closing_prices": [
    {"symbol_code": "GOLD_TRADE_999", "buy": "141200.00", "sell": "141150.00",
     "captured_at": "2026-10-20T18:02:00+00:00"}
  ]
}
```

## Before you trade

A program that places orders can check once before a batch:

1. `trading_halted` is `false`: otherwise every order is refused with `trading_halted`. Wait and check again.
2. The symbol is not in `frozen_symbols`.
3. On [Market data](/api-reference/rates/overview), the symbol's rate is not `stale` and `is_trading` is `true`.

These are hints, not promises: conditions can change between your check and your order, and the order check is the authority. A symbol can refuse orders while nothing here says so, for example when its rate is `stale`.

## Using the closing prices

`closing_prices` are the rates of the latest official close, captured at `official_close_time` on `official_close_days`. Between two closes they stay the same; after the next close they are replaced. Use them for an end-of-day valuation or report on your side. There is no history call: store each close if you need a series.

## Test and production

Market status is not account data: both environments return the **same answer**, with closing prices priced for your account. The same halts and freezes apply to test orders.

## Errors

| Code | Status | Meaning |
| - | - | - |
| `pricing_unavailable` | 503 | Your account's closing prices could not be computed right now. Retry shortly. |
| `insufficient_scope` | 403 | The key does not have `rates:read`. |
| `rate_limited` | 429 | The key's read budget is used up. Wait `Retry-After` seconds. |

Every code is in the [Error reference](/api-reference/error-reference).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.