Announcement series variants
One endpoint, explicit macro series parameters.
FXMacroData uses a stable announcement path and query parameters to select the exact macro series variant. This keeps existing URLs working while exposing the basis fields customers need for cross-currency comparison: seasonal adjustment, real or nominal basis, returned frequency, source series ID, revision view, and pagination.
- Stable path
https://fxmacrodata.com/api/announcements/{currency}/{indicator}- Default rows
limit=20, most-recent-first, maximum100- Compatibility
- Existing v1 clients keep receiving the canonical series when selectors are omitted.
Endpoint model
Use parameters instead of endpoint sprawl.
The public route stays /api/v1/announcements/{currency}/{indicator}. Customers then add selectors
only when they need a non-default variant. For example, GDP can be requested as real or nominal and unemployment
can expose whether the selected source is seasonally adjusted. We do not create parallel slugs such as
real_gdp, gdp_nominal_yoy, or unemployment_sa.
Canonical by default
/usd/gdp returns the current canonical GDP series. For GDP, that should be real where a real official series is available.
Selectors are explicit
basis=nominal, seasonality=sa, frequency=yoy, and revisions=first make the requested variant auditable.
Unsupported requests fail clearly
If a selector is not available for that endpoint, the API returns 400 unsupported_series_option with supported values.
Query parameters
Selectors available on announcement endpoints.
These parameters are available on the announcement endpoint family. Not every indicator supports every selector.
Read supported_options in the response, or the data catalogue, before building a selector UI.
| Parameter | Values | Default | Purpose |
|---|---|---|---|
seasonality |
sa, nsa |
Canonical endpoint series | Selects seasonally adjusted or not seasonally adjusted data when both are available. The response metadata reports seasonal_adjustment as SA, NSA, UNKNOWN, or NOT_APPLICABLE. |
frequency |
level, yoy, qoq, mom |
Canonical endpoint series | Selects the returned observation basis. Use level for the level/index/rate itself, or a change basis when the endpoint supports one. |
revisions |
latest, first, final, all |
latest |
Controls whether rows use the latest known value, the first published value, final revised value, or include all stored revision events in revisions[]. |
basis |
real, nominal |
Canonical endpoint series | Selects inflation-adjusted real data or current-price nominal data where both are available. The response metadata reports price_basis as REAL, NOMINAL, or UNKNOWN. |
series_mode |
raw, canonical |
raw |
Controls whether configured continuity remaps are applied. Use canonical when you want FXMacroData's continuity rules across source methodology transitions. |
start_date, end_date |
YYYY-MM-DD |
Endpoint default window | Restricts rows by observation period date. Rows are still sorted most-recent-first. |
limit, offset, page |
limit 1 to 100, offset 0+, page 1+ |
limit=20, offset=0 |
Paginates most-recent-first data[] after date filters are applied. page is one-based and derives offset as (page - 1) * limit. |
api_key |
Your FXMacroData key | Not required for public USD freemium windows | Recommended in public examples. Required for non-USD, paid-only, or full-history requests. Server-side clients may also use X-API-Key. |
Pagination and sparse windows
Use the built-in pagination contract for long histories.
Announcement endpoints support broad historical windows. Date filters are applied first, rows are sorted
most-recent-first, and the response page is controlled by limit plus either offset or
page. To fetch the next page, reuse the same filters and pass
offset=pagination.next_offset. Do not split broad ranges into custom shorter-window retries unless
your application is intentionally sampling a specific sub-period.
Latest-row signal
page_includes_latest_available appears at the top level and inside
pagination. It is true when the current page contains
latest_available_date. If it is false, the latest observation is on another page
or the current response is a historical page.
Sparse windows
Monthly, quarterly, and irregular series can be valid but have no observations inside a narrow recent
date window. In that case the API returns a structured 404 with
error_code=NO_DATA_IN_REQUESTED_WINDOW rather than asking the client to guess a shorter range.
{
"detail": {
"error_code": "NO_DATA_IN_REQUESTED_WINDOW",
"message": "No observations available for NZD/core_inflation in requested range (2026-04-01 to 2026-06-22).",
"currency": "NZD",
"indicator": "core_inflation",
"requested_start_date": "2026-04-01",
"requested_end_date": "2026-06-22",
"earliest_available_date": "1999-03-31",
"latest_available_date": "2026-03-31",
"recommended_start_date": "2026-03-31",
"available_observation_count": 109
}
}
requested_window_has_data=false and mark the row with
outside_requested_window=true.
Examples
Common request shapes.
Canonical GDP
GET https://fxmacrodata.com/api/announcements/usd/gdp
Real GDP growth
GET https://fxmacrodata.com/api/announcements/usd/gdp?basis=real&frequency=yoy&limit=20
Nominal GDP level
GET https://fxmacrodata.com/api/announcements/usd/gdp?basis=nominal&frequency=level&api_key=YOUR_API_KEY
Seasonally adjusted unemployment
GET https://fxmacrodata.com/api/announcements/sek/unemployment?seasonality=sa&api_key=YOUR_API_KEY
First-published release values
GET https://fxmacrodata.com/api/announcements/usd/gdp?basis=real&revisions=first
Second page of history
GET https://fxmacrodata.com/api/announcements/usd/gdp?limit=20&offset=20
Response fields
Top-level fields explain the selected series.
Treat the top-level metadata as part of the data contract. It tells downstream systems exactly which source
series, seasonal adjustment basis, price basis, and selector combination produced the rows in data[].
| Field | Type | Meaning |
|---|---|---|
currency, indicator, name, value_name |
String | Identity fields for the requested currency and indicator. |
source, source_url, source_series_id, source_series_name, source_local_name |
String or null | Official source metadata. source_series_id is the audit key customers should store when comparing variants. |
seasonal_adjustment |
Enum | SA, NSA, UNKNOWN, or NOT_APPLICABLE. This field makes SA/NSA comparability explicit. |
price_basis |
Enum | REAL, NOMINAL, or UNKNOWN. This distinguishes inflation-adjusted series from current-price series. |
filters |
Object | Echoes the selector parameters that were applied to the response. |
selected_series_id, selected_series |
String, object | The resolved internal series variant. Use this for debugging and for stable downstream logs. |
supported_options |
Object | Lists valid selector values for this endpoint. Build client dropdowns from this object rather than assuming every indicator supports every value. |
pagination |
Object | Contains limit, offset, returned_count, total_count, has_more, next_offset, and page_includes_latest_available. |
earliest_available_date, latest_available_date, start_date, end_date |
Date string or null | Coverage and requested-window dates for the selected series. |
requested_start_date, requested_end_date |
Date string | The effective date window used for the request after endpoint defaults are resolved. |
requested_window_has_data |
Boolean | False when the response returns the latest eligible observation before the requested window rather than an observation inside the window. |
page_includes_latest_available |
Boolean | True when the current page contains latest_available_date. Also mirrored in pagination.page_includes_latest_available. |
data_quality |
Object | Standardized source, freshness, fallback/proxy, timestamp-completeness, and point-in-time safety diagnostics. Announcement endpoints may also add requested-window and pagination flags. |
provenance |
Object | Machine-readable provenance such as storage layer, timestamp field, value field, source URL, and source series ID. |
is_proxy, proxy_note, policy_role, policy_structure, comparison_compatible, policy_family |
Optional fields | Additional comparability fields used on policy-rate or proxy-backed series where relevant. |
Data quality
Quality flags are standardized across source-backed endpoints.
Use data_quality before treating a payload as analysis-ready. For backtests, the fastest gate is
point_in_time_safe=true and has_announcement_datetime=true. For reporting, also store
source_type, source_name, latest_available_date, and the fallback/proxy flags.
Source flags
source_type is normalized to official, public, fallback, or derived.
Freshness flags
Staleness thresholds are frequency-aware: daily, weekly, monthly, quarterly, and annual series use different default windows.
Backtest flags
Missing timestamps make the object explicitly fail the point-in-time safety check.
Observation rows
Each row remains point-in-time safe.
Required row fields
date is the economic period, while announcement_datetime is when the value became known to the market.
Release timing
Backtests should gate on the announcement timestamp, not the period date.
Change fields
These fields are present where meaningful for the selected series. Clients should tolerate missing or null change fields.
Revision fields
Use revisions=all when the application needs the stored revision trail rather than the latest row view.
Sample payload
USD GDP real-basis response shape.
Values below are illustrative of the contract. Always read supported_options from the live response
before requesting a non-default variant.
{
"currency": "USD",
"indicator": "gdp",
"name": "GDP",
"source": "BEA",
"source_series_id": "BEA:real_gdp",
"source_series_name": "Real Gross Domestic Product",
"seasonal_adjustment": "SA",
"price_basis": "REAL",
"requested_start_date": "2020-01-01",
"requested_end_date": "2026-06-22",
"requested_window_has_data": true,
"page_includes_latest_available": true,
"earliest_available_date": "2020-03-31",
"latest_available_date": "2026-03-31",
"filters": {
"basis": "real",
"frequency": "level",
"revisions": "latest"
},
"selected_series_id": "usd_gdp_real_sa_level",
"selected_series": {
"basis": "real",
"frequency": "level",
"seasonality": "sa",
"source_series_id": "BEA:real_gdp"
},
"supported_options": {
"basis": ["real", "nominal"],
"frequency": ["level", "qoq", "yoy"],
"seasonality": ["sa"],
"revisions": ["latest", "first", "final", "all"]
},
"pagination": {
"limit": 20,
"offset": 0,
"returned_count": 20,
"total_count": 63,
"has_more": true,
"next_offset": 20,
"page_includes_latest_available": true
},
"data_quality": {
"is_official": true,
"is_proxy": false,
"is_fallback": false,
"is_stale": false,
"has_announcement_datetime": true,
"point_in_time_safe": true,
"latest_available_date": "2026-03-31",
"last_updated": null,
"data_lag_days": 83,
"source_name": "BEA",
"source_type": "official",
"is_derived": false,
"row_count": 20,
"announcement_datetime_count": 20,
"missing_announcement_datetime_count": 0,
"quality_scope": "full_result",
"stale_after_days": 125,
"requested_window_has_data": true,
"page_includes_latest_available": true
},
"data": [
{
"announcement_id": "usd_gdp_2026-03-31",
"date": "2026-03-31",
"val": 6038.164,
"pct_change_qoq": 0.4,
"pct_change_yoy": 2.57,
"announcement_datetime": 1777552200,
"announcement_datetime_local": "2026-04-30T08:30:00-04:00",
"revisions": [{ "epoch": 1777552200, "val": 6038.164 }]
}
]
}
Client workflow
How customers should discover variants.
Recommended flow
Call the canonical endpoint first, inspect supported_options, then request only the variant needed by the application. Store source_series_id, seasonal_adjustment, and price_basis with downstream observations.
Pagination flow
Read pagination.has_more and request the next page with offset=pagination.next_offset. Use page_includes_latest_available to know whether the latest observation is on the current page.
Errors and compatibility
What changes for existing users.
Additive v1 change
Existing calls such as /api/v1/announcements/usd/inflation continue to work. New metadata fields are additive, so clients should ignore unknown fields they do not use.
Selector errors
400 unsupported_series_option means the selector value is valid globally but not available for that specific currency and indicator. Read supported_options and retry.
Auth and limits
401 or 403 indicates missing or insufficient API access. 429 indicates rate limiting. Use ?api_key=YOUR_API_KEY in public examples.
Missing data
A plain availability 404 means the requested currency, indicator, or selected series is not published. Use the coverage pages or /api/v1/data_catalogue/{currency} to check availability.
No rows in window
404 with error_code=NO_DATA_IN_REQUESTED_WINDOW means the series exists but the requested date range has no observations. Use latest_available_date or recommended_start_date, or broaden the date window.
pct_change_qoq and pct_change_yoy; monthly inflation may expose val_mom; some level series have no meaningful change field.
AI Answer-Ready
Key Facts
- Page
- Announcement Endpoint
- Section
- Documentation
- Canonical URL
- https://fxmacrodata.com/documentation/announcement-endpoint
- Source
- FXMacroData editorial and official publisher references
- Last Updated
- See page metadata
Provenance And Trust
Cite the canonical URL and source field above. Where available, this page maps to official publisher releases and timestamped updates.
Quick Q&A
What is this page about? This page explains Announcement Endpoint with directly usable context for trading, research, and API workflows.
What source should be cited? Use the canonical URL and the listed source field; cite official publisher references when available.
How fresh is this content? The last updated value above reflects the page metadata or latest available data timestamp.
Can this be used in AI assistants? Yes. This section is intentionally structured for retrieval and citation in chat assistants.
Prompt Packs
Use these in ChatGPT, Claude, Gemini, Mistral, Perplexity, or Grok for consistent source-aware outputs.