> From TickerLayer docs, Perpetuals: https://tickerlayer.com/docs/products/perpetuals#perpetuals-snapshot
> 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

## Snapshot

**Endpoint:** `GET /perpetuals/snapshot/:symbol`

Quote, mark price and last trade in one call, with the contract name and underlying class. Built for first paint.

### Path parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `symbol` | string | Yes | Perpetual contract symbol (for example XAUUSDT, TSMUSDT, BTCUSDT). Trimmed and uppercased before lookup. Retrieve the full list from GET /perpetuals/symbols. |

### Request

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

```python
import requests

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

```javascript
const res = await fetch("https://api.tickerlayer.com/perpetuals/snapshot/TSMUSDT", {
  headers: { "x-api-key": "<YOUR_API_KEY>" },
});
const data = await res.json();
console.log(data);
```

```go
req, _ := http.NewRequest("GET", "https://api.tickerlayer.com/perpetuals/snapshot/TSMUSDT", nil)
req.Header.Set("x-api-key", "<YOUR_API_KEY>")
```

### Response

```json
{
  "symbol": "TSMUSDT",
  "name": "Taiwan Semiconductor Manufacturing Company",
  "instrument_type": "perpetual",
  "underlying_asset_class": "equity",
  "bid": 423.31,
  "ask": 423.39,
  "bid_size": 61.2,
  "ask_size": 48.7,
  "mark_price": 423.35,
  "last_price": 423.36,
  "last_size": 1.5,
  "source_count": 6,
  "timestamp": 1789640504033,
  "mark_timestamp": 1789640505932,
  "last_timestamp": 1789640506413,
  "prev_close": 421.12,
  "change": 2.23,
  "change_percent": 0.5295
}
```

### Notes

A snapshot reads the last trade but never starts the trade tape, so polling it keeps `last_*` only as fresh as other demand makes it; they are `null` when no print is held. `prev_close` is the close of the last completed UTC daily bar, and `change` and `change_percent` measure the composite mid price against it (the mark price when there is no book). A perpetual has no session, so the day turns at 00:00 UTC. The three fields are `null` for a moment after the UTC day turns, until the new close is read. `403 perpetuals access not enabled for your account`: the account does not include Perpetuals. `404 unknown symbol`: the symbol is not in the perpetuals list. `404` with a `no ... available` message: the contract is known but has no live value right now.
