> From TickerLayer docs, Futures CFDs: https://tickerlayer.com/docs/products/futures#futures-quotes
> 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

## Several quotes

**Endpoint:** `GET /futures/quotes`

Up to 50 symbols of any form and any product in one request.

### Query parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `symbols` | string | Yes | Comma-separated futures symbols, 1 to 50. Duplicates count once. |
| `rolls` | string | No | Opt-in. Comma-separated roll methods to add to every chain front (.C1) in the answer: r5, r5c, cycle, notice, or all. Other symbols are unchanged. Leave it out for the default payload. |

### Request

```bash
curl -sS "https://api.tickerlayer.com/futures/quotes?symbols=BRENTUSD.C1,UST5Y.C1,WTIUSD.MAR30" \
  -H "x-api-key: <YOUR_API_KEY>"
```

```python
import requests

res = requests.get(
    "https://api.tickerlayer.com/futures/quotes?symbols=BRENTUSD.C1,UST5Y.C1,WTIUSD.MAR30",
    headers={"x-api-key": "<YOUR_API_KEY>"},
)
print(res.json())
```

```javascript
const res = await fetch("https://api.tickerlayer.com/futures/quotes?symbols=BRENTUSD.C1,UST5Y.C1,WTIUSD.MAR30", {
  headers: { "x-api-key": "<YOUR_API_KEY>" },
});
const data = await res.json();
console.log(data);
```

```go
req, _ := http.NewRequest("GET", "https://api.tickerlayer.com/futures/quotes?symbols=BRENTUSD.C1,UST5Y.C1,WTIUSD.MAR30", nil)
req.Header.Set("x-api-key", "<YOUR_API_KEY>")
```

### Response

```json
{
  "quotes": [
    {
      "symbol": "BRENTUSD.C1",
      "kind": "chain",
      "base": "BRENTUSD",
      "name": "Brent crude oil",
      "unit": "USD per barrel",
      "contract": "BRENTUSD.DEC26",
      "contract_month": "2026-12",
      "rank": 1,
      "last_trade_date": "2026-10-30",
      "roll_date": "2026-10-30",
      "first_notice_date": "2026-11-30",
      "market_status": "open",
      "trading_day_of_month": 17,
      "trading_days_in_month": 22,
      "bid": 116.38,
      "ask": 116.41,
      "price": 116.395,
      "spread": 0.03,
      "bid_size": 1,
      "ask_size": 2,
      "volume": 330,
      "live": true,
      "estimated": false,
      "timestamp": 1792778642473,
      "transaction_time_us": 1792778642473000,
      "ingress_time_us": 1792778642707000,
      "publish_time_us": 1792778642819000
    },
    {
      "symbol": "UST5Y.C1",
      "kind": "chain",
      "base": "UST5Y",
      "name": "US Treasury 5-year note",
      "unit": "points of par",
      "contract": "UST5Y.DEC26",
      "contract_month": "2026-12",
      "rank": 1,
      "last_trade_date": "2026-12-31",
      "roll_date": "2026-12-31",
      "first_notice_date": "2026-11-30",
      "market_status": "open",
      "trading_day_of_month": 17,
      "trading_days_in_month": 22,
      "bid": 104.5,
      "ask": 104.50781,
      "price": 104.503905,
      "spread": 0.00781,
      "bid_size": 1765,
      "ask_size": 1745,
      "volume": 30213,
      "live": true,
      "estimated": false,
      "timestamp": 1792778642485,
      "transaction_time_us": 1792778642485000,
      "ingress_time_us": 1792778642725000,
      "publish_time_us": 1792778642819000
    }
  ],
  "missing": ["WTIUSD.MAR30"],
  "count": 2
}
```

### Notes

A symbol without a price, for any of the reasons a single quote answers `404`, is listed in `missing` instead of failing the request. An empty list or more than 50 symbols answers `400 symbols must list 1 to 50 futures symbols, comma separated`.
