API documentation
Base URL: https://otcfeed.com. All responses are JSON. Times are Unix seconds (UTC); a candle's time is the start of its interval.
Authentication
Send your key as a bearer token. Requests without a key are allowed for evaluation: last 3 days of data, 60 requests per minute per IP.
Authorization: Bearer otcf_your_key_here
GET /v1/symbols
All symbols with recorded data.
curl https://otcfeed.com/v1/symbols -H "Authorization: Bearer $KEY"
{"ok":true,"symbols":[{"symbol":"EURUSD_otc","name":"EUR/USD (OTC)","first":1794300000,"last":1794551000,"bars_1m":5210,"live":true}, …]}
Each symbol has a broker: quotex or pocketoption. Pocket Option symbols start with po., for example po.EURUSD_otc; the same pair on two brokers is two separate symbols because OTC quotes differ by platform.
GET /v1/candles
| Parameter | Description |
|---|---|
symbol | Required, e.g. EURUSD_otc |
tf | 1m (default), 5m, 15m, 30m, 1h, 4h, 1d |
from, to | Unix seconds. Default: the latest limit candles. |
limit | 1–5000, default 1000 |
curl "https://otcfeed.com/v1/candles?symbol=EURUSD_otc&tf=5m&limit=2" -H "Authorization: Bearer $KEY"
{"ok":true,"symbol":"EURUSD_otc","tf":"5m","candles":[
{"time":1794550500,"open":1.13612,"high":1.13655,"low":1.13590,"close":1.13631,"complete":true},
{"time":1794550800,"open":1.13631,"high":1.13640,"low":1.13562,"close":1.13575,"complete":false}]}
complete is false when a bucket is still forming or has missing minutes. Missing minutes are never filled in.
GET /v1/stream
Live updates as server-sent events: the minute still forming for symbol, about once a second. Connections close after 10 minutes; clients reconnect automatically.
const es = new EventSource("https://otcfeed.com/v1/stream?symbol=EURUSD_otc");
es.onmessage = e => console.log(JSON.parse(e.data)); // {time, open, high, low, close, at}
GET /v1/health
Newest recorded candle and current delay in seconds. No key needed.
Errors and limits
| Status | Meaning |
|---|---|
| 400 | Bad symbol or parameter |
| 401 | Invalid or revoked key |
| 429 | Rate limit exceeded — wait and retry |
Python example
import requests
r = requests.get("https://otcfeed.com/v1/candles",
params={"symbol": "EURUSD_otc", "tf": "1m", "limit": 500},
headers={"Authorization": "Bearer " + KEY}, timeout=10)
candles = r.json()["candles"]
Script editor
The charts page runs Pine-style indicator scripts in your browser. Supported: indicator, plot, plotshape, hline, ta.sma/ema/rma/wma/rsi/atr/stdev/highest/lowest/change/crossover/crossunder/cross/macd, math.*, if/else, var, := and history references like close[1]. Strategy and order functions are not supported. Pine Script is a trademark of TradingView; OTCFeed is not affiliated with TradingView.