{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/fxmacrodata/main/json-schema/fxmacrodata-predictions-response-schema.json",
  "title": "PredictionsResponse",
  "x-generated": "2026-10-18",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/fxmacrodata-openapi.json#/components/schemas/PredictionsResponse",
  "properties": {
    "as_of": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "As Of"
    },
    "event_compatible_only": {
      "type": "boolean",
      "title": "Event Compatible Only",
      "default": false
    },
    "currency": {
      "type": "string",
      "title": "Currency"
    },
    "indicator": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Indicator"
    },
    "filters": {
      "properties": {
        "seasonality": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Seasonality"
        },
        "basis": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Basis"
        },
        "annualization": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Annualization"
        },
        "period_aggregation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Period Aggregation"
        },
        "frequency": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Frequency"
        },
        "revisions": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Revisions"
        }
      },
      "type": "object",
      "title": "SeriesFilters",
      "description": "The series-variant filters this request was resolved with.\n\nA null means the caller did not constrain that dimension."
    },
    "selected_series_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Selected Series Id"
    },
    "selected_series": {
      "properties": {
        "series_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Series Id"
        },
        "label": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Label"
        },
        "source_series_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source Series Id"
        },
        "seasonality": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Seasonality"
        },
        "basis": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Basis"
        },
        "annualization": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Annualization"
        },
        "period_aggregation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Period Aggregation"
        },
        "frequency": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Frequency"
        },
        "revisions": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Revisions"
        }
      },
      "type": "object",
      "title": "SelectedSeries",
      "description": "The concrete series variant chosen for this response."
    },
    "supported_options": {
      "anyOf": [
        {
          "additionalProperties": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "title": "Supported Options"
    },
    "prediction_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Prediction Type"
    },
    "prediction_class": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Prediction Class"
    },
    "prediction_source": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Prediction Source"
    },
    "pre_release_only": {
      "type": "boolean",
      "title": "Pre Release Only",
      "default": true
    },
    "start_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Start Date"
    },
    "end_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "End Date"
    },
    "next_cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Next Cursor",
      "description": "Exclusive `before_date` cursor for the next page. Prefer this over deep offset pagination to keep reads bounded."
    },
    "has_more": {
      "type": "boolean",
      "title": "Has More",
      "default": false
    },
    "count": {
      "type": "integer",
      "title": "Count",
      "description": "Number of announcement groups returned in ``data``.",
      "default": 0
    },
    "prediction_count": {
      "type": "integer",
      "title": "Prediction Count",
      "description": "Total number of per-source predictions across all groups.",
      "default": 0
    },
    "data_quality": {
      "$ref": "#/$defs/DataQuality"
    },
    "availability": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "title": "Availability",
      "description": "Why a filter returned what it returned. ``classes_with_sources`` and ``types_with_sources`` list what any caller could ever get for this pair; ``reason`` explains a requested filter that came back empty. ``no_source_for_pair`` means no publisher provides it and no plan adds it."
    },
    "official_forecasts": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "type": "array",
      "title": "Official Forecasts",
      "description": "Official forecasts and surveys for this indicator in the publisher's own period and unit (quarterly averages, annual rates, survey horizons), newest publication first, every vintage. Not merged into ``data`` because their period basis differs from the monthly announcement; ``target_period``, ``period_basis`` and ``unit`` say exactly what each number is. Same ``prediction_class`` vocabulary as ``data``; filtered by ``prediction_class``, ``prediction_source``, ``start_date`` and ``end_date`` (on the publication date)."
    },
    "official_forecast_count": {
      "type": "integer",
      "title": "Official Forecast Count",
      "description": "Number of rows in ``official_forecasts``.",
      "default": 0
    },
    "official_forecast_calendar": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "type": "array",
      "title": "Official Forecast Calendar",
      "description": "Confirmed official forecast publication times for this currency over the next 366 days. These are publisher releases, separate from the indicator's announcement times."
    },
    "official_forecasts_truncated": {
      "type": "boolean",
      "title": "Official Forecasts Truncated",
      "description": "True when more official forecast vintages exist than the ``official_limit`` returned; narrow ``start_date``/``end_date`` or ``prediction_source`` to see the rest.",
      "default": false
    },
    "data": {
      "items": {
        "$ref": "#/$defs/AnnouncementPredictions"
      },
      "type": "array",
      "title": "Data"
    }
  },
  "type": "object",
  "required": [
    "currency",
    "data_quality",
    "data"
  ],
  "$defs": {
    "AnnouncementPredictions": {
      "properties": {
        "announcement_id": {
          "type": "string",
          "title": "Announcement Id",
          "description": "Stable identifier of the announcement these predictions target, in the form ``{currency}_{indicator}_{date}``."
        },
        "observation_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Observation Id",
          "description": "Variant-safe identifier for the selected series observation. Use this with `selected_series_id` when query selectors choose a non-default series."
        },
        "selected_series_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Selected Series Id",
          "description": "Stable identifier of the selected announcement series."
        },
        "currency": {
          "type": "string",
          "title": "Currency"
        },
        "indicator": {
          "type": "string",
          "title": "Indicator"
        },
        "date": {
          "type": "string",
          "title": "Date",
          "description": "Reference period date of the forecast, ``YYYY-MM-DD``."
        },
        "announcement_datetime": {
          "type": "integer",
          "title": "Announcement Datetime",
          "description": "Release timestamp of the forecasted announcement, Unix epoch seconds (UTC)."
        },
        "announcement_datetime_local": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Announcement Datetime Local",
          "description": "ISO 8601 release time with timezone offset, rendered in the currency's market timezone."
        },
        "announcement_timing": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "past",
                "future"
              ]
            },
            {
              "type": "null"
            }
          ],
          "title": "Announcement Timing",
          "description": "Whether the forecasted announcement is still upcoming (`future`) or already released (`past`)."
        },
        "predictions": {
          "items": {
            "$ref": "#/$defs/PredictionItem"
          },
          "type": "array",
          "title": "Predictions",
          "description": "List of forecasts for this announcement, one entry per prediction source.  Sorted by ``prediction_source`` for deterministic output."
        }
      },
      "type": "object",
      "required": [
        "announcement_id",
        "currency",
        "indicator",
        "date",
        "announcement_datetime"
      ],
      "title": "AnnouncementPredictions",
      "description": "All available forecasts targeting a single announcement.\n\n``announcement_id`` matches the value surfaced on the corresponding\nrow in ``/v1/announcements/{currency}/{indicator}``, allowing clients\nto join predictions with realised observations.  ``predictions``\ncontains one sub-entry per source (e.g. central-bank projection,\nIMF WEO, market consensus survey, FXMacroData prediction)."
    },
    "CommodityCoverage": {
      "properties": {
        "scope": {
          "type": "string",
          "title": "Scope"
        },
        "requested_start": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Requested Start"
        },
        "requested_end": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Requested End"
        },
        "available_start": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Available Start"
        },
        "available_end": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Available End"
        },
        "input_row_count": {
          "type": "integer",
          "title": "Input Row Count"
        },
        "row_count": {
          "type": "integer",
          "title": "Row Count"
        },
        "distinct_date_count": {
          "type": "integer",
          "title": "Distinct Date Count"
        },
        "duplicate_date_row_count": {
          "type": "integer",
          "title": "Duplicate Date Row Count"
        },
        "excluded_weekend_row_count": {
          "type": "integer",
          "title": "Excluded Weekend Row Count"
        },
        "invalid_date_row_count": {
          "type": "integer",
          "title": "Invalid Date Row Count"
        },
        "expected_weekday_label_count": {
          "type": "integer",
          "title": "Expected Weekday Label Count"
        },
        "missing_weekday_label_count": {
          "type": "integer",
          "title": "Missing Weekday Label Count"
        },
        "largest_missing_weekday_run": {
          "type": "integer",
          "title": "Largest Missing Weekday Run"
        },
        "largest_calendar_gap_days": {
          "type": "integer",
          "title": "Largest Calendar Gap Days"
        },
        "missing_weekday_ranges": {
          "items": {
            "$ref": "#/$defs/CommodityMissingWeekdayRange"
          },
          "type": "array",
          "title": "Missing Weekday Ranges"
        },
        "longest_continuous_weekday_segment": {
          "$ref": "#/$defs/CommodityCoverageSegment"
        },
        "latest_continuous_weekday_segment": {
          "$ref": "#/$defs/CommodityCoverageSegment"
        },
        "sparse_history": {
          "type": "boolean",
          "title": "Sparse History"
        },
        "coverage_basis": {
          "type": "string",
          "title": "Coverage Basis"
        },
        "continuous_coverage_verified": {
          "type": "boolean",
          "title": "Continuous Coverage Verified",
          "default": false
        },
        "reference_only": {
          "type": "boolean",
          "title": "Reference Only",
          "default": true
        },
        "executable_quotes": {
          "type": "boolean",
          "title": "Executable Quotes",
          "default": false
        },
        "provenance_version": {
          "type": "integer",
          "title": "Provenance Version"
        },
        "repaired_excluded_weekend_row_count": {
          "type": "integer",
          "title": "Repaired Excluded Weekend Row Count",
          "default": 0
        },
        "repaired_invalid_date_row_count": {
          "type": "integer",
          "title": "Repaired Invalid Date Row Count",
          "default": 0
        }
      },
      "type": "object",
      "required": [
        "scope",
        "input_row_count",
        "row_count",
        "distinct_date_count",
        "duplicate_date_row_count",
        "excluded_weekend_row_count",
        "invalid_date_row_count",
        "expected_weekday_label_count",
        "missing_weekday_label_count",
        "largest_missing_weekday_run",
        "largest_calendar_gap_days",
        "missing_weekday_ranges",
        "longest_continuous_weekday_segment",
        "latest_continuous_weekday_segment",
        "sparse_history",
        "coverage_basis",
        "provenance_version"
      ],
      "title": "CommodityCoverage"
    },
    "CommodityCoverageSegment": {
      "properties": {
        "start_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Start Date"
        },
        "end_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "End Date"
        },
        "row_count": {
          "type": "integer",
          "title": "Row Count"
        }
      },
      "type": "object",
      "required": [
        "row_count"
      ],
      "title": "CommodityCoverageSegment"
    },
    "CommodityMissingWeekdayRange": {
      "properties": {
        "start_date": {
          "type": "string",
          "title": "Start Date"
        },
        "end_date": {
          "type": "string",
          "title": "End Date"
        },
        "weekday_count": {
          "type": "integer",
          "title": "Weekday Count"
        }
      },
      "type": "object",
      "required": [
        "start_date",
        "end_date",
        "weekday_count"
      ],
      "title": "CommodityMissingWeekdayRange"
    },
    "DataQuality": {
      "properties": {
        "source_freshness": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source Freshness"
        },
        "source_monitoring_complete": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source Monitoring Complete"
        },
        "known_source_gap": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Known Source Gap"
        },
        "source_checked_at": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source Checked At"
        },
        "source_check_expires_at": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source Check Expires At"
        },
        "latest_published_period": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Latest Published Period"
        },
        "source_permission_status": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source Permission Status"
        },
        "commodity_coverage": {
          "anyOf": [
            {
              "$ref": "#/$defs/CommodityCoverage"
            },
            {
              "type": "null"
            }
          ]
        },
        "stored_history_coverage": {
          "anyOf": [
            {
              "$ref": "#/$defs/CommodityCoverage"
            },
            {
              "type": "null"
            }
          ]
        },
        "point_in_time_basis": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Point In Time Basis"
        },
        "is_official": {
          "type": "boolean",
          "title": "Is Official"
        },
        "is_proxy": {
          "type": "boolean",
          "title": "Is Proxy"
        },
        "is_fallback": {
          "type": "boolean",
          "title": "Is Fallback"
        },
        "is_stale": {
          "type": "boolean",
          "title": "Is Stale"
        },
        "has_announcement_datetime": {
          "type": "boolean",
          "title": "Has Announcement Datetime"
        },
        "point_in_time_safe": {
          "type": "boolean",
          "title": "Point In Time Safe",
          "description": "Whether the returned values have verified availability and vintage evidence; estimated release times do not qualify."
        },
        "unverified_vintage_count": {
          "type": "integer",
          "title": "Unverified Vintage Count",
          "default": 0
        },
        "unknown_publication_time_count": {
          "type": "integer",
          "title": "Unknown Publication Time Count",
          "default": 0
        },
        "latest_available_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Latest Available Date"
        },
        "last_updated": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Last Updated"
        },
        "data_lag_days": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Data Lag Days"
        },
        "source_name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source Name"
        },
        "source_type": {
          "type": "string",
          "enum": [
            "official",
            "public",
            "fallback",
            "derived"
          ],
          "title": "Source Type"
        },
        "is_derived": {
          "type": "boolean",
          "title": "Is Derived",
          "default": false
        },
        "row_count": {
          "type": "integer",
          "title": "Row Count",
          "default": 0
        },
        "announcement_datetime_count": {
          "type": "integer",
          "title": "Announcement Datetime Count",
          "default": 0
        },
        "missing_announcement_datetime_count": {
          "type": "integer",
          "title": "Missing Announcement Datetime Count",
          "default": 0
        },
        "has_assumed_release_times": {
          "type": "boolean",
          "title": "Has Assumed Release Times",
          "description": "True when at least one row in the quality scope carries a publication timestamp derived from the publication lag measured on that series' own confirmed releases, because no official release calendar reaches the period.",
          "default": false
        },
        "assumed_release_time_count": {
          "type": "integer",
          "title": "Assumed Release Time Count",
          "description": "Number of rows in the quality scope whose publication timestamp was derived rather than captured. Compare against row_count to size the derived portion of the requested window.",
          "default": 0
        },
        "bounded_release_time_count": {
          "type": "integer",
          "title": "Bounded Release Time Count",
          "description": "Legacy rows carrying an upper-bound estimate flag; this does not certify replay safety.",
          "default": 0
        },
        "unbounded_release_time_count": {
          "type": "integer",
          "title": "Unbounded Release Time Count",
          "description": "Assumed timestamps without proven availability bounds.",
          "default": 0
        },
        "quality_scope": {
          "type": "string",
          "title": "Quality Scope",
          "default": "full_result"
        },
        "stale_after_days": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Stale After Days"
        },
        "requested_window_has_data": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Requested Window Has Data"
        },
        "requested_window_latest_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Requested Window Latest Date"
        },
        "requested_window_includes_latest_available": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Requested Window Includes Latest Available"
        },
        "page_includes_latest_available": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Page Includes Latest Available"
        },
        "returned_latest_available_before_window": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Returned Latest Available Before Window"
        },
        "staleness_days": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Staleness Days"
        },
        "reason": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Reason"
        },
        "datetime_field": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Datetime Field"
        },
        "datetime_precision": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Datetime Precision"
        },
        "datetime_semantics": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Datetime Semantics"
        },
        "source_legs": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source Legs"
        },
        "historical_point_in_time": {
          "anyOf": [
            {
              "$ref": "#/$defs/PointInTimeCompleteness"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "type": "object",
      "required": [
        "is_official",
        "is_proxy",
        "is_fallback",
        "is_stale",
        "has_announcement_datetime",
        "point_in_time_safe",
        "source_type"
      ],
      "title": "DataQuality"
    },
    "PointInTimeCompleteness": {
      "properties": {
        "row_count": {
          "type": "integer",
          "title": "Row Count"
        },
        "announcement_datetime_count": {
          "type": "integer",
          "title": "Announcement Datetime Count"
        },
        "missing_announcement_datetime_count": {
          "type": "integer",
          "title": "Missing Announcement Datetime Count"
        },
        "assumed_release_time_count": {
          "type": "integer",
          "title": "Assumed Release Time Count",
          "default": 0
        },
        "bounded_release_time_count": {
          "type": "integer",
          "title": "Bounded Release Time Count",
          "default": 0
        },
        "unbounded_release_time_count": {
          "type": "integer",
          "title": "Unbounded Release Time Count",
          "default": 0
        },
        "unverified_vintage_count": {
          "type": "integer",
          "title": "Unverified Vintage Count",
          "default": 0
        },
        "unknown_publication_time_count": {
          "type": "integer",
          "title": "Unknown Publication Time Count",
          "default": 0
        },
        "point_in_time_safe": {
          "type": "boolean",
          "title": "Point In Time Safe"
        }
      },
      "type": "object",
      "required": [
        "row_count",
        "announcement_datetime_count",
        "missing_announcement_datetime_count",
        "point_in_time_safe"
      ],
      "title": "PointInTimeCompleteness",
      "description": "Coverage of source-confirmed publication timestamps for a dataset."
    },
    "PredictionItem": {
      "properties": {
        "predicted_value": {
          "type": "number",
          "title": "Predicted Value"
        },
        "event_compatible": {
          "type": "boolean",
          "title": "Event Compatible",
          "default": false
        },
        "event_compatibility_reason": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Event Compatibility Reason"
        },
        "source_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source Url"
        },
        "target_period": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Target Period"
        },
        "period_basis": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Period Basis"
        },
        "unit": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Unit"
        },
        "statistic": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Statistic"
        },
        "publication_date": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Publication Date"
        },
        "publication_datetime": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Publication Datetime"
        },
        "publication_precision": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Publication Precision"
        },
        "forecast_observation_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Forecast Observation Id"
        },
        "seasonal_adjustment": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Seasonal Adjustment"
        },
        "geography": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Geography"
        },
        "announcement_mapping_verified": {
          "type": "boolean",
          "title": "Announcement Mapping Verified",
          "default": false
        },
        "prediction_class": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Prediction Class",
          "description": "How the forecast was produced, and the field to filter on. One of ``compiled_consensus`` (a publisher's compilation of independent forecasters), ``forecaster_survey`` (an official survey of forecasters or market participants), ``expectations_survey`` (households or businesses), ``market_implied`` (derived from traded prices), ``model_nowcast`` (a published statistical model), ``central_bank_projection`` (the central bank's own projection), ``institutional_projection`` (IMF, OECD), or ``fxmacrodata`` (an FXMacroData estimate, never a market consensus)."
        },
        "prediction_class_label": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Prediction Class Label",
          "description": "Human-readable name for ``prediction_class``, for display. Filter on ``prediction_class``, not on this."
        },
        "prediction_type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Prediction Type",
          "description": "Original per-source category, retained unchanged for backward compatibility: ``market_consensus``, ``market_prediction``, ``model_nowcast``, ``survey``, ``central_bank_forecast``, ``central_bank_projection``, ``imf_weo``, ``oecd_eo`` or ``fxmacrodata``. These slugs split identical instruments (the ECB and Philadelphia Fed Surveys of Professional Forecasters landed in different values) and two of them name a publisher rather than a category. Prefer ``prediction_class``."
        },
        "prediction_source": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Prediction Source",
          "description": "Stable source identifier slug (e.g. ``philly_fed_spf``, ``cleveland_fed_nowcast``, ``fomc_sep``, ``atlanta_fed_gdpnow``, ``ny_fed_sme``, ``ecb_spf``, ``imf_weo``, ``rbnz_mps``, ``fxmacrodata_blended``). Use this value when filtering via the ``prediction_source`` query parameter."
        },
        "prediction_source_label": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Prediction Source Label",
          "description": "Human-readable name for ``prediction_source`` (e.g. \"RBA Statement on Monetary Policy (Table J1)\", \"Philadelphia Fed Survey of Professional Forecasters\", \"IMF World Economic Outlook\"). Suitable for display in UI surfaces; use ``prediction_source`` for filtering and joins."
        },
        "generated_at": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Generated At",
          "description": "Unix epoch seconds (UTC) for the prediction's known-at marker. Inspect `provenance.generated_at_basis` and `provenance.generated_at_precision`: publisher archives may provide a date that FXMacroData normalizes to a documented source-local publication time rather than an original intraday timestamp."
        },
        "provenance": {
          "anyOf": [
            {
              "$ref": "#/$defs/PredictionProvenance"
            },
            {
              "type": "null"
            }
          ],
          "description": "Documented origin, capture, timestamp, reconstruction, and vintage semantics for this source. Omitted for sources whose provenance is not yet documented."
        },
        "is_pre_release": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Is Pre Release",
          "description": "Whether `generated_at` is strictly earlier than the linked `announcement_datetime`. Null when the source did not provide a generation timestamp."
        },
        "confidence": {
          "anyOf": [
            {
              "type": "number",
              "maximum": 1.0,
              "minimum": 0.0
            },
            {
              "type": "null"
            }
          ],
          "title": "Confidence",
          "description": "Confidence score in ``[0.0, 1.0]`` indicating how strong this prediction is. ``1.0`` is maximally confident, ``0.0`` is no confidence. When the source did not record an explicit value, a per-source default is returned (central-bank publications and official surveys score higher than the FXMacroData blended forecast). Use this to weight or filter predictions in client applications."
        },
        "prediction_reason": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Prediction Reason",
          "description": "Short human-readable explanation of how this prediction was derived. Currently populated for FXMacroData-generated predictions (``prediction_source=fxmacrodata_blended``); it summarises the persistence anchor, momentum/trend extrapolation, cross-indicator pressure, and any external forecast that was blended in. Other prediction sources may omit this field."
        }
      },
      "type": "object",
      "required": [
        "predicted_value"
      ],
      "title": "PredictionItem",
      "description": "A single per-source forecast inside an announcement group."
    },
    "PredictionProvenance": {
      "properties": {
        "value_origin": {
          "type": "string",
          "title": "Value Origin",
          "description": "Whether the value is a publisher historical vintage or an FXMacroData model output."
        },
        "capture_mode": {
          "type": "string",
          "title": "Capture Mode",
          "description": "Whether FXMacroData recorded the value when it was published or later imported it from the publisher's official archive."
        },
        "archived_in_real_time_by_fxmacrodata": {
          "type": "boolean",
          "title": "Archived In Real Time By Fxmacrodata",
          "description": "True only when FXMacroData captured the prediction at the time it was generated or published."
        },
        "generated_at_basis": {
          "type": "string",
          "title": "Generated At Basis",
          "description": "The source fact used to construct `generated_at`."
        },
        "generated_at_precision": {
          "type": "string",
          "title": "Generated At Precision",
          "description": "Precision of the underlying source timestamp. `date` means an official source date was normalized to a documented source-local time."
        },
        "reconstructed_with_later_data": {
          "type": "boolean",
          "title": "Reconstructed With Later Data",
          "description": "Whether the prediction value was recomputed using later data or a newer model version."
        },
        "vintage_selection": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Vintage Selection",
          "description": "Which publisher or model vintages are retained in this feed."
        }
      },
      "type": "object",
      "required": [
        "value_origin",
        "capture_mode",
        "archived_in_real_time_by_fxmacrodata",
        "generated_at_basis",
        "generated_at_precision",
        "reconstructed_with_later_data"
      ],
      "title": "PredictionProvenance",
      "description": "Documented origin and timestamp semantics for a forecast value."
    }
  }
}