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

## Product list

**Endpoint:** `GET /futures/products`

Every product with its unit, chain months, session clock and the chain and roll symbols it answers. Open to any valid key, with or without Futures CFDs on the account.

### Request

```bash
curl -sS "https://api.tickerlayer.com/futures/products" \
  -H "x-api-key: <YOUR_API_KEY>"
```

```python
import requests

res = requests.get(
    "https://api.tickerlayer.com/futures/products",
    headers={"x-api-key": "<YOUR_API_KEY>"},
)
print(res.json())
```

```javascript
const res = await fetch("https://api.tickerlayer.com/futures/products", {
  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/products", nil)
req.Header.Set("x-api-key", "<YOUR_API_KEY>")
```

### Response

```json
{
  "products": [
    {
      "base": "WTIUSD",
      "name": "WTI crude oil",
      "group": "energy",
      "unit": "USD per barrel",
      "chain_months": ["JAN", "FEB", "MAR", "APR", "MAY", "JUN",
                       "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"],
      "market_hours": "Sunday 18:00 to Friday 17:00 New York time, daily break 17:00 to 18:00",
      "chain": ["WTIUSD.C1", "WTIUSD.C2", "WTIUSD.C3"],
      "rolls": ["WTIUSD.R5", "WTIUSD.R5C", "WTIUSD.CYCLE", "WTIUSD.NOTICE"],
      "contracts": 32
    }
  ],
  "count": 20
}
```

### Notes

`group` is `energy`, `metals`, `agriculture`, `rates` or `indices`. `contracts` is how many dated months we carry now. A product with no month carried is left out of the list.
