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)

Generate typed clients automatically: Use the published OpenAPI 3.1 spec with openapi-generator-cli to auto-generate clients in 40+ languages.
Free performance wins: Send 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 →
Official SDK

Python

Install the official fxmacrodata package from PyPI. Sync and async clients, pandas-ready output.

pip install fxmacrodata

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())
New

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.

USD is free for the most recent 365 days — no API key needed for USD predictions inside that window. The full USD history and all other currencies require a Professional API key.

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_typeDescription
market_consensusCompiled market poll (e.g. Reuters/Bloomberg/Philly Fed SPF)
market_predictionProfessional-forecaster point prediction
surveyCentral-bank survey of professional forecasters (e.g. ECB SPF)
central_bank_forecastOfficial central-bank projection (e.g. RBNZ MPS, BoC MPR)
imf_weoIMF World Economic Outlook projection
fxmacrodataFXMacroData-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

npm install @fxmacrodata/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.

install.packages(c("httr", "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.