generated: '2026-10-18' method: derived generator: derive-data-model.py source: - openapi/fxmacrodata-openapi.json notation: has_one = property $ref; has_many = array of $ref; belongs_to = _id field summary: entities: 98 entities_in_spec: 98 relationships: 83 entities: - name: AnnouncementChangeEvent fields: 48 description: A release event returned by ``/v1/announcements/changes``. - name: AnnouncementChangesResponse fields: 7 - name: AnnouncementChangesScope fields: 3 description: The filter set the response was produced under. - name: AnnouncementDataPoint fields: 68 - name: AnnouncementPredictions fields: 10 description: All available forecasts targeting a single announcement. - name: AnnouncementResponse fields: 44 - name: CBTargetEntry fields: 5 description: A single central-bank target entry valid from ``effective_from``. - name: CBTargetInfo fields: 4 description: Central-bank target metadata for an indicator. - name: COTDataPoint fields: 91 - name: COTFXOverlay fields: 1 - name: COTPaginationInfo fields: 6 - name: COTProvenance fields: 6 - name: COTResponse fields: 34 - name: CalendarReleaseRow fields: 35 - name: CalendarResponse fields: 11 - name: CalendarSnapshot fields: 7 - name: CalendarVersions fields: 5 - name: CatalogueCoverage fields: 26 - name: CatalogueSeriesVariant fields: 22 - name: CatalogueSupportedOptions fields: 6 - name: CommoditiesLatestResponse fields: 8 - name: CommodityCoverage fields: 26 - name: CommodityCoverageSegment fields: 3 - name: CommodityDataPoint fields: 35 - name: CommodityIngestStatus fields: 7 - name: CommodityLatestFreshness fields: 9 - name: CommodityLatestItem fields: 14 - name: CommodityMissingWeekdayRange fields: 3 - name: CommodityObservation fields: 33 - name: CommodityResponse fields: 13 - name: CurveAnalyticsResponse fields: 16 - name: DataCatalogueItem fields: 45 - name: DataCatalogueResponse fields: 0 description: Indicator slug to catalogue entry. - name: DataQuality fields: 45 - name: FactorDataPoint fields: 18 - name: FactorResponse fields: 18 - name: FinancialCoverage fields: 6 - name: FinancialObservation fields: 40 description: One official instrument/measure observation, retaining source dimensions. - name: FinancialPagination fields: 6 - name: FinancialPriceResponse fields: 7 - name: FinancialSource fields: 13 - name: ForexDataPoint fields: 57 - name: ForexResponse fields: 15 - name: FreemiumDelayNotice fields: 10 description: How far behind real time a free-tier response is, and what that costs. - name: FreemiumWindow fields: 4 description: Present only when the freemium window shortened the response. - name: FxIntradayReferenceRatePoint fields: 7 - name: FxIntradayReferenceRatesResponse fields: 4 - name: FxReferencePoint fields: 17 - name: FxReferenceResponse fields: 10 - name: FxSessionRatePoint fields: 22 - name: FxSessionRateResponse fields: 10 - name: FxSource fields: 18 description: One official FX reference-rate source. - name: FxSourceLeg fields: 16 description: One source leg a rate was taken from or derived through. - name: FxSourcePolicy fields: 4 description: Redistribution rules governing which rows the public endpoints serve. - name: FxSourceUniverseEntry fields: 3 - name: FxSourceUniversePair fields: 3 - name: FxSourceUniverseResponse fields: 4 - name: FxSourcesResponse fields: 2 - name: HTTPValidationError fields: 1 - name: LatestAnnouncementItem fields: 21 - name: LatestAnnouncementProvenance fields: 13 - name: LatestAnnouncementValue fields: 10 description: One observation, used for both ``latest`` and ``previous``. - name: LatestAnnouncementsProvenance fields: 5 - name: LatestAnnouncementsResponse fields: 7 - name: MarketSession fields: 12 - name: MarketSessionOverlap fields: 13 - name: MarketSessionsResponse fields: 5 - name: OfficialForwardSourceSupport fields: 2 description: How the official publisher makes forward rates available, if at all. - name: PaginationInfo fields: 7 description: Offset pagination state for a single page of results. - name: PointInTimeCompleteness fields: 9 description: Coverage of source-confirmed publication timestamps for a dataset. - name: PolicyFamilyEntry fields: 3 - name: PredictionItem fields: 25 description: A single per-source forecast inside an announcement group. - name: PredictionProvenance fields: 7 description: Documented origin and timestamp semantics for a forecast value. - name: PredictionsResponse fields: 25 - name: PressRelease fields: 15 - name: PressReleaseRatePath fields: 6 description: Rate-path bias inferred from the release text. - name: PressReleasesResponse fields: 8 - name: RateDifferentialPoint fields: 25 - name: RateDifferentialResponse fields: 27 - name: RateDifferentialSources fields: 2 description: Publisher of each leg's rate. - name: RatePathMatch fields: 2 description: One scoring phrase found in the release and its weight. - name: ReleaseDeliveryAnnouncement fields: 12 description: The announcement row carried by a release event. - name: ResearchPanelRequest fields: 6 - name: ResearchPanelResponse fields: 10 - name: ResearchSeries fields: 3 - name: RevisionEntry fields: 17 description: A value vintage or source capture for a period, identified by its clocks. - name: RevisionsSummary fields: 4 description: Revision ledger summary served by ``fields=compact``. - name: RiskSentimentAliases fields: 3 description: Legacy field names retained alongside their current equivalents. - name: RiskSentimentChange fields: 6 - name: RiskSentimentChangePagination fields: 5 - name: RiskSentimentChangesResponse fields: 3 - name: RiskSentimentComponentCoverage fields: 9 description: Per-component availability for one observation. - name: RiskSentimentComponentMetadata fields: 4 - name: RiskSentimentPoint fields: 23 - name: RiskSentimentResponse fields: 9 - name: RiskSentimentRevisionTracking fields: 6 - name: ServiceStatusResponse fields: 2 description: Liveness payload shared by ``/v1/ping`` and ``/v1/health``. - name: ValidationError fields: 3 relationships: - from: AnnouncementChangeEvent to: ReleaseDeliveryAnnouncement type: has_one via: latest_announcement - from: AnnouncementChangesResponse to: AnnouncementChangeEvent type: has_many via: data - from: AnnouncementChangesResponse to: AnnouncementChangesScope type: has_one via: scope - from: AnnouncementChangesResponse to: FreemiumDelayNotice type: has_one via: freemium_delay - from: AnnouncementDataPoint to: RevisionsSummary type: has_one via: revisions_summary - from: AnnouncementPredictions to: PredictionItem type: has_many via: predictions - from: AnnouncementResponse to: CBTargetInfo type: has_one via: cb_target - from: AnnouncementResponse to: DataQuality type: has_one via: data_quality - from: AnnouncementResponse to: PaginationInfo type: has_one via: pagination - from: AnnouncementResponse to: FreemiumWindow type: has_one via: freemium_window - from: AnnouncementResponse to: FreemiumDelayNotice type: has_one via: freemium_delay - from: AnnouncementResponse to: AnnouncementDataPoint type: has_many via: data - from: CBTargetInfo to: CBTargetEntry type: has_one via: current - from: CBTargetInfo to: CBTargetEntry type: has_many via: history - from: COTResponse to: COTProvenance type: has_one via: provenance - from: COTResponse to: COTFXOverlay type: has_one via: fx_overlay - from: COTResponse to: DataQuality type: has_one via: data_quality - from: COTResponse to: COTPaginationInfo type: has_one via: pagination - from: COTResponse to: COTDataPoint type: has_many via: data - from: CalendarResponse to: DataQuality type: has_one via: data_quality - from: CalendarResponse to: CalendarReleaseRow type: has_many via: data - from: CatalogueSeriesVariant to: CatalogueCoverage type: has_one via: coverage - from: CommoditiesLatestResponse to: CommodityLatestFreshness type: has_one via: freshness - from: CommodityCoverage to: CommodityMissingWeekdayRange type: has_many via: missing_weekday_ranges - from: CommodityCoverage to: CommodityCoverageSegment type: has_one via: longest_continuous_weekday_segment - from: CommodityCoverage to: CommodityCoverageSegment type: has_one via: latest_continuous_weekday_segment - from: CommodityLatestItem to: CommodityIngestStatus type: has_one via: ingest_status - from: CommodityLatestItem to: DataQuality type: has_one via: data_quality - from: CommodityLatestItem to: CommodityObservation type: has_one via: latest - from: CommodityLatestItem to: CommodityObservation type: has_one via: previous - from: CommodityResponse to: DataQuality type: has_one via: data_quality - from: CommodityResponse to: CommodityDataPoint type: has_many via: data - from: CurveAnalyticsResponse to: OfficialForwardSourceSupport type: has_one via: official_forward_source_support - from: CurveAnalyticsResponse to: DataQuality type: has_one via: data_quality - from: DataCatalogueItem to: CatalogueCoverage type: has_one via: coverage - from: DataCatalogueItem to: CatalogueSupportedOptions type: has_one via: supported_options - from: DataQuality to: CommodityCoverage type: has_one via: commodity_coverage - from: DataQuality to: CommodityCoverage type: has_one via: stored_history_coverage - from: DataQuality to: PointInTimeCompleteness type: has_one via: historical_point_in_time - from: FactorResponse to: DataQuality type: has_one via: data_quality - from: FactorResponse to: FactorDataPoint type: has_many via: data - from: FinancialPriceResponse to: FinancialSource type: has_many via: sources - from: FinancialPriceResponse to: FinancialCoverage type: has_many via: coverage - from: FinancialPriceResponse to: FinancialPagination type: has_one via: pagination - from: FinancialPriceResponse to: FinancialObservation type: has_many via: data - from: ForexResponse to: DataQuality type: has_one via: data_quality - from: ForexResponse to: ForexDataPoint type: has_many via: data - from: FxIntradayReferenceRatePoint to: FxSource type: has_one via: source - from: FxIntradayReferenceRatesResponse to: FxIntradayReferenceRatePoint type: has_many via: data - from: FxReferenceResponse to: FxSourcePolicy type: has_one via: source_policy - from: FxReferenceResponse to: FxReferencePoint type: has_many via: data - from: FxSessionRateResponse to: FxSourcePolicy type: has_one via: source_policy - from: FxSessionRateResponse to: FxSessionRatePoint type: has_many via: data - from: FxSourceUniverseEntry to: FxSource type: has_one via: source - from: FxSourceUniverseResponse to: FxSourcePolicy type: has_one via: source_policy - from: FxSourceUniverseResponse to: FxSourceUniverseEntry type: has_many via: data - from: FxSourcesResponse to: FxSourcePolicy type: has_one via: source_policy - from: FxSourcesResponse to: FxSource type: has_many via: sources - from: HTTPValidationError to: ValidationError type: has_many via: detail - from: LatestAnnouncementItem to: LatestAnnouncementProvenance type: has_one via: provenance - from: LatestAnnouncementItem to: LatestAnnouncementValue type: has_one via: latest - from: LatestAnnouncementItem to: LatestAnnouncementValue type: has_one via: previous - from: LatestAnnouncementsResponse to: LatestAnnouncementsProvenance type: has_one via: provenance - from: LatestAnnouncementsResponse to: FreemiumDelayNotice type: has_one via: freemium_delay - from: PredictionItem to: PredictionProvenance type: has_one via: provenance - from: PredictionsResponse to: DataQuality type: has_one via: data_quality - from: PredictionsResponse to: AnnouncementPredictions type: has_many via: data - from: PressRelease to: PressReleaseRatePath type: has_one via: rate_path - from: PressReleasesResponse to: PaginationInfo type: has_one via: pagination - from: RateDifferentialResponse to: RateDifferentialSources type: has_one via: sources - from: RateDifferentialResponse to: DataQuality type: has_one via: data_quality - from: RateDifferentialResponse to: RateDifferentialPoint type: has_many via: data - from: ResearchPanelRequest to: ResearchSeries type: has_many via: series - from: RiskSentimentChange to: RiskSentimentPoint type: has_one via: observation - from: RiskSentimentChangesResponse to: RiskSentimentRevisionTracking type: has_one via: revision_tracking - from: RiskSentimentChangesResponse to: RiskSentimentChangePagination type: has_one via: pagination - from: RiskSentimentChangesResponse to: RiskSentimentChange type: has_many via: data - from: RiskSentimentComponentMetadata to: RiskSentimentAliases type: has_one via: aliases - from: RiskSentimentPoint to: RiskSentimentComponentCoverage type: has_one via: component_coverage - from: RiskSentimentResponse to: RiskSentimentRevisionTracking type: has_one via: revision_tracking - from: RiskSentimentResponse to: DataQuality type: has_one via: data_quality - from: RiskSentimentResponse to: RiskSentimentComponentMetadata type: has_one via: component_metadata - from: RiskSentimentResponse to: PaginationInfo type: has_one via: pagination