# Luno API
> Live spot market data from Luno, the leading crypto exchange across Africa and emerging markets (South Africa, Nigeria, Uganda, Zambia, Malaysia, Indonesia) — served straight from its public API, no key, nothing cached. Get a pair's best bid/ask, last trade and 24h volume (in South African rand, Nigerian naira, Ugandan shilling, ringgit, rupiah and more); rank every pair for a quote currency by 24h volume; read live market depth; and list each market's trading limits, price and volume scales and status. A distinct African / emerging-markets venue with local-fiat pricing, separate from other exchange feeds. Note: XBT = Bitcoin.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/luno-api/..."
```

## Pricing
- **Free** (Free) — 3,650 calls/Mo, 2 req/s
- **Starter** ($9/Mo) — 83,000 calls/Mo, 6 req/s
- **Pro** ($25/Mo) — 435,000 calls/Mo, 15 req/s
- **Business** ($60/Mo) — 2,710,000 calls/Mo, 40 req/s

## Endpoints

### Luno

#### `GET /v1/markets` — Market specs — trading limits, scales and status

**Parameters:**
- `quote` (query, optional, string) — Filter by quote currency e.g. ZAR (omit for all) Example: `ZAR`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/luno-api/v1/markets?quote=ZAR"
```

**Response:**
```json
{
    "data": {
        "count": 25,
        "quote": "ZAR",
        "source": "Luno",
        "markets": [
            {
                "base": "SONIC",
                "quote": "ZAR",
                "market": "SONICZAR",
                "status": "ACTIVE",
                "fee_scale": 8,
                "max_price": 10000,
                "min_price": 1,
                "max_volume": 100000,
                "min_volume": 0.1,
                "price_scale": 2,
                "volume_scale": 2
            },
            {
                "base": "SKY",
                "quote": "ZAR",
                "market": "SKYZAR",
                "status": "ACTIVE",
                "fee_scale": 8,
                "max_price": 100,
                "min_price": 0.01,
                "max_volume": 100000,
                "min_volume": 10,
                "price_scale": 4,
                "volume_scale": 0
            },
            {
                "base": "INJ",
                "quote": "ZAR",
                "market": "INJZAR",
                "status": "ACTIVE",
                "fee_scale": 8,
                "max_price": 100000,
                "min_price": 1,
                "max_volume": 10000,
                "min_volume": 0.001,
                "price_scale": 2,
                "volume_scale": 2
            },
            {
                "base": "DOGE",
                "quote": "ZAR",
                "market": "DOGEZAR",
                "status": "ACTIVE",
                "fee
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/meta` — Service metadata and endpoint list

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/luno-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "Pairs are uppercase with no separator (e.g. XBTZAR). XBT = Bitcoin.",
        "source": "Luno API (api.luno.com, live)",
        "service": "luno-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/ticker": "Ticker for one pair (pair=XBTZAR or symbol=XBT&quote=ZAR; BTC maps to XBT).",
            "GET /v1/markets": "Market specs — trading limits, scales and status (quote=ZAR optional).",
            "GET /v1/tickers": "All pairs for a quote ranked by 24h volume (quote=ZAR, limit=50).",
            "GET /v1/orderbook": "Live market depth — top bids and asks (pair=XBTZAR, limit=20)."
        },
        "pair_count": 143,
        "description": "Live spot market data from Luno, the leading crypto exchange across Africa and emerging markets (South Africa, Nigeria, Uganda, Zambia, Malaysia, Indonesia). The ticker endpoint returns a pair's best bid/ask, last trade and 24h volume (in rand, naira, shilling, ringgit, rupiah and more); the tickers endpoint ranks every pair for a quote currency by 24h volume; the orderbook endpoint returns live market depth; the markets endpoint lists each market's trading limits, price/volume scales and status. Live, no key, nothing stored. A distinct African / emerging-markets venue with local-fiat pricing, separate from other exchange feeds.",
        "upstream_status": "ok"
    },
    "meta": {
        "timestamp": "2026-06-10T22:56:21.597Z",
        "request_id": "f4cf
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/orderbook` — Live market depth — top bids and asks

**Parameters:**
- `pair` (query, required, string) — Pair base+quote uppercase Example: `XBTZAR`
- `limit` (query, optional, string) — Levels per side 1-100 (default 20) Example: `20`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/luno-api/v1/orderbook?pair=XBTZAR&limit=20"
```

**Response:**
```json
{
    "data": {
        "asks": [
            {
                "price": 1023835,
                "volume": 0.0878
            },
            {
                "price": 1023836,
                "volume": 0.02575
            },
            {
                "price": 1023849,
                "volume": 0.012759
            },
            {
                "price": 1023863,
                "volume": 0.012484
            },
            {
                "price": 1023947,
                "volume": 0.007145
            },
            {
                "price": 1023951,
                "volume": 0.056141
            },
            {
                "price": 1024008,
                "volume": 0.006992
            },
            {
                "price": 1024102,
                "volume": 0.000977
            },
            {
                "price": 1024227,
                "volume": 0.006969
            },
            {
                "price": 1024558,
                "volume": 0.053104
            },
            {
                "price": 1024560,
                "volume": 0.146939
            },
            {
                "price": 1024705,
                "volume": 0.01764
            },
            {
                "price": 1024809,
                "volume": 0.055675
            },
            {
                "price": 1025015,
                "volume": 0.5465
            },
            {
                "price": 1025030,
                "volume": 0.00731
            },
   
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/ticker` — Ticker for one pair

**Parameters:**
- `pair` (query, required, string) — Pair base+quote uppercase (or use symbol & quote); XBT = Bitcoin Example: `XBTZAR`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/luno-api/v1/ticker?pair=XBTZAR"
```

**Response:**
```json
{
    "data": {
        "ask": 1023835,
        "bid": 1023444,
        "base": "XBT",
        "last": 1023057,
        "pair": "XBTZAR",
        "quote": "ZAR",
        "source": "Luno",
        "spread": 391,
        "status": "ACTIVE",
        "timestamp": 1781132181765,
        "volume_24h": 35.126699
    },
    "meta": {
        "timestamp": "2026-06-10T22:56:21.856Z",
        "request_id": "4e2c15d2-d557-42b3-b10d-e35a18595ec9"
    },
    "status": "ok",
    "message": "Ticker retrieved successfully",
    "success": true
}
```

#### `GET /v1/tickers` — All pairs for a quote ranked by 24h volume

**Parameters:**
- `quote` (query, optional, string) — Quote currency e.g. ZAR, NGN (default ZAR) Example: `ZAR`
- `limit` (query, optional, string) — Max results 1-200 (default 50) Example: `50`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/luno-api/v1/tickers?quote=ZAR&limit=50"
```

**Response:**
```json
{
    "data": {
        "count": 25,
        "quote": "ZAR",
        "total": 25,
        "source": "Luno",
        "tickers": [
            {
                "ask": 16.6744,
                "bid": 16.6743,
                "base": "USDT",
                "last": 16.6728,
                "pair": "USDTZAR",
                "quote": "ZAR",
                "spread": 0.0001,
                "status": "ACTIVE",
                "timestamp": 1781132181651,
                "volume_24h": 1900592.29
            },
            {
                "ask": 18.28,
                "bid": 18.27,
                "base": "XRP",
                "last": 18.26,
                "pair": "XRPZAR",
                "quote": "ZAR",
                "spread": 0.01,
                "status": "ACTIVE",
                "timestamp": 1781132181148,
                "volume_24h": 1108246
            },
            {
                "ask": 1.3947,
                "bid": 1.3572,
                "base": "DOGE",
                "last": 1.375,
                "pair": "DOGEZAR",
                "quote": "ZAR",
                "spread": 0.0375,
                "status": "ACTIVE",
                "timestamp": 1781132100891,
                "volume_24h": 584970
            },
            {
                "ask": 16.6901,
                "bid": 16.69,
                "base": "USDC",
                "last": 16.69,
                "pair": "USDCZAR",
                "quote": "ZAR",
                "spread": 0.0001,
            
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/luno-api
OpenAPI spec: https://www.oanor.com/api/luno-api/openapi.json
