{"openapi":"3.1.0","info":{"title":"FX Forward API","version":"1.0.0","description":"Live FX forward and interest-rate-parity maths that FX desks and treasurers run — computed on demand and deterministically, no key, nothing cached. Get the outright forward rate, forward points (in price and pips) and the annualised forward premium or discount from a spot rate, the two currencies' interest rates and a tenor; the full forward-points curve across standard tenors; the interest rate implied by a quoted forward; and a covered interest-rate-parity check that compares a market forward to its theoretical value and reports the cross-currency basis. Works for any currency pair. A forwards-and-parity engine, distinct from spot calculators and risk tools: it turns spot and rates into the forwards, points and basis a desk quotes.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/fxforward-api","description":"oanor gateway"}],"tags":[{"name":"FX Forward"}],"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/forward":{"get":{"operationId":"get_v1_forward","tags":["FX Forward"],"summary":"Outright forward rate, points & premium/discount","description":"","parameters":[{"name":"pair","in":"query","required":true,"description":"Currency pair BASE+QUOTE","schema":{"type":"string"},"example":"EURUSD"},{"name":"spot","in":"query","required":true,"description":"Spot rate (quote per base)","schema":{"type":"string"},"example":"1.10"},{"name":"rate_base","in":"query","required":true,"description":"Base currency annual rate (decimal)","schema":{"type":"string"},"example":"0.03"},{"name":"rate_quote","in":"query","required":true,"description":"Quote currency annual rate (decimal)","schema":{"type":"string"},"example":"0.05"},{"name":"days","in":"query","required":true,"description":"Tenor in days","schema":{"type":"string"},"example":"90"},{"name":"daycount","in":"query","required":false,"description":"Day-count basis 360 or 365 (default 360)","schema":{"type":"string"},"example":"360"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"days":90,"note":"EUR trades at a forward premium vs USD (driven by the rate differential 2%).","pair":"EUR/USD","spot":1.1,"source":"FXFORWARD","rate_base":0.03,"rate_quote":0.05,"base_status":"premium","tenor_years":0.25,"forward_rate":1.10545906,"annualized_pct":1.9851,"daycount_basis":360,"forward_points":0.00545906,"forward_points_pips":54.59},"meta":{"timestamp":"2026-06-10T22:56:12.133Z","request_id":"8496ef69-2cb8-4f3e-bc72-8d30fa90ebfe"},"status":"ok","message":"Forward 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/implied":{"get":{"operationId":"get_v1_implied","tags":["FX Forward"],"summary":"Solve one interest rate from a quoted forward","description":"","parameters":[{"name":"pair","in":"query","required":true,"description":"Currency pair BASE+QUOTE","schema":{"type":"string"},"example":"EURUSD"},{"name":"spot","in":"query","required":true,"description":"Spot rate","schema":{"type":"string"},"example":"1.10"},{"name":"forward","in":"query","required":true,"description":"Quoted forward rate","schema":{"type":"string"},"example":"1.1213"},{"name":"days","in":"query","required":true,"description":"Tenor in days","schema":{"type":"string"},"example":"360"},{"name":"rate_base","in":"query","required":false,"description":"Known base rate (omit to solve it; provide one rate only)","schema":{"type":"string"},"example":"0.03"},{"name":"rate_quote","in":"query","required":false,"description":"Known quote rate (omit to solve it)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"days":360,"pair":"EUR/USD","spot":1.1,"given":"rate_base","source":"FXFORWARD","forward":1.1213,"tenor_years":1,"daycount_basis":360,"implied_rate_pct":4.9945,"implied_rate_quote":0.049945},"meta":{"timestamp":"2026-06-10T22:56:12.235Z","request_id":"f4002ecb-8cd4-4791-b893-7ae1013949b4"},"status":"ok","message":"Implied rate 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/meta":{"get":{"operationId":"get_v1_meta","tags":["FX Forward"],"summary":"Service metadata and endpoint list","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Pair is BASE+QUOTE (EURUSD). Rates are annual decimals (0.05 = 5%). Money-market t = days/basis (basis 360 default, or 365). pip = 0.0001 (0.01 for JPY).","source":"Computed in-process (covered interest-rate parity)","service":"fxforward-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/parity":"Covered interest-rate parity check + cross-currency basis (pair=EURUSD, spot=1.10, forward=1.1213, rate_base=0.03, rate_quote=0.05, days=360).","GET /v1/points":"Forward-points curve across standard tenors (pair=EURUSD, spot=1.10, rate_base=0.03, rate_quote=0.05).","GET /v1/forward":"Outright forward rate, points & premium/discount (pair=EURUSD, spot=1.10, rate_base=0.03, rate_quote=0.05, days=90).","GET /v1/implied":"Solve one rate from a quoted forward (pair=EURUSD, spot=1.10, forward=1.1213, days=360, rate_base=0.03)."},"description":"Live FX forward and interest-rate-parity maths, computed on demand and deterministically. The forward endpoint returns the outright forward rate, forward points (price and pips) and the annualised forward premium/discount from a spot rate, the two currencies' interest rates and a tenor; the points endpoint returns the forward-points curve across standard tenors; the implied endpoint solves for one currency's interest rate from a quoted forward; the parity endpoint checks covered interest-rate parity, comparing a market forward to its theoretical value and reporting the cross-currency basis. Works for any currency pair. A forwards-and-parity engine, distinct from spot calculators and risk tools.","upstream_status":"ok"},"meta":{"timestamp":"2026-06-10T22:56:12.334Z","request_id":"9393acb5-8369-4520-8fa0-58217a2e84ba"},"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/parity":{"get":{"operationId":"get_v1_parity","tags":["FX Forward"],"summary":"Covered interest-rate-parity check + cross-currency basis","description":"","parameters":[{"name":"pair","in":"query","required":true,"description":"Currency pair BASE+QUOTE","schema":{"type":"string"},"example":"EURUSD"},{"name":"spot","in":"query","required":true,"description":"Spot rate","schema":{"type":"string"},"example":"1.10"},{"name":"forward","in":"query","required":true,"description":"Market forward rate","schema":{"type":"string"},"example":"1.1213"},{"name":"rate_base","in":"query","required":true,"description":"Base annual rate (decimal)","schema":{"type":"string"},"example":"0.03"},{"name":"rate_quote","in":"query","required":true,"description":"Quote annual rate (decimal)","schema":{"type":"string"},"example":"0.05"},{"name":"days","in":"query","required":true,"description":"Tenor in days","schema":{"type":"string"},"example":"360"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"pair":"EUR/USD","spot":1.1,"source":"FXFORWARD","arbitrage":"none","deviation":-5.922e-5,"parity_holds":true,"deviation_pct":-0.0054,"deviation_pips":-0.59,"market_forward":1.1213,"theoretical_forward":1.12135922,"cross_currency_basis_pct":-0.0055},"meta":{"timestamp":"2026-06-10T22:56:12.429Z","request_id":"7db1db80-1042-4b9e-a6b5-101794b3c32a"},"status":"ok","message":"Parity checked","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/points":{"get":{"operationId":"get_v1_points","tags":["FX Forward"],"summary":"Forward-points curve across standard tenors","description":"","parameters":[{"name":"pair","in":"query","required":true,"description":"Currency pair BASE+QUOTE","schema":{"type":"string"},"example":"EURUSD"},{"name":"spot","in":"query","required":true,"description":"Spot rate","schema":{"type":"string"},"example":"1.10"},{"name":"rate_base","in":"query","required":true,"description":"Base annual rate (decimal)","schema":{"type":"string"},"example":"0.03"},{"name":"rate_quote","in":"query","required":true,"description":"Quote annual rate (decimal)","schema":{"type":"string"},"example":"0.05"},{"name":"daycount","in":"query","required":false,"description":"Basis 360 or 365","schema":{"type":"string"},"example":"360"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"pair":"EUR/USD","spot":1.1,"curve":[{"days":7,"pips":4.28,"tenor":"1W","forward_rate":1.10042753,"forward_points":0.00042753},{"days":30,"pips":18.29,"tenor":"1M","forward_rate":1.10182876,"forward_points":0.00182876},{"days":60,"pips":36.48,"tenor":"2M","forward_rate":1.10364842,"forward_points":0.00364842},{"days":90,"pips":54.59,"tenor":"3M","forward_rate":1.10545906,"forward_points":0.00545906},{"days":180,"pips":108.37,"tenor":"6M","forward_rate":1.11083744,"forward_points":0.01083744},{"days":360,"pips":213.59,"tenor":"1Y","forward_rate":1.12135922,"forward_points":0.02135922}],"source":"FXFORWARD","rate_base":0.03,"rate_quote":0.05,"daycount_basis":360},"meta":{"timestamp":"2026-06-10T22:56:12.523Z","request_id":"83366025-80f3-49c1-800a-614e4b54ee4e"},"status":"ok","message":"Forward points 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"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":4550,"rps_limit":3,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":690,"monthly_call_quota":103000,"rps_limit":10,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1840,"monthly_call_quota":515000,"rps_limit":25,"hard_limit":true},{"slug":"business","name":"Business","price_cents_month":4420,"monthly_call_quota":3130000,"rps_limit":55,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/fxforward-api"}