Documentation
API Changelog
Material endpoint contract changes for the FXMacroData API: response schemas, endpoint lifecycle changes, authentication behavior, rate limits, and streaming payload changes.
-
Added
Announcement rows carry an additive
release_timingobject; no existing field changes meaning.scheduled_atis the official scheduled time.published_afterandpublished_bybracket when the figure actually appeared at the publisher: the last read still showing the previous figure and the first read showing the new one.published_atequalspublished_byand isnullwhen no publication read was recorded; it is never filled in from the schedule. -
Added
picked_up_atis when FXMacroData accepted the new figure from the publisher, andavailable_atis when it was committed to our database and became readable.source_pickup_latency_min_msandsource_pickup_latency_max_msrun from the publication bracket topicked_up_at;latency_ms,pickup_ms_minandpickup_ms_maxrun from the publication bracket toavailable_at. Latency is always measured from the actual publication, never from the scheduled time.source_pickup_latency_msstaysnullbecause publishers do not expose an exact release clock, and any figure without evidence isnullrather than estimated.publication_delay_msdescribes the publisher against its own schedule and is not a pickup latency. -
Changed
ingestion_latency_msandingestion_latency_referencekeep their original values and meaning when stored. They remain deprecated diagnostics, not a publication-to-pickup latency; userelease_timingfor latency. See the migration guidance. -
Changed
Full announcement responses keep every retained revision entry with its own capture clock. Grouped revision summaries are available on request with
fields=compact. -
Changed
sourceon announcement rows names the publisher for every catalogue series (for exampleRBA) instead of a generic label. Rolling statistical tables, such as the RBA A1 and D3 CSV files, are cited withsource_url_scope=dataset; period-specific release pages keepsource_url_scope=release. -
Changed
Webhook
announcementevents deliverval,previousandprevious_announcementon the same scale and unit as the announcements endpoint and the SSE stream, so they match the event'sforecastand the catalogue unit. For example, sentiment indices are delivered on the 0-100 normalized scale and employment levels in persons. Where a value is rescaled,original_valandoriginal_unitkeep the publisher's own reading and unit. -
Added
Webhook announcement rows carry
publication_time_status(confirmed,unverifiedorunknown) and the nullableofficial_planned_release_datetime, the scheduled time on the publisher's calendar.announcement_datetimeisnullwhen the publication time is not yet known. When a delivered value later gains its publication time, a secondannouncementevent with its ownevent_idre-sends the completed row withdata.update_reasonset topublication_time_updatedanddata.update_of_event_idnaming the original event. See the webhooks documentation.
-
Changed
Full announcement
latestandallviews preserve separate retained captures, including equal values with different clocks or source artifacts. This restores the capture history grouped on 6 October. Explicitfields=compactkeeps its summary format. -
Changed
Optional
ingestion_latency_msandingestion_latency_referenceare retained when stored and marked deprecated. Their original collection diagnostic remains separate fromrelease_timingpublication and pickup bounds. No removal date is set; at least six calendar months of public notice is required. See the migration guidance. -
Added
Single-series downloads accept
revision_evidence=fullto retain eligible revision evidence and exact capture-clock strings. CSV downloads use a ZIP with an evidence sidecar; ordinary download formats and normalized value defaults remain unchanged.
-
Added
Every API response now carries IETF
RateLimit-Limit,RateLimit-Remaining,RateLimit-ResetandRateLimit-Policyheaders, and 429 responses setRetry-Afterto the same reset. See the rate-limit guide. -
Added
/v1/announcements/{currency}/{indicator}acceptsfields=compact, returning the essential fields per row (date, value, previous value, change, announcement time, publication-time status and a revisions summary). This release also grouped consecutive unchanged captures in fullrevisions[]; the 10 October compatibility update restores those separate retained entries. -
Added
/v1/cot/{currency}and/latestacceptreport=legacy_futures|legacy_combined|tff_futures|tff_combined|disaggregated_futures. The default (Legacy futures-only) response is byte-identical; the Traders in Financial Futures categories (dealer, asset manager, leveraged funds, other reportables) are new fields with z-scores. Gold (XAU) is served from the Disaggregated report. -
Added
Data export supports
format=parquet, and subscribers can download one full-history file per currency at/data-export/bulk/{currency}.parquetor.csv.zip, rebuilt daily. -
Changed
401 responses from the edge and the origin share one body shape (
code,detail,subscribe_url) and now include afree_exampleURL that works without a key. -
Changed
Calendar
top_tier_for_currencyis now genuinely per-currency (for example NZD dairy exports, JPY Tankan, BRL IPCA-15);market_tieris promoted to 1 for those rows so the two fields never disagree. COT and press-release currency lists only advertise production currencies. -
Removed
POST /v1/summarize, an undocumented text-trimming helper, has been removed.
-
Changed
The
GET /v1/predictions/{currency}/{indicator}response now returns onedata[]group perannouncement_id. Forecast values live underdata[].predictions[], so clients that previously readdata[0].predicted_valueshould now readdata[0].predictions[0].predicted_valueor choose a specific entry byprediction_source. -
Added
Each prediction item can include
prediction_type,prediction_source,prediction_source_label,generated_at,confidence, andprediction_reason. This supports multiple forecast sources for the same scheduled announcement. -
Changed
Prediction groups use the same
announcement_idjoin key as announcement history, making it easier to connect forecast records with realised observations after release.
-
Changed
The public endpoint contract is now documented as three distinct surfaces:
GET /v1/calendar/{currency}for upcoming release schedules,GET /v1/announcements/{currency}/{indicator}for realised values and prior observations, andGET /v1/predictions/{currency}/{indicator}for forecast groups keyed byannouncement_id. - Changed Calendar rows should be treated as schedule rows. Forecast and consensus values belong on the predictions endpoint, not on calendar responses.
- Added A per-key in-flight concurrency cap limits accidental single-key request fanouts that could otherwise degrade latency for other users. Keys default to 20 concurrent requests.
-
Added
429 responses now include an
X-RateLimit-Windowheader identifying which budget tripped (minute,hour,day,endpoint, orconcurrency) so clients can self-throttle the right dimension. -
Changed
Concurrency caps are designed for accidental fanout protection, not normal production request patterns. ETag /
If-None-Matchresponses continue to avoid quota counting.
-
Added
Endpoint added:
GET /v1/press-releases/{currency}. Responses return a paginated press-release feed withcurrency,count, anddata[]records containing release titles, URLs, dates, summaries, and policy-context fields where available. -
Added
Endpoint added:
GET /v1/risk_sentiment. Responses return a daily risk-on/risk-off score withscore,regime, component metadata, data-quality metadata, and pagination fields.
-
Added
GDP announcement responses now include
pct_change_qoqandpct_change_yoyfields alongside the absolute output level. No client-side calculation needed.
- Added Per-key rate limiting is enforced on all endpoints. Limits are documented in the rate limits guide.
-
Added
Endpoint added:
GET /v1/stream/eventsfor Server-Sent Events delivery of announcement events. -
Added
SSE clients can filter events with
currenciesandindicators, and can reconnect withLast-Event-IDto replay buffered events. -
Added
Stream events include stable identifiers and routing fields such as
event_id,currency,indicator,records_written, andtimestamp.
-
Changed
GET /v1/cot/{currency}access now follows the same mixed-access pattern as announcements: USD requests are publicly accessible, while other currencies require a valid API key. -
Changed
GET /v1/commodities/{indicator}now requires a valid API key for every request. -
Added
Release-calendar rows can include additive routing metadata such as
domain,endpoint_family, andendpoint_path, while keepingannouncement_datetimeandreleasestable.
-
Added
MCP transport added at
https://mcp.fxmacrodata.comfor compatible clients. Authentication uses OAuth 2.0 + PKCE. - Added The MCP tool catalogue exposes announcement, release-calendar, data-catalogue, COT, commodities, and market-session query surfaces.
-
Added
GraphQL endpoint added at
POST /v1/graphql. Query indicator announcements, release calendars, and data catalogue entries using standard GraphQL syntax. Authenticate with a valid API key.
-
Changed
The indicator slug
interest_ratesis replaced bypolicy_rateacross all currencies. Update your API calls — the old slug no longer works.
- Added FXMacroData public REST API launched with stable endpoint families for announcements, release calendars, data catalogue discovery, COT positioning, and commodities.
-
Added
Release calendar endpoint launched:
GET /v1/calendar/{currency}— lists upcoming economic data releases with scheduled announcement times. -
Added
COT positioning endpoint launched:
GET /v1/cot/{currency}— weekly CFTC Commitment of Traders data for G8 futures contracts. -
Added
Commodities endpoint launched:
GET /v1/commodities/{indicator}— daily energy prices (WTI, Brent, Natural Gas) and precious metals. -
Added
Data catalogue endpoint launched:
GET /v1/data_catalogue/{currency}— discover which indicators are available for each currency, with metadata.