# Technical Indicators API
> Live technical-analysis indicators that traders and trading bots run on a price series, computed on demand from the closes you pass in — no key, nothing cached. Get Wilder's RSI; the MACD line, signal line and histogram; the upper, middle and lower Bollinger Bands with bandwidth and %B; and simple or exponential moving averages. Every value is computed live from your input and works for any market — forex, stocks, crypto or commodities. A technical-indicator engine, distinct from raw price feeds and from pivot/fibonacci level tools: it turns a series of prices into the momentum, trend and volatility indicators a strategy acts on.

## 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/technicals-api/..."
```

## Pricing
- **Free** (Free) — 4,800 calls/Mo, 3 req/s
- **Starter** ($7/Mo) — 105,000 calls/Mo, 10 req/s
- **Pro** ($19/Mo) — 500,000 calls/Mo, 25 req/s
- **Business** ($45/Mo) — 3,050,000 calls/Mo, 55 req/s

## Endpoints

### Technicals

#### `GET /v1/bollinger` — Bollinger Bands with bandwidth and %B

**Parameters:**
- `prices` (query, required, string) — Comma-separated close prices, oldest first Example: `100.00,101.63,103.18,104.54,105.65,106.44,106.88,106.95,106.66,106.02,105.09,103.94,102.65,101.30,100.00,98.82,97.86,97.18,96.83,96.85,97.25,98.00,99.07,100.40,101.92,103.55,105.19,106.75,108.14,109.29,110.13,110.62,110.74,110.49,109.89,109.00,107.87,106.59,105.25,103.93`
- `period` (query, optional, string) — SMA period (default 20) Example: `20`
- `stddev` (query, optional, string) — Standard-deviation multiplier (default 2) Example: `2`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/technicals-api/v1/bollinger?prices=100.00%2C101.63%2C103.18%2C104.54%2C105.65%2C106.44%2C106.88%2C106.95%2C106.66%2C106.02%2C105.09%2C103.94%2C102.65%2C101.30%2C100.00%2C98.82%2C97.86%2C97.18%2C96.83%2C96.85%2C97.25%2C98.00%2C99.07%2C100.40%2C101.92%2C103.55%2C105.19%2C106.75%2C108.14%2C109.29%2C110.13%2C110.62%2C110.74%2C110.49%2C109.89%2C109.00%2C107.87%2C106.59%2C105.25%2C103.93&period=20&stddev=2"
```

**Response:**
```json
{
    "data": {
        "lower": 97.085915,
        "upper": 114.321085,
        "middle": 105.7035,
        "period": 20,
        "source": "TECHNICALS",
        "stddev": 2,
        "bandwidth": 0.163052,
        "indicator": "bollinger",
        "percent_b": 0.3971,
        "lower_series": [
            95.358334,
            94.936218,
            94.523246,
            94.223272,
            94.08938,
            94.120519,
            94.260257,
            94.403919,
            94.426464,
            94.241541,
            93.852356,
            93.353421,
            92.874945,
            92.536361,
            92.426882,
            92.598685,
            93.06891,
            93.819155,
            94.798605,
            95.925629,
            97.085915
        ],
        "upper_series": [
            109.488666,
            109.635782,
            109.685754,
            109.574728,
            109.29462,
            108.890481,
            108.461743,
            108.149081,
            108.106536,
            108.439459,
            109.155644,
            110.158579,
            111.305055,
            112.452639,
            113.481118,
            114.298315,
            114.84609,
            115.096845,
            115.058395,
            114.773371,
            114.321085
        ],
        "middle_series": [
            102.4235,
            102.286,
            102.1045,
            101.899,
            101.692,
            101.5055,
            101.361
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/ma` — Simple or exponential moving average

**Parameters:**
- `prices` (query, required, string) — Comma-separated close prices, oldest first Example: `100.00,101.63,103.18,104.54,105.65,106.44,106.88,106.95,106.66,106.02,105.09,103.94,102.65,101.30,100.00,98.82,97.86,97.18,96.83,96.85,97.25,98.00,99.07,100.40,101.92,103.55,105.19,106.75,108.14,109.29,110.13,110.62,110.74,110.49,109.89,109.00,107.87,106.59,105.25,103.93`
- `period` (query, optional, string) — Period (default 20) Example: `20`
- `type` (query, optional, string) — sma or ema (default sma) Example: `ema`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/technicals-api/v1/ma?prices=100.00%2C101.63%2C103.18%2C104.54%2C105.65%2C106.44%2C106.88%2C106.95%2C106.66%2C106.02%2C105.09%2C103.94%2C102.65%2C101.30%2C100.00%2C98.82%2C97.86%2C97.18%2C96.83%2C96.85%2C97.25%2C98.00%2C99.07%2C100.40%2C101.92%2C103.55%2C105.19%2C106.75%2C108.14%2C109.29%2C110.13%2C110.62%2C110.74%2C110.49%2C109.89%2C109.00%2C107.87%2C106.59%2C105.25%2C103.93&period=20&type=ema"
```

**Response:**
```json
{
    "data": {
        "type": "ema",
        "count": 21,
        "value": 106.003828,
        "period": 20,
        "series": [
            100.777607,
            100.441644,
            100.209107,
            100.100621,
            100.129133,
            100.299692,
            100.609245,
            101.045507,
            101.588792,
            102.212717,
            102.886744,
            103.576578,
            104.24738,
            104.865725,
            105.40137,
            105.828858,
            106.130872,
            106.296503,
            106.324455,
            106.222126,
            106.003828
        ],
        "source": "TECHNICALS",
        "indicator": "ma"
    },
    "meta": {
        "timestamp": "2026-06-10T22:56:27.634Z",
        "request_id": "ed8f0f0a-352b-4862-8706-d54533068228"
    },
    "status": "ok",
    "message": "Moving average computed",
    "success": true
}
```

#### `GET /v1/macd` — MACD line, signal line and histogram

**Parameters:**
- `prices` (query, required, string) — Comma-separated close prices, oldest first Example: `100.00,101.63,103.18,104.54,105.65,106.44,106.88,106.95,106.66,106.02,105.09,103.94,102.65,101.30,100.00,98.82,97.86,97.18,96.83,96.85,97.25,98.00,99.07,100.40,101.92,103.55,105.19,106.75,108.14,109.29,110.13,110.62,110.74,110.49,109.89,109.00,107.87,106.59,105.25,103.93`
- `fast` (query, optional, string) — Fast EMA period (default 12) Example: `12`
- `slow` (query, optional, string) — Slow EMA period (default 26) Example: `26`
- `signal` (query, optional, string) — Signal EMA period (default 9) Example: `9`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/technicals-api/v1/macd?prices=100.00%2C101.63%2C103.18%2C104.54%2C105.65%2C106.44%2C106.88%2C106.95%2C106.66%2C106.02%2C105.09%2C103.94%2C102.65%2C101.30%2C100.00%2C98.82%2C97.86%2C97.18%2C96.83%2C96.85%2C97.25%2C98.00%2C99.07%2C100.40%2C101.92%2C103.55%2C105.19%2C106.75%2C108.14%2C109.29%2C110.13%2C110.62%2C110.74%2C110.49%2C109.89%2C109.00%2C107.87%2C106.59%2C105.25%2C103.93&fast=12&slow=26&signal=9"
```

**Response:**
```json
{
    "data": {
        "fast": 12,
        "macd": 1.286794,
        "slow": 26,
        "trend": "bearish",
        "signal": 1.752961,
        "source": "TECHNICALS",
        "histogram": -0.466167,
        "indicator": "macd",
        "macd_series": [
            0,
            0.130028,
            0.354068,
            0.634052,
            0.934734,
            1.222679,
            1.469443,
            1.651615,
            1.752386,
            1.760314,
            1.672277,
            1.492506,
            1.231746,
            0.905717,
            0.536256,
            0.14655,
            -0.237026,
            -0.589093,
            -0.886135,
            -1.107167,
            -1.235814,
            -1.262694,
            -1.184007,
            -1.002768,
            -0.728091,
            -0.374562,
            0.037514,
            0.484382,
            0.939856,
            1.377736,
            1.772112,
            2.09999,
            2.342515,
            2.485889,
            2.522027,
            2.450602,
            2.276573,
            2.012173,
            1.675197,
            1.286794
        ],
        "signal_period": 9,
        "histogram_series": [
            0,
            0.104023,
            0.26245,
            0.433947,
            0.587703,
            0.700519,
            0.757826,
            0.751998,
            0.682216,
            0.552115,
            0.371262,
            0.153193,
            -0.086054,
            -0.3
…(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/technicals-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "Pass prices as a comma-separated list, oldest first (prices=44.34,44.09,44.15,...).",
        "source": "Computed in-process from caller-supplied prices (no upstream)",
        "service": "technicals-api",
        "endpoints": {
            "GET /v1/ma": "Simple or exponential moving average (prices=..., period=20, type=sma|ema).",
            "GET /v1/rsi": "Wilder RSI (prices=..., period=14).",
            "GET /v1/macd": "MACD line, signal and histogram (prices=..., fast=12, slow=26, signal=9).",
            "GET /v1/meta": "This document.",
            "GET /v1/bollinger": "Bollinger Bands + bandwidth & %B (prices=..., period=20, stddev=2)."
        },
        "description": "Live technical-analysis indicators computed on demand from the price series you pass in. The rsi endpoint returns Wilder's Relative Strength Index; the macd endpoint returns the MACD line, signal line and histogram; the bollinger endpoint returns the upper, middle and lower Bollinger Bands with bandwidth and %B; the ma endpoint returns a simple or exponential moving average. Computed live from your input, nothing stored — works for any market (forex, stocks, crypto, commodities). A technical-indicator engine, distinct from raw price feeds and from pivot/fibonacci level tools.",
        "upstream_status": "ok"
    },
    "meta": {
        "timestamp": "2026-06-10T22:56:27.794Z",
        "request_id": "4ebcb8ba-862e-4e50-b296-068e4cb2c588"
    },
    "status": "ok",
 
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/rsi` — Wilder Relative Strength Index

**Parameters:**
- `prices` (query, required, string) — Comma-separated close prices, oldest first Example: `100.00,101.63,103.18,104.54,105.65,106.44,106.88,106.95,106.66,106.02,105.09,103.94,102.65,101.30,100.00,98.82,97.86,97.18,96.83,96.85,97.25,98.00,99.07,100.40,101.92,103.55,105.19,106.75,108.14,109.29,110.13,110.62,110.74,110.49,109.89,109.00,107.87,106.59,105.25,103.93`
- `period` (query, optional, string) — Lookback period (default 14) Example: `14`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/technicals-api/v1/rsi?prices=100.00%2C101.63%2C103.18%2C104.54%2C105.65%2C106.44%2C106.88%2C106.95%2C106.66%2C106.02%2C105.09%2C103.94%2C102.65%2C101.30%2C100.00%2C98.82%2C97.86%2C97.18%2C96.83%2C96.85%2C97.25%2C98.00%2C99.07%2C100.40%2C101.92%2C103.55%2C105.19%2C106.75%2C108.14%2C109.29%2C110.13%2C110.62%2C110.74%2C110.49%2C109.89%2C109.00%2C107.87%2C106.59%2C105.25%2C103.93&period=14"
```

**Response:**
```json
{
    "data": {
        "count": 26,
        "value": 46.0368,
        "period": 14,
        "series": [
            50,
            45.8118,
            42.6796,
            40.5639,
            39.4792,
            39.5786,
            41.6436,
            45.4109,
            50.3368,
            55.689,
            60.8782,
            65.5389,
            69.4786,
            72.6784,
            75.1756,
            77.045,
            78.3288,
            79.0643,
            79.25,
            77.7034,
            73.9722,
            68.7022,
            62.6039,
            56.4873,
            50.8826,
            46.0368
        ],
        "signal": "neutral",
        "source": "TECHNICALS",
        "indicator": "rsi"
    },
    "meta": {
        "timestamp": "2026-06-10T22:56:27.881Z",
        "request_id": "bd492d73-bebe-411e-8dcd-b9c8e6719265"
    },
    "status": "ok",
    "message": "RSI computed",
    "success": true
}
```


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