Am Ende dieses Leitfadens können Sie alle makroökonomischen Indikatoren abfragen, den vollständigen Katalog der verfügbaren Daten entdecken und die bevorstehenden Veröffentlichungsdaten über die FXMacroData überprüfen. Endpunkt von GraphQL mit nichts mehr als curlSie werden auch wissen, wie Sie mehrere Abfragen in eine einzige Hin- und Rückreise bündeln können, damit Ihre Skripte schlank und schnell bleiben.
Voraussetzungen
- - Das ist ein ... FXMacroData-API-Schlüssel USD-Indikatoren und der Datensatz sind kostenlos ohne Schlüssel; alle anderen Währungen benötigen einen Schlüssel. Die Daten werden von der Agentur für Datensicherheit erfasst.
curl(oder jeder HTTP-Client) für die ersten Testanrufe- Python 3.9+ mit dem
requestsDiepip install requests) für die Python-Beispiele - Node.js 18+ für die JavaScript-Beispiele
- Grundlegende Kenntnisse der GraphQL-Abfrage-Syntax (Feldliste in lockigen Klammern)
Warum GraphQL statt REST?
Die FXMacroData REST API bedient jeden Indikator an seinem eigenen Endpunkt eine Hin- und Rückreise pro Währung/Indikatorkombination. GraphQL ermöglicht es Ihnen, genau die benötigten Felder zu deklarieren und mehrere unabhängige Abfragen in eine einzige HTTP-Anfrage zu kombinieren. und der Leitzins des GBP und Die Kommission hat die Kommission aufgefordert, die für beide Währungen anstehenden Veröffentlichungskalender zu ändern, d. h. eine POST statt vier GET-Anfragen zu erstellen.
Die GraphQL-Oberfläche spiegelt die öffentlichen REST-Endpunkte genau wider: dieselben Authentifizierungsregeln, dieselben Daten und dieselben Feldnamen nur über eine einzige
POST /api/v1/graphql Endpunkt mit einem JSON-Körper.
GraphQL-Endpunkt auf einen Blick
- URL:
https://fxmacrodata.com/api/v1/graphql - Verfahren: Nachrichten
- Schreiber:
?api_key=YOUR_API_KEYAbfrageparameter - Inhaltstyp:
application/json - Freier Zugang: USD-Indikatoren und
dataCatalogue- Ich weiß .calendar(keinerlei Schlüssel erforderlich) - Abfragefelder:
announcements- Ich weiß .dataCatalogue- Ich weiß .calendar
Schritt 1 Senden Sie Ihre erste GraphQL-Abfrage
Jede GraphQL-Anfrage ist ein JSON-Objekt mit einem query Start mit einer kostenlosen USD-Inflationsabfrage kein API-Schlüssel erforderlich:
curl -s -X POST "https://fxmacrodata.com/api/v1/graphql" \
-H "Content-Type: application/json" \
-d '{
"query": "{ announcements(currency: \"USD\", indicator: \"inflation\") { currency indicator data { date val pctChange } } }"
}'
Die Antwort ist ein Standard GraphQL JSON in einem data Umschlag:
{
"data": {
"announcements": {
"currency": "USD",
"indicator": "inflation",
"data": [
{ "date": "2025-01-01", "val": 3.0, "pctChange": null },
{ "date": "2025-02-01", "val": 2.8, "pctChange": -6.67 },
{ "date": "2025-03-01", "val": 2.4, "pctChange": -14.29 }
]
}
}
}
Für jede andere Währung als USD fügen Sie Ihren API-Schlüssel als Abfrageparameter auf der Endpunkt-URL an:
https://fxmacrodata.com/api/v1/graphql?api_key=YOUR_API_KEY
Tipp-Aufruf .
pctChange ist die Veränderung von Monat zu Monat (oder von Zeitraum zu Zeitraum) im Vergleich zum vorherigen Datenpunkt.
null Denn es gibt keinen vorherigen Wert, mit dem man vergleichen kann.
Schritt 2 Entdecken Sie verfügbare Indikatoren mit dataCatalogue
Vor der Abfrage eines bestimmten Indikators können Sie die API fragen, welche Daten sie für jede Währung hat. dataCatalogue Die Abfrage gibt alle verfügbaren Indikatorschlümpfe, ihren menschlich lesbaren Namen, ihre Einheit, ihre Frequenz und die Frage zurück, ob die Zentralbank eine offizielle Prognose für sie veröffentlicht.
curl -s -X POST "https://fxmacrodata.com/api/v1/graphql" \
-H "Content-Type: application/json" \
-d '{
"query": "{ dataCatalogue(currency: \"EUR\") { currency indicators { slug name unit frequency hasOfficialForecast } } }"
}'
Beispiel für die Antwort (verkürzt):
{
"data": {
"dataCatalogue": {
"currency": "EUR",
"indicators": [
{ "slug": "inflation", "name": "Inflation (CPI)", "unit": "%", "frequency": "monthly", "hasOfficialForecast": false },
{ "slug": "policy_rate", "name": "Policy Rate", "unit": "%", "frequency": "irregular", "hasOfficialForecast": true },
{ "slug": "gdp", "name": "GDP Growth", "unit": "%", "frequency": "quarterly", "hasOfficialForecast": false },
{ "slug": "unemployment", "name": "Unemployment", "unit": "%", "frequency": "monthly", "hasOfficialForecast": false }
]
}
}
}
Die ... slug Die Werte sind die exakten Zeichenfolgen , die Sie als indicator
Ich werde später weitermachen . announcements Sie können den vollständigen Indikatorkatalog interaktiv im
Datendokumente der API- Ich weiß .
Schritt 3 Historische Daten mit optionalen Datumsfiltern abrufen
Die ... announcements Abfrage akzeptiert optional startDate Und ...
endDate Argumente in YYYY-MM-DD Sie können auch das Zentralbankziel neben der Reihe anfordern, die nützlich ist, wenn Sie die Live-Lese gegen das offizielle Zinsziel vergleichen.
curl -s -X POST "https://fxmacrodata.com/api/v1/graphql?api_key=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "query { announcements(currency: \"AUD\", indicator: \"policy_rate\", startDate: \"2024-01-01\") { currency indicator hasOfficialForecast cbTarget { description current { effectiveFrom target } } data { date val announcementDatetime } } }"
}'
Die Antwort zeigt:
{
"data": {
"announcements": {
"currency": "AUD",
"indicator": "policy_rate",
"hasOfficialForecast": true,
"cbTarget": {
"description": "RBA cash rate target band",
"current": { "effectiveFrom": "2023-11-07", "target": 4.35 }
},
"data": [
{ "date": "2024-02-06", "val": 4.35, "announcementDatetime": 1707199200 },
{ "date": "2024-03-19", "val": 4.35, "announcementDatetime": 1710813600 }
]
}
}
}
announcementDatetime ist ein Unix-Zeitstempel (Sekunden, UTC) der offiziellen Veröffentlichung.
AUD-Leistungsdokumente- Ich weiß .
Schritt 4 Abfrage des Veröffentlichungskalenders
Die ... calendar Die Abfrage gibt die geplanten UTC-Ankündigungszeiten für jede kommende Indikatorveröffentlichung für eine bestimmte Währung zurück. indicator
Die Ergebnisse sind auf einen Indikator beschränkt.
curl -s -X POST "https://fxmacrodata.com/api/v1/graphql?api_key=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "{ calendar(currency: \"GBP\", indicator: \"inflation\") { currency data { release announcementDatetime } } }"
}'
{
"data": {
"calendar": {
"currency": "GBP",
"data": [
{ "release": "inflation", "announcementDatetime": 1745917200 }
]
}
}
}
Konvertieren . announcementDatetime zu einer für den Menschen lesbaren UTC-Zeit in Python mit
datetime.utcfromtimestamp(1745917200), oder in JavaScript mit
new Date(1745917200 * 1000).toISOString()Die Einzelheiten des GBP-Inflationsindicators finden Sie in der
GBP-Inflationsaufschlüsse- Ich weiß .
Schritt 5 Mehrfache Abfragen in einer Anfrage
Der größte praktische Vorteil von GraphQL ist die Fähigkeit, mehrere unabhängige Abfragen in einem einzigen HTTP POST zu benennen und zu senden. data Antwortobjekt.
curl -s -X POST "https://fxmacrodata.com/api/v1/graphql?api_key=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "query MultiIndicator { eurInflation: announcements(currency: \"EUR\", indicator: \"inflation\") { currency indicator data { date val } } gbpRate: announcements(currency: \"GBP\", indicator: \"policy_rate\") { currency indicator data { date val } } audCalendar: calendar(currency: \"AUD\") { currency data { release announcementDatetime } } }"
}'
Die Antwort enthält alle drei Ergebnisse in einer Nutzlast:
{
"data": {
"eurInflation": { "currency": "EUR", "indicator": "inflation", "data": [ ... ] },
"gbpRate": { "currency": "GBP", "indicator": "policy_rate", "data": [ ... ] },
"audCalendar": { "currency": "AUD", "data": [ ... ] }
}
}
Tipp-Aufruf .
Schritt 6 Python-Client
Das nachstehende Muster umhüllt GraphQL-Anfragen in einen kleinen Helfer, so dass Ihr Anwendungscode lesbar bleibt.
import requests
GRAPHQL_URL = "https://fxmacrodata.com/api/v1/graphql"
API_KEY = "YOUR_API_KEY" # leave empty for free USD/catalogue endpoints
def gql(query: str) -> dict:
"""Send a GraphQL query and return the parsed `data` object."""
params = {"api_key": API_KEY} if API_KEY else {}
resp = requests.post(
GRAPHQL_URL,
params=params,
json={"query": query},
headers={"Content-Type": "application/json"},
timeout=15,
)
resp.raise_for_status()
payload = resp.json()
if "errors" in payload:
raise RuntimeError(f"GraphQL errors: {payload['errors']}")
return payload["data"]
# ── Discover indicators for AUD ──────────────────────────────────────────────
catalogue = gql('{ dataCatalogue(currency: "AUD") { indicators { slug name frequency } } }')
for ind in catalogue["dataCatalogue"]["indicators"]:
print(f" {ind['slug']:25s} {ind['name']} ({ind['frequency']})")
# ── Fetch EUR inflation + GBP policy rate in one round-trip ─────────────────
batch = gql('''
query {
eurInflation: announcements(currency: "EUR", indicator: "inflation") {
currency indicator data { date val pctChange }
}
gbpRate: announcements(currency: "GBP", indicator: "policy_rate") {
currency indicator data { date val }
}
}
''')
eur_latest = batch["eurInflation"]["data"][-1]
gbp_latest = batch["gbpRate"]["data"][-1]
print(f"EUR CPI {eur_latest['date']}: {eur_latest['val']}% ({eur_latest['pctChange']:+.2f}% MoM)")
print(f"GBP Rate {gbp_latest['date']}: {gbp_latest['val']}%")
Schritt 7 JavaScript / Node.js-Client
Der Einheimische . fetch Die API (Node.js 18+) verarbeitet GraphQL-Anfragen mit minimalem Boilerplate. Das Muster spiegelt den Python-Helfer oben wider.
const GRAPHQL_URL = "https://fxmacrodata.com/api/v1/graphql";
const API_KEY = "YOUR_API_KEY"; // set to "" for free USD/catalogue endpoints
async function gql(query) {
const url = API_KEY ? `${GRAPHQL_URL}?api_key=${API_KEY}` : GRAPHQL_URL;
const resp = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ query }),
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const payload = await resp.json();
if (payload.errors) throw new Error(JSON.stringify(payload.errors));
return payload.data;
}
// Batched query: EUR inflation + calendar
const data = await gql(`
query {
eurInflation: announcements(currency: "EUR", indicator: "inflation") {
data { date val pctChange }
}
eurCalendar: calendar(currency: "EUR", indicator: "inflation") {
data { release announcementDatetime }
}
}
`);
const latest = data.eurInflation.data.at(-1);
const nextRelease = data.eurCalendar.data[0];
console.log(`EUR CPI ${latest.date}: ${latest.val}% (${latest.pctChange > 0 ? "+" : ""}${latest.pctChange?.toFixed(2)}% MoM)`);
if (nextRelease) {
const dt = new Date(nextRelease.announcementDatetime * 1000).toISOString();
console.log(`Next EUR inflation release: ${dt}`);
}
Schritt 8 Fehler mit Anmut behandeln
GraphQL gibt HTTP 200 zurück, auch wenn ein Abfragefeld fehlschlägt.
errors Sie werden neben irgendeinem Teil angeordnet. data Überprüfen Sie, ob dieses Array vor der Verwendung der Antwort ein fehlgeschlagener Alias in einer gepachteten Abfrage die anderen Aliases nicht daran hindert, Daten zurückzugeben.
payload = resp.json()
# Partial success: some aliases may have data, others may have errors
if "errors" in payload:
for err in payload["errors"]:
print(f"[GraphQL error] {err.get('message')} — path: {err.get('path')}")
data = payload.get("data") or {}
if "eurInflation" in data and data["eurInflation"]:
process(data["eurInflation"])
- Das ist ein Info-Aufruf .
- Nicht unterstützte Währung die
errorsDas Array enthält eine Nachricht wie "Nicht unterstützte Währung: XYZ"Überprüfen Sie Ihren Währungscode mit dem API-Dokumentation- Ich weiß . - Nicht gültiger Indikator laufen
dataCatalogueErstmals eine Abfrage, um zu bestätigen, dass die Indikator-Slug für Ihre Zielwährung existiert. - Fehler bei der Authentifizierung HTTP 401 oder GraphQL-Fehler, der einen ungültigen Schlüssel anführt.
api_keywird der URL beigefügt, nicht dem JSON-Body.
Zusammenfassung .
Was Sie erreicht haben
- ✓ Ihre erste GraphQL-Abfrage an
https://fxmacrodata.com/api/v1/graphql - ✓ Verwendet
dataCatalogueum jeden verfügbaren Indikator für eine Währung zu entdecken - ✓ Filterte historische Daten mit ✓
startDateUnd ...endDateArgumente - ✓ Erhaltene Zeitstempel für die bevorstehende Veröffentlichung mit der ✓
calendarAbfrage - ✓ Mehrfache unabhängige Abfragen in einem einzigen HTTP POST mit benannten Aliasen zusammengefasst
- ✓ Eingebettete wiederverwendbare GraphQL-Helferfunktionen in Python und JavaScript
- ✓ Teilfehler behandelt, ohne gültige Daten aus anderen Aliasen zu entfernen
Nächste Schritte
Jetzt, da Sie den GraphQL-Endpunkt fließend abfragen können, werden einige natürliche Erweiterungen Ihre Integration produktionsbereit machen:
-
Planen Sie Abfragen um die Freigabezeiten. Kombinieren Sie die
calendarDie Datenbank wird in der Regel mit dem in Wie man die Release Calendar API verwendet, um Indikator-Abrufe zu planen wachst kurz vor jeder Ankündigung auf und feuern du deinenannouncementsDie Daten werden in dem Moment abgerufen, in dem neue Daten veröffentlicht werden. -
Entdecken Sie das gesamte Schema interaktiv. Wenn Sie Zugang zu einer Entwicklungsumgebung mit
ENABLE_GRAPHIQL=true- Ich bin nicht hier ./api/v1/graphqlSie können die integrierte GraphiQL IDE mit automatischer Ausfüllung und Inline-Dokumentation für jedes Feld verwenden. -
Erweitern Sie Ihre Abdeckung auf mehr Währungen. Lauf .
dataCataloguefür jede der unterstützten Währungen USD, EUR, GBP, AUD, CAD, JPY, CHF und NZD um ein vollständiges Bild davon zu erhalten, welche Daten im gesamten G8-Flex-Universum verfügbar sind.
Das FXMacroData Team