Quickstart
Get started in any language
The FXMacroData API is a standard JSON REST API. Any language with HTTP support works. USD endpoints are free for the most recent 365 days — no key needed to try the examples below. Add an API key to extend the USD window or to access any other currency.
Base URL
https://fxmacrodata.com/api
Authentication
?api_key=YOUR_API_KEY
Response format
JSON (Content-Type: application/json)
openapi-generator-cli to auto-generate clients in 40+ languages.
Accept-Encoding: gzip on every request (8–12× smaller payloads), reuse the ETag response header in If-None-Match on repeat polls (returns 304 Not Modified with no body), and pass ?limit=50 on /v1/announcements & /v1/predictions when you only need recent rows. See the full reference →
Python
Install the official fxmacrodata package from PyPI. Sync and async clients, pandas-ready output.
Using the SDK
from fxmacrodata import Client client = Client(api_key="YOUR_API_KEY") # USD inflation — free, no key required data = client.get_indicator("usd", "inflation") # EUR policy rate — requires API key rate = client.get_indicator("eur", "policy_rate") # Free forex price data fx = client.get_fx_price("usd", "jpy")
Using the REST API directly
import requests resp = requests.get( "https://fxmacrodata.com/api/v1/announcements/usd/inflation", timeout=30, ) resp.raise_for_status() print(resp.json())
Async client
import asyncio from fxmacrodata import AsyncClient async def main(): async with AsyncClient(api_key="YOUR_API_KEY") as client: data = await client.get_indicator("eur", "cpi") print(data) asyncio.run(main())
Predictions & Forecasts
The /v1/predictions/{currency} and /v1/predictions/{currency}/{indicator} endpoints surface forecast data from market consensus surveys, central-bank projections, IMF World Economic Outlook, and professional-forecaster surveys. Each prediction is linked to its announcement via announcement_id, so you can join forecasts with realised observations.
Python — fetch predictions and join with actuals
import requests # Predictions for USD inflation — free, no key needed preds = requests.get( "https://fxmacrodata.com/api/v1/predictions/usd/inflation", timeout=30, ).json() for group in preds["data"]: print(group["announcement_id"], group["date"]) for p in group["predictions"]: print(f" {p['prediction_source_label']}: {p['predicted_value']}") # Filter by prediction type market = requests.get( "https://fxmacrodata.com/api/v1/predictions/usd", params={"prediction_type": "market_consensus", "indicator": "inflation"}, timeout=30, ).json() # Join predictions with actuals using announcement_id actuals = requests.get( "https://fxmacrodata.com/api/v1/announcements/usd/inflation", timeout=30, ).json() actuals_by_id = {row["announcement_id"]: row for row in actuals["data"]} for group in preds["data"]: actual = actuals_by_id.get(group["announcement_id"]) if actual: print(f"{group['date']}: actual={actual['val']}, forecast={group['predictions'][0]['predicted_value']}")
cURL — fetch predictions by type
# All USD inflation predictions — free curl "https://fxmacrodata.com/api/v1/predictions/usd/inflation" # Filter by prediction type: market_consensus, imf_weo, central_bank_forecast, survey curl "https://fxmacrodata.com/api/v1/predictions/usd/inflation?prediction_type=market_consensus" # EUR predictions — requires API key curl "https://fxmacrodata.com/api/v1/predictions/eur/inflation?api_key=YOUR_API_KEY" # All predictions for a currency (all indicators) curl "https://fxmacrodata.com/api/v1/predictions/usd?indicator=policy_rate"
Prediction types reference
| prediction_type | Description |
|---|---|
| market_consensus | Compiled market poll (e.g. Reuters/Bloomberg/Philly Fed SPF) |
| market_prediction | Professional-forecaster point prediction |
| survey | Central-bank survey of professional forecasters (e.g. ECB SPF) |
| central_bank_forecast | Official central-bank projection (e.g. RBNZ MPS, BoC MPR) |
| imf_weo | IMF World Economic Outlook projection |
| fxmacrodata | FXMacroData-generated prediction combining central-bank guidance, surveys, and historical trends |
cURL
No install needed. Works from any terminal.
# USD inflation — free, no key required curl "https://fxmacrodata.com/api/v1/announcements/usd/inflation" # EUR policy rate — pass your API key as a query parameter curl "https://fxmacrodata.com/api/v1/announcements/eur/policy_rate?api_key=YOUR_API_KEY" # Release calendar for Australia curl "https://fxmacrodata.com/api/v1/calendar/aud?api_key=YOUR_API_KEY" # Forex price history curl "https://fxmacrodata.com/api/v1/forex/usd/jpy" # Data catalogue (discover available indicators) curl "https://fxmacrodata.com/api/v1/data-catalogue"
JavaScript / TypeScript
Works in Node.js (18+), Deno, Bun, and modern browsers with the Fetch API.
Official npm client
import { FXMacroDataClient } from "@fxmacrodata/client"; const client = new FXMacroDataClient({ apiKey: "YOUR_API_KEY", }); // Public endpoint example const usdInflation = await client.announcements("usd", "inflation"); // Non-USD endpoint example (requires paid key) const eurRate = await client.announcements("eur", "policy_rate"); console.log(usdInflation, eurRate);
Using Fetch directly
// USD inflation — free, no key required const res = await fetch( "https://fxmacrodata.com/api/v1/announcements/usd/inflation" ); const data = await res.json(); console.log(data); // With API key for non-USD const API_KEY = "YOUR_API_KEY"; const eur = await fetch( `https://fxmacrodata.com/api/v1/announcements/eur/policy_rate?api_key=${API_KEY}` ); console.log(await eur.json());
Go
No external packages needed — the standard library handles everything.
package main import ( "encoding/json" "fmt" "net/http" "io" ) func main() { // USD inflation — free, no key required resp, err := http.Get("https://fxmacrodata.com/api/v1/announcements/usd/inflation") if err != nil { panic(err) } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) var result map[string]interface{} json.Unmarshal(body, &result) fmt.Println(result) }
R
Requires httr and jsonlite.
library(httr) library(jsonlite) # USD inflation — free, no key required res <- GET("https://fxmacrodata.com/api/v1/announcements/usd/inflation") data <- fromJSON(content(res, "text", encoding = "UTF-8")) # Convert to data frame df <- as.data.frame(data$data) head(df) # With API key for non-USD eur <- GET( "https://fxmacrodata.com/api/v1/announcements/eur/policy_rate", query = list(api_key = "YOUR_API_KEY") ) print(fromJSON(content(eur, "text")))
Java
Uses java.net.http (Java 11+). No external libraries needed.
import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class FXMacroDataExample { public static void main(String[] args) throws Exception { var client = HttpClient.newHttpClient(); var request = HttpRequest.newBuilder() .uri(URI.create("https://fxmacrodata.com/api/v1/announcements/usd/inflation")) .build(); var response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); } }
C# / .NET
Uses HttpClient (.NET 6+).
using System.Net.Http; using System.Text.Json; var client = new HttpClient(); // USD inflation — free, no key required var json = await client.GetStringAsync( "https://fxmacrodata.com/api/v1/announcements/usd/inflation" ); var doc = JsonDocument.Parse(json); Console.WriteLine(doc.RootElement);
MATLAB
Uses the built-in webread function.
% USD inflation — free, no key required data = webread('https://fxmacrodata.com/api/v1/announcements/usd/inflation'); disp(data); % With API key for non-USD opts = weboptions('Timeout', 30); url = 'https://fxmacrodata.com/api/v1/announcements/eur/policy_rate?api_key=YOUR_API_KEY'; eur = webread(url, opts); disp(eur);
Generate a typed client for any language
The FXMacroData API publishes a complete OpenAPI 3.1 specification. Use it with openapi-generator to produce fully typed clients for Kotlin, Swift, Rust, Dart, Ruby, PHP, and 40+ other languages.
# Install the openapi-generator CLI npm install @openapitools/openapi-generator-cli -g # Generate a Go client openapi-generator-cli generate \ -i https://fxmacrodata.com/api/openapi.json \ -g go \ -o ./fxmacrodata-go-client # Generate a Java client openapi-generator-cli generate \ -i https://fxmacrodata.com/api/openapi.json \ -g java \ -o ./fxmacrodata-java-client
Ready to build?
USD endpoints are free to use immediately. Subscribe for multi-currency access.