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/consensusEach 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
Returns your current rate-limit class (anonymous, signed-in, or API key) and remaining quota.
{ "authenticated": true, "tier": "authed", "rateLimit": { "perMinute": 600, "window": "60s" } }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" }Cross-firm consensus forecasts for major pairs
{ "consensus": [ { "currency": "EUR", "q4": 1.08, "eoy": 1.10, "firmCount": 6 }, ... ] }CFTC COT institutional positioning — non-commercial net contracts, 26-week series
{ "positioning": [ { "currency": "EUR", "latest": { "noncommNet": 45820, "reportDate": "2025-04-15" } } ] }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" } ] }List of all covered sell-side institutions
{ "firms": [ { "id": "gs", "name": "Goldman Sachs" }, ... ] }Full research report for a single institution
{ "report": { "firmId": "gs", "forecasts": [...], "trades": [...] } }Cross-firm forecast comparison. Optional query param: currency (e.g. EUR)
{ "comparisons": [ { "firmId": "gs", "currency": "EUR", "targetEOY": 1.10 }, ... ] }Historical forecast accuracy by firm and year
{ "years": [ { "year": 2024, "firms": [...], "actuals": {...} } ] }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" }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" }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": {...} }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 }, ... ] }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 } ] }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 } ] }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
| Tier | Monthly quota | Burst | Price |
|---|---|---|---|
| Free / anonymous | — | 60 / min | $0 |
| Starter | 10,000 | 6,000 / min | $299 / mo |
| Pro | 100,000 | 6,000 / min | $999 / mo |
| Enterprise | 10,000,000 | 6,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.