{"openapi":"3.1.0","info":{"title":"FX History API","version":"1.0.0","description":"Live historical foreign-exchange rates and analytics from the European Central Bank's daily reference rates — no key, nothing cached. Get the daily rate of a currency pair over any date range; the absolute and percentage move between two dates with its high and low; min, max, average, volatility and the best and worst day over a range; and every rate on a specific date. An FX history-and-analytics layer, distinct from spot-conversion feeds — it turns the ECB rate archive into the time series, moves and volatility a trader or analyst studies. Around 30 currencies, weekdays, back to 1999.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/fxhistory-api","description":"oanor gateway"}],"tags":[{"name":"FX History"}],"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/change":{"get":{"operationId":"get_v1_change","tags":["FX History"],"summary":"Absolute & percent move between two dates + high/low","description":"","parameters":[{"name":"symbol","in":"query","required":true,"description":"Quote currency 3-letter code","schema":{"type":"string"},"example":"EUR"},{"name":"start","in":"query","required":true,"description":"Start date YYYY-MM-DD","schema":{"type":"string"},"example":"2024-01-01"},{"name":"end","in":"query","required":false,"description":"End date YYYY-MM-DD (default latest)","schema":{"type":"string"},"example":"2024-12-31"},{"name":"base","in":"query","required":false,"description":"Base currency (default USD)","schema":{"type":"string"},"example":"USD"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"low":0.89318,"base":"USD","days":257,"high":0.96256,"source":"ECB (Frankfurter)","symbol":"EUR","end_date":"2024-12-31","end_rate":0.96256,"change_abs":0.05758,"change_pct":6.3626,"start_date":"2023-12-29","start_rate":0.90498,"high_low_range_pct":7.7678},"meta":{"timestamp":"2026-06-10T22:56:19.146Z","request_id":"bd694cac-4daf-42fd-93a6-fd4fee1c234a"},"status":"ok","message":"Change computed","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/historical":{"get":{"operationId":"get_v1_historical","tags":["FX History"],"summary":"Every rate on a specific date","description":"","parameters":[{"name":"date","in":"query","required":true,"description":"Date YYYY-MM-DD","schema":{"type":"string"},"example":"2020-03-16"},{"name":"base","in":"query","required":false,"description":"Base currency (default USD)","schema":{"type":"string"},"example":"USD"},{"name":"symbols","in":"query","required":false,"description":"Comma-separated quote currencies (omit for all)","schema":{"type":"string"},"example":"EUR,GBP,JPY"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"base":"USD","date":"2020-03-16","rates":{"EUR":0.8963,"GBP":0.8149,"JPY":105.55},"source":"ECB (Frankfurter)"},"meta":{"timestamp":"2026-06-10T22:56:19.244Z","request_id":"ceae0b97-0106-4ab9-b3bb-1c302170b4bd"},"status":"ok","message":"Historical rates 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":["FX History"],"summary":"Service metadata and endpoint list","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"source":"ECB reference rates via Frankfurter (api.frankfurter.dev, live)","service":"fxhistory-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/stats":"Min/max/avg/volatility + best & worst day over a range (base=USD, symbol=EUR, start=..., end=...).","GET /v1/change":"Absolute & percent move between two dates + high/low (base=USD, symbol=EUR, start=..., end=...).","GET /v1/historical":"Every rate on a specific date (date=2020-03-16, base=USD, symbols=EUR,GBP optional).","GET /v1/timeseries":"Daily rate of a pair over a range (base=USD, symbol=EUR, start=2024-01-01, end=optional)."},"description":"Live historical foreign-exchange rates and analytics from the European Central Bank's daily reference rates. The timeseries endpoint returns the daily rate of a currency pair over any date range; the change endpoint returns the absolute and percentage move between two dates with high and low; the stats endpoint returns min, max, average, volatility and the best and worst day over a range; the historical endpoint returns every rate on a specific date. Live from the ECB, nothing stored. An FX history-and-analytics layer, distinct from spot-conversion feeds — it turns the ECB rate archive into the time series, moves and volatility a trader or analyst studies. ~30 currencies, weekdays, back to 1999.","latest_date":"2026-06-10","currency_count":30,"upstream_status":"ok"},"meta":{"timestamp":"2026-06-10T22:56:19.345Z","request_id":"319660d0-82bb-4962-8c0b-c2302e074bbe"},"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"}}}},"/v1/stats":{"get":{"operationId":"get_v1_stats","tags":["FX History"],"summary":"Min/max/avg/volatility + best & worst day over a range","description":"","parameters":[{"name":"symbol","in":"query","required":true,"description":"Quote currency 3-letter code","schema":{"type":"string"},"example":"EUR"},{"name":"start","in":"query","required":true,"description":"Start date YYYY-MM-DD","schema":{"type":"string"},"example":"2024-01-01"},{"name":"end","in":"query","required":false,"description":"End date YYYY-MM-DD (default latest)","schema":{"type":"string"},"example":"2024-12-31"},{"name":"base","in":"query","required":false,"description":"Base currency (default USD)","schema":{"type":"string"},"example":"USD"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"max":0.96256,"min":0.89318,"base":"USD","days":257,"stdev":0.01493221,"source":"ECB (Frankfurter)","symbol":"EUR","average":0.924053,"best_day":{"date":"2024-11-06","change_pct":1.8895},"end_date":"2024-12-31","worst_day":{"date":"2024-08-05","change_pct":-1.194},"start_date":"2023-12-29","annualized_volatility":0.06008},"meta":{"timestamp":"2026-06-10T22:56:19.471Z","request_id":"7e3828a5-7f83-463b-9c91-1d12bf4f5b14"},"status":"ok","message":"Stats computed","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/timeseries":{"get":{"operationId":"get_v1_timeseries","tags":["FX History"],"summary":"Daily rate of a pair over a date range","description":"","parameters":[{"name":"symbol","in":"query","required":true,"description":"Quote currency 3-letter code","schema":{"type":"string"},"example":"EUR"},{"name":"start","in":"query","required":true,"description":"Start date YYYY-MM-DD","schema":{"type":"string"},"example":"2024-01-01"},{"name":"base","in":"query","required":false,"description":"Base currency (default USD)","schema":{"type":"string"},"example":"USD"},{"name":"end","in":"query","required":false,"description":"End date YYYY-MM-DD (default latest)","schema":{"type":"string"},"example":"2024-01-31"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"end":"2024-01-31","base":"USD","count":23,"start":"2024-01-01","series":[{"date":"2023-12-29","rate":0.90498},{"date":"2024-01-02","rate":0.91274},{"date":"2024-01-03","rate":0.91583},{"date":"2024-01-04","rate":0.91299},{"date":"2024-01-05","rate":0.91567},{"date":"2024-01-08","rate":0.91358},{"date":"2024-01-09","rate":0.91408},{"date":"2024-01-10","rate":0.91358},{"date":"2024-01-11","rate":0.91017},{"date":"2024-01-12","rate":0.91391},{"date":"2024-01-15","rate":0.91366},{"date":"2024-01-16","rate":0.91895},{"date":"2024-01-17","rate":0.91937},{"date":"2024-01-18","rate":0.91954},{"date":"2024-01-19","rate":0.91853},{"date":"2024-01-22","rate":0.91827},{"date":"2024-01-23","rate":0.91979},{"date":"2024-01-24","rate":0.91701},{"date":"2024-01-25","rate":0.91802},{"date":"2024-01-26","rate":0.91988},{"date":"2024-01-29","rate":0.92396},{"date":"2024-01-30","rate":0.922},{"date":"2024-01-31","rate":0.92276}],"source":"ECB (Frankfurter)","symbol":"EUR"},"meta":{"timestamp":"2026-06-10T22:56:19.586Z","request_id":"408b3762-c0f6-4547-b1f3-50f98a58d7f4"},"status":"ok","message":"Time series 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"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":5400,"rps_limit":3,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":625,"monthly_call_quota":116000,"rps_limit":10,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1700,"monthly_call_quota":560000,"rps_limit":25,"hard_limit":true},{"slug":"business","name":"Business","price_cents_month":4150,"monthly_call_quota":3400000,"rps_limit":55,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/fxhistory-api"}