---
title: "Get a precomputed FX factor for one currency"
method: GET
path: "/v1/factors/{currency}/{factor}"
tags: ["factors"]
---

# Get a precomputed FX factor for one currency

`GET /v1/factors/{currency}/{factor}`

## Request

- Base URL: `https://api.fxmacrodata.com`
- URL: `https://api.fxmacrodata.com/v1/factors/{currency}/{factor}`
- Auth: one of:
  - none
  - API key in header `X-API-Key`
  - HTTP bearer

Returns a factor series for one explicit currency and one explicit factor. Factor values are precomputed snapshots; component macro indicators are not recalculated per request.

**Path Parameters:**
- `currency`: Three-letter currency code, for example `EUR` or `USD`.
- `factor`: Factor slug. Currently supported: `monetary_stance`.

**Query Parameters:**
- `start_date` / `end_date`: Optional date window. With no dates, the latest snapshot is returned.
- `include_components`: Include component scores and input values.
- `include_sources`: Include FXMacroData source endpoint URLs.

Use `/v1/data_catalogue/{currency}?include_capabilities=true` for factor discovery metadata.

**Authentication:** USD factor data is public without an API key. Anonymous requests are subject to a 100 requests/day per-IP fair-use limit. Other currencies require an Individual or Business API key sent in the `X-API-Key` header.

## Path parameters

- `currency` 'AUD' | 'CAD' | 'CHF' | 'EUR' | 'GBP' | 'JPY' | 'NZD' | 'USD', required
- `factor` 'monetary_stance', required: Factor slug, for example monetary_stance.

## Query parameters

- `start_date` string: Inclusive start date YYYY-MM-DD. With no dates, returns latest only.
- `end_date` string: Inclusive end date YYYY-MM-DD. Defaults to today when start_date is supplied.
- `include_components` boolean: Include component scores and source observations.
- `include_sources` boolean: Include FXMacroData source endpoint URLs.
- `limit` integer: Maximum rows to return. Defaults to 20. Maximum 100.
- `offset` integer: Number of rows to skip after most-recent-first ordering.
- `api_key` string: Your Individual or Business API key

## Response `200`

Successful Response

- FactorResponse
  - `currency` string, required
  - `factor` string, required
  - `methodology` string, required
  - `as_of` string, nullable
  - `score` number, nullable
  - `level_score` number, nullable
  - `impulse_score` number, nullable
  - `rate_repricing_score` number, nullable
  - `macro_pressure_score` number, nullable
  - `label` string, nullable
  - `stance_context` string, nullable
  - `latest_available_date` string, nullable
  - `last_updated` string, nullable
  - `start_date` string, required
  - `end_date` string, required
  - `data_quality` DataQuality, required
    - `source_freshness` string, nullable
    - `source_monitoring_complete` boolean, nullable
    - `known_source_gap` boolean, nullable
    - `source_checked_at` integer, nullable
    - `source_check_expires_at` integer, nullable
    - `latest_published_period` string, nullable
    - `source_permission_status` string, nullable
    - `commodity_coverage` CommodityCoverage
      - `scope` string, required
      - `requested_start` string, nullable
      - `requested_end` string, nullable
      - `available_start` string, nullable
      - `available_end` string, nullable
      - `input_row_count` integer, required
      - `row_count` integer, required
      - `distinct_date_count` integer, required
      - `duplicate_date_row_count` integer, required
      - `excluded_weekend_row_count` integer, required
      - `invalid_date_row_count` integer, required
      - `expected_weekday_label_count` integer, required
      - `missing_weekday_label_count` integer, required
      - `largest_missing_weekday_run` integer, required
      - `largest_calendar_gap_days` integer, required
      - `missing_weekday_ranges` CommodityMissingWeekdayRange[], required
        - `start_date` string, required
        - `end_date` string, required
        - `weekday_count` integer, required
      - `longest_continuous_weekday_segment` CommodityCoverageSegment, required
        - `start_date` string, nullable
        - `end_date` string, nullable
        - `row_count` integer, required
      - `latest_continuous_weekday_segment` CommodityCoverageSegment, required
        - `start_date` string, nullable
        - `end_date` string, nullable
        - `row_count` integer, required
      - `sparse_history` boolean, required
      - `coverage_basis` string, required
      - `continuous_coverage_verified` boolean
      - `reference_only` boolean
      - `executable_quotes` boolean
      - `provenance_version` integer, required
      - `repaired_excluded_weekend_row_count` integer
      - `repaired_invalid_date_row_count` integer
    - `stored_history_coverage` CommodityCoverage
      - `scope` string, required
      - `requested_start` string, nullable
      - `requested_end` string, nullable
      - `available_start` string, nullable
      - `available_end` string, nullable
      - `input_row_count` integer, required
      - `row_count` integer, required
      - `distinct_date_count` integer, required
      - `duplicate_date_row_count` integer, required
      - `excluded_weekend_row_count` integer, required
      - `invalid_date_row_count` integer, required
      - `expected_weekday_label_count` integer, required
      - `missing_weekday_label_count` integer, required
      - `largest_missing_weekday_run` integer, required
      - `largest_calendar_gap_days` integer, required
      - `missing_weekday_ranges` CommodityMissingWeekdayRange[], required
        - `start_date` string, required
        - `end_date` string, required
        - `weekday_count` integer, required
      - `longest_continuous_weekday_segment` CommodityCoverageSegment, required
        - `start_date` string, nullable
        - `end_date` string, nullable
        - `row_count` integer, required
      - `latest_continuous_weekday_segment` CommodityCoverageSegment, required
        - `start_date` string, nullable
        - `end_date` string, nullable
        - `row_count` integer, required
      - `sparse_history` boolean, required
      - `coverage_basis` string, required
      - `continuous_coverage_verified` boolean
      - `reference_only` boolean
      - `executable_quotes` boolean
      - `provenance_version` integer, required
      - `repaired_excluded_weekend_row_count` integer
      - `repaired_invalid_date_row_count` integer
    - `point_in_time_basis` string, nullable
    - `is_official` boolean, required
    - `is_proxy` boolean, required
    - `is_fallback` boolean, required
    - `is_stale` boolean, required
    - `has_announcement_datetime` boolean, required
    - `point_in_time_safe` boolean, required: Whether the returned values have verified availability and vintage evidence; estimated release times do not qualify.
    - `unverified_vintage_count` integer
    - `unknown_publication_time_count` integer
    - `latest_available_date` string, nullable
    - `last_updated` string, nullable
    - `data_lag_days` integer, nullable
    - `source_name` string, nullable
    - `source_type` 'official' | 'public' | 'fallback' | 'derived', required
    - `is_derived` boolean
    - `row_count` integer
    - `announcement_datetime_count` integer
    - `missing_announcement_datetime_count` integer
    - `has_assumed_release_times` boolean: 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.
    - `assumed_release_time_count` integer: 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.
    - `bounded_release_time_count` integer: Legacy rows carrying an upper-bound estimate flag; this does not certify replay safety.
    - `unbounded_release_time_count` integer: Assumed timestamps without proven availability bounds.
    - `quality_scope` string
    - `stale_after_days` integer, nullable
    - `requested_window_has_data` boolean, nullable
    - `requested_window_latest_date` string, nullable
    - `requested_window_includes_latest_available` boolean, nullable
    - `page_includes_latest_available` boolean, nullable
    - `returned_latest_available_before_window` boolean, nullable
    - `staleness_days` integer, nullable
    - `reason` string, nullable
    - `datetime_field` string, nullable
    - `datetime_precision` string, nullable
    - `datetime_semantics` string, nullable
    - `source_legs` object[], nullable
    - `historical_point_in_time` PointInTimeCompleteness: Coverage of source-confirmed publication timestamps for a dataset.
      - `row_count` integer, required
      - `announcement_datetime_count` integer, required
      - `missing_announcement_datetime_count` integer, required
      - `assumed_release_time_count` integer
      - `bounded_release_time_count` integer
      - `unbounded_release_time_count` integer
      - `unverified_vintage_count` integer
      - `unknown_publication_time_count` integer
      - `point_in_time_safe` boolean, required
  - `pagination` object, required: Offset pagination state for one page of results.
    - `limit` integer, nullable
    - `offset` integer, nullable
    - `returned_count` integer, nullable
    - `total_count` integer, nullable
    - `has_more` boolean, nullable
    - `next_offset` integer, nullable
    - `page_includes_latest_available` boolean, nullable
  - `data` FactorDataPoint[], required
    - `date` string, required
    - `val` number, nullable
    - `score` number, nullable
    - `level_score` number, nullable
    - `impulse_score` number, nullable
    - `rate_repricing_score` number, nullable
    - `macro_pressure_score` number, nullable
    - `label` string, nullable
    - `stance_context` string, nullable
    - `announcement_datetime` integer, nullable
    - `coverage_ratio` number, nullable
    - `component_count` integer, nullable
    - `point_in_time_safe` boolean, nullable: True only when every input observation behind this row carries a publication timestamp captured from its release. An input dated from that series' measured publication lag clears it, because the composite could not be shown to have been knowable at its own announcement_datetime.
    - `release_time_assumed` boolean, nullable: Present and true when at least one input observation carries a derived publication timestamp. Omitted when every input was captured from its release.
    - `assumed_release_time_inputs` integer, nullable: Number of input observations behind this row whose publication timestamp was derived.
    - `components` object, nullable
    - `source_observations` object, nullable
    - `source_endpoints` string[], nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/fxmacrodata/apis/fx-macrodata-api.md) · [All operations](https://skmtc.dev/fxmacrodata/apis/fx-macrodata-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fxmacrodata/apis/fx-macrodata-api/revisions/fadaa543b154?raw)
