> From TickerLayer docs, Market Status: https://tickerlayer.com/docs/market-status#markets-bulk
> REST base URL https://api.tickerlayer.com, API key in the `x-api-key` header. WebSocket wss://stream.tickerlayer.com?apiKey=YOUR_API_KEY. Full API reference: https://tickerlayer.com/llms-full.txt

## Bulk market status

**Endpoint:** `GET /markets/status/bulk`

Evaluate many instruments at once. Each item uses `asset:symbol`, for example `crypto:BTCUSD`, `forex:EURUSD`, `stocks:US:AAPL`, `indices:UK100`, `commodities:XAUUSD`. Ideal for dashboards and watchlists.

### Query parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `items` | string | Yes | Comma-separated asset:symbol pairs, 1-25 per request (see Bulk section). Unresolved items return a row-level error without failing the whole response; more than 25 entries returns a 400. |
| `at` | string | No | Optional. ISO-8601 instant evaluated for every resolved item. |

### Request

```bash
curl -sS "https://api.tickerlayer.com/markets/status/bulk?items=crypto:BTCUSD,forex:EURUSD,stocks:US:AAPL,indices:UK100,commodities:XAUUSD" \
  -H "x-api-key: YOUR_API_KEY"
```

```javascript
const q = new URLSearchParams({
  items: "crypto:BTCUSD,forex:EURUSD,stocks:US:AAPL,indices:UK100,commodities:XAUUSD",
});
const res = await fetch(`https://api.tickerlayer.com/markets/status/bulk?${q}`, {
  headers: { "x-api-key": "YOUR_API_KEY" },
});
const data = await res.json();
```

```python
import requests

res = requests.get(
    "https://api.tickerlayer.com/markets/status/bulk",
    params={
        "items": "crypto:BTCUSD,forex:EURUSD,stocks:US:AAPL,indices:UK100,commodities:XAUUSD",
    },
    headers={"x-api-key": "YOUR_API_KEY"},
)
data = res.json()
```

### Response

```json
{
  "data": [
    {
      "asset": "crypto",
      "market": "CRYPTO",
      "status": "open",
      "is_open": true
    },
    {
      "item": "stocks:INVALID",
      "error": { "code": "UNRESOLVED", "message": "…" }
    }
  ],
  "meta": { "calendar_version": "v1-static-2026-2027" }
}
```

### Notes

Invalid or unknown items return a row with `error`; the overall HTTP status stays `200` when the request is well-formed.
