Skip to content

FX Bank Forecast · API

Public coverage API

Read-only JSON access to live FX rates, multi-firm consensus, institutional positioning, and the macro calendar. Anonymous requests are subject to a 60 requests/minute soft limit. Sign up at /pricing#api to receive a self-serve API key with a monthly quota up to 10 million requests.

Base URL

https://fxbankforecast.com

Authentication

API keys are issued and revoked from /account/api. The plaintext key is shown exactly once at creation — save it immediately. Pass it on every request as a Bearer token:

curl -H "Authorization: Bearer fbf_sk_xxxxxxxx..." \
     https://fxbankforecast.com/api/consensus

Each response includes X-RateLimit-Remaining, X-RateLimit-Reset, and X-RateLimit-Tier so clients can self-throttle. Exhausted quotas return HTTP 429 with a JSON quota_exceeded error.

Endpoints

GET/api/me

Returns your current rate-limit class (anonymous, signed-in, or API key) and remaining quota.

{ "authenticated": true, "tier": "authed", "rateLimit": { "perMinute": 600, "window": "60s" } }
GET/api/rates

Live FX spot rates (USD base) across 28 currency pairs

{ "rates": { "EUR": 1.0821, "GBP": 1.2603, "JPY": 154.12, ... }, "base": "USD", "source": "oanda-v20" }
GET/api/consensus

Cross-firm consensus forecasts for major pairs

{ "consensus": [ { "currency": "EUR", "q4": 1.08, "eoy": 1.10, "firmCount": 6 }, ... ] }
GET/api/positioning

CFTC COT institutional positioning — non-commercial net contracts, 26-week series

{ "positioning": [ { "currency": "EUR", "latest": { "noncommNet": 45820, "reportDate": "2025-04-15" } } ] }
GET/api/economic-events

Macro calendar events. Query params: days_back (default 14), days_ahead (default 30), impact (high|medium|low)

{ "events": [ { "date": "2025-04-30T12:30:00Z", "name": "Fed Funds Rate", "currency": "USD", "impact": "high" } ] }
GET/api/firms

List of all covered sell-side institutions

{ "firms": [ { "id": "gs", "name": "Goldman Sachs" }, ... ] }
GET/api/firms/:firm

Full research report for a single institution

{ "report": { "firmId": "gs", "forecasts": [...], "trades": [...] } }
GET/api/compare

Cross-firm forecast comparison. Optional query param: currency (e.g. EUR)

{ "comparisons": [ { "firmId": "gs", "currency": "EUR", "targetEOY": 1.10 }, ... ] }
GET/api/track-record

Historical forecast accuracy by firm and year

{ "years": [ { "year": 2024, "firms": [...], "actuals": {...} } ] }
GET/api/gold-price

Live gold spot price (USD/oz) with intraday change and recent history

{ "price": 2342.10, "change": 12.40, "changePct": 0.53, "source": "yahoo-gold-futures" }
GET/api/oil-price

Live WTI crude price (USD/bbl) with intraday change and recent history

{ "price": 81.24, "change": -0.38, "changePct": -0.47, "source": "yahoo-wti-futures" }
GET/api/v1/surprises

Pro tier. Scored economic-print surprises (actual vs estimate) with event context, plus the count of bank forecast revisions that reacted within 5 days. Query: currency, impact (high|medium|low), fromDate, toDate.

{ "surprises": [ { "event": "US Nonfarm Payrolls", "currency": "USD", "actual": 256, "estimate": 165, "surprisePct": 55.2, "reactionCount": 3 } ], "pagination": {...} }
GET/api/v1/distribution

Pro tier. Latest statistical forecast distribution for a pair — full 51-point probability density. Query: pair (e.g. EURUSD), tenor (30|90|365 days, default 30).

{ "pair": "EURUSD", "tenor": 30, "density": [ { "x": 1.05, "p": 0.012 }, ... ] }
GET/api/v1/leaders

Pro tier. Revision-leadership rankings (rolling 18-month) — which firms move consensus first. Query: pair (single-currency code, e.g. EUR), horizon.

{ "leaders": [ { "firmId": "db", "currency": "EUR", "horizon": "short", "leadScore": 0.82, "rank": 1 } ] }
GET/api/v1/leaderboard

Pro tier. Rolling-1y hit-rate leaderboard cards per (pair × horizon). Query: asset (fx|oil|gold, default fx).

{ "asset": "fx", "cards": [ { "pair": "EURUSD", "horizon": "12m", "hitRatePct": 61, "sample": 24 } ] }
GET/api/v1/outliers

Pro tier. Currently-active out-of-consensus trade signals (unresolved). Query: pair (e.g. EURUSD), horizon.

{ "outliers": [ { "pair": "EURUSD", "horizon": "short", "firmId": "gs", "target": 1.15, "deviationPct": 4.0 } ] }

Rate limiting

Every response includes the following headers:

X-RateLimit-Limit      # Requests permitted in the current window
X-RateLimit-Remaining  # Requests remaining before the limit is reached
X-RateLimit-Reset      # Window reset time (UTC Unix seconds)

When the limit is exceeded, the API returns HTTP 429 with a Retry-After header (seconds until the next request is permitted) and a JSON body:

{ "error": "rate_limit_exceeded", "message": "Rate limit exceeded. Please throttle requests.", "retryAfter": 12 }

Sign in at /login and visit /api/me to see your current rate-limit class and remaining quota.

Plans

TierMonthly quotaBurstPrice
Free / anonymous60 / min$0
Starter10,0006,000 / min$299 / mo
Pro100,0006,000 / min$999 / mo
Enterprise10,000,0006,000 / min$2,499 / mo (annual)

Quotas roll over on a 30-day window from key creation. Subscribe at /pricing#api and issue your key from /account/api.

Schema

OpenAPI specification — available on request via coverage@fxbankforecast.com.

FX BANK FORECAST · COVERAGE

Institutional FX coverage in your inbox

Aggregated year-end forecasts, scenario shifts, and curated analyst notes from eight institutional desks. No promotion.