{"openapi":"3.1.0","info":{"title":"FX Signals API","version":"1.0.0","description":"Live FX technical-analysis signals as an API, computed from European Central Bank daily reference rates. For any currency pair it builds the daily cross-rate series and returns the classic indicators traders watch — 20- and 50-day moving averages and their crossover (golden / death cross), a 14-day RSI (overbought / oversold) and momentum — rolled up into a simple bullish / neutral / bearish verdict. Get a pair's signal, its raw indicators with the recent closes, or scan a whole basket for the strongest setups. A ready-made signal layer for forex, trading and dashboard apps. Live, no key. Educational, not financial advice. Distinct from raw-rate, strength, volatility and correlation APIs.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/fxsignals-api","description":"oanor gateway"}],"tags":[{"name":"Signals"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/indicators":{"get":{"operationId":"get_v1_indicators","tags":["Signals"],"summary":"Raw indicators + recent closes","description":"","parameters":[{"name":"base","in":"query","required":true,"description":"Base currency","schema":{"type":"string"},"example":"GBP"},{"name":"quote","in":"query","required":true,"description":"Quote currency","schema":{"type":"string"},"example":"JPY"},{"name":"limit","in":"query","required":false,"description":"Recent closes 1-90","schema":{"type":"string"},"example":"20"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"base":"GBP","pair":"GBPJPY","as_of":"2026-06-08","quote":"JPY","indicators":{"price":213.7564,"score":0,"trend":"uptrend","rsi_14":53.59,"sma_20":213.8631,"sma_50":213.7587,"verdict":"neutral","ma_cross":"golden","rsi_state":"neutral","momentum_10d_pct":-0.36},"recent_closes":[213.1032,213.1514,213.3852,211.7863,212.5144,213.3239,213.1362,213.5643,213.5319,214.5267,214.437,214.1818,213.7426,213.8418,214.7457,215.22,214.9589,215.0653,215.2881,213.7564]},"meta":{"timestamp":"2026-06-09T03:03:29.744Z","request_id":"c16f8bcf-187f-4003-ba1b-69e31a450271"},"status":"ok","message":"Indicators retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/scan":{"get":{"operationId":"get_v1_scan","tags":["Signals"],"summary":"Scan a basket vs a base for setups","description":"","parameters":[{"name":"base","in":"query","required":false,"description":"Base currency","schema":{"type":"string"},"example":"USD"},{"name":"verdict","in":"query","required":false,"description":"bullish | bearish | neutral","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"base":"USD","as_of":"2026-06-08","count":7,"signals":[{"pair":"USDGBP","quote":"GBP","score":3,"trend":"uptrend","rsi_14":55.34,"verdict":"bullish","momentum_10d_pct":1.02},{"pair":"USDEUR","quote":"EUR","score":3,"trend":"uptrend","rsi_14":63.5,"verdict":"bullish","momentum_10d_pct":0.89},{"pair":"USDCAD","quote":"CAD","score":2,"trend":"uptrend","rsi_14":79.17,"verdict":"bullish","momentum_10d_pct":0.9},{"pair":"USDJPY","quote":"JPY","score":2,"trend":"uptrend","rsi_14":71.98,"verdict":"bullish","momentum_10d_pct":0.65},{"pair":"USDCHF","quote":"CHF","score":1,"trend":"downtrend","rsi_14":60.2,"verdict":"neutral","momentum_10d_pct":1.87},{"pair":"USDAUD","quote":"AUD","score":1,"trend":"downtrend","rsi_14":57.39,"verdict":"neutral","momentum_10d_pct":1.33},{"pair":"USDNZD","quote":"NZD","score":0,"trend":"downtrend","rsi_14":52.11,"verdict":"neutral","momentum_10d_pct":0.75}]},"meta":{"timestamp":"2026-06-09T03:03:29.873Z","request_id":"52ba664c-077c-4379-ac47-f1ac181a0ace"},"status":"ok","message":"Scan retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/signal":{"get":{"operationId":"get_v1_signal","tags":["Signals"],"summary":"Technical signal + verdict for a pair","description":"","parameters":[{"name":"base","in":"query","required":true,"description":"Base currency","schema":{"type":"string"},"example":"EUR"},{"name":"quote","in":"query","required":true,"description":"Quote currency","schema":{"type":"string"},"example":"USD"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"base":"EUR","pair":"EURUSD","as_of":"2026-06-08","price":1.154,"quote":"USD","score":-3,"trend":"downtrend","rsi_14":36.58,"sma_20":1.1637,"sma_50":1.1667,"verdict":"bearish","ma_cross":"death","rsi_state":"neutral","observations":64,"momentum_10d_pct":-0.88},"meta":{"timestamp":"2026-06-09T03:03:29.997Z","request_id":"30a7d3e1-b494-43f1-b6a6-9d65b4fd24a4"},"status":"ok","message":"Signal retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Service metadata","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"as_of":"2026-06-08","source":"ECB daily reference rates via Frankfurter (live)","service":"fxsignals-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/scan":"Scan a basket vs a base for setups (base=USD, verdict=bullish|bearish|neutral).","GET /v1/signal":"Technical signal + verdict for a pair (base=EUR&quote=USD).","GET /v1/indicators":"Raw indicators + recent closes for a pair (base, quote, limit)."},"indicators":["SMA20","SMA50","MA crossover","RSI14","momentum(10d)"],"description":"Live FX technical signals from ECB reference rates (Frankfurter): 20/50-day moving averages and crossover (golden/death), 14-day RSI (overbought/oversold) and momentum, rolled into a bullish/neutral/bearish verdict for any currency pair. Get a pair signal, raw indicators with recent closes, or scan a basket. Live, no key. Educational, not financial advice. Distinct from rate, strength, volatility and correlation APIs.","scan_basket":["USD","EUR","JPY","GBP","AUD","CAD","CHF","NZD"]},"meta":{"timestamp":"2026-06-09T03:03:30.125Z","request_id":"04a66669-a7ff-4c82-92d4-9b2fcd6fdecf"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":300,"rps_limit":3,"hard_limit":true},{"slug":"trader","name":"Trader","price_cents_month":1000,"monthly_call_quota":9000,"rps_limit":10,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2400,"monthly_call_quota":48000,"rps_limit":25,"hard_limit":true},{"slug":"business","name":"Business","price_cents_month":5500,"monthly_call_quota":240000,"rps_limit":45,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/fxsignals-api"}