---
title: "Historical fiat FX rates"
method: GET
path: "/v1/market/fx-history"
tags: ["market"]
---

# Historical fiat FX rates

`GET /v1/market/fx-history`

## Request

- Base URL: `https://satoshidata.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://satoshidata.ai/v1/market/fx-history`
- Auth: none declared

Free cached daily USD-to-fiat FX history for wallet chart conversion.

## Query parameters

- `start_date` string, required: Inclusive start date in YYYY-MM-DD format.
- `end_date` string, required: Inclusive end date in YYYY-MM-DD format.

## Response `200`

Historical fiat FX rates

- MarketFxHistoryResponse
  - `base_currency` string, required
  - `currencies` string[]
  - `start_date` string, required
  - `end_date` string, required
  - `source` string, required
  - `status` 'fresh' | 'expired_cache_served' | 'unavailable' | 'projected', required
  - `as_of` string, nullable
  - `projected_through` string, nullable
  - `points` FxHistoryPoint[]
    - `date` string, required
    - `rates` object
    - `projected` boolean
    - `source` string, required
  - `_meta` ResponseMeta, required
    - `endpoint` string, required
    - `freshness` string, nullable
    - `freshness_semantics` 'internal_refresh' | 'source_poll' | 'claim_made', nullable
    - `source` string, required
    - `price_sats` integer, nullable
    - `price_usd` string, nullable
    - `docs` string, nullable
    - `warnings` ResponseWarning[]
      - `code` string, required
      - `message` string, required
    - `pagination` ResponsePagination
      - `offset` integer, required
      - `limit` integer, required
      - `total_alerts` integer, required
      - `next_offset` integer, nullable, required
      - `has_more` boolean, required
    - `view` 'compact', nullable
    - `bitcoin_backend` string, nullable
    - `beta` boolean, nullable
    - `cache_seconds` integer, nullable
    - `cache_ttl_seconds` integer, nullable
    - `cache_status` string, nullable
    - `cache_age_seconds` number, nullable
    - `cache_cached_at` string, nullable
    - `cached` boolean, nullable
    - `cache_policy` string, nullable
    - `compute_ms` integer, nullable
    - `warning` string, nullable
    - `refresh_warning` string, nullable
    - `last_refresh_started_at` string, nullable
    - `last_refresh_completed_at` string, nullable
    - `last_refresh_status` string, nullable
    - `last_refresh_error` string, nullable
    - `last_refresh_duration_ms` integer, nullable
    - `feature_flag` string, nullable
    - `rollout_state` string, nullable
    - `schema_version` string, nullable
    - `methodology_version` string, nullable
    - `materialized_source` string, nullable
    - `max_hops` integer, nullable
    - `retention` string, nullable
    - `not_compliance_advice` boolean, nullable
    - `future_native_price_mode` string, nullable
    - `future_native_price_note` string, nullable
    - `future_native_quote_endpoint` string, nullable
    - `overview_activity_cache` object, nullable
    - `attribution_confidence` string, nullable
    - `generated_at` string, nullable
    - `last_computed` string, nullable
    - `snapshot_generated_at` string, nullable
    - `snapshot_age_seconds` number, nullable
    - `snapshot_stale_after_seconds` integer, nullable
    - `snapshot_status` string, nullable
    - `history_window_basis` string, nullable
    - `total_blocks_last_24h` integer, nullable
    - `field_semantics` object, nullable
    - `semantic_completeness` object, nullable
  - `beta` boolean, required

## Other responses

- `400`: Bad request.
- `404`: Resource not found.
- `405`: Method not allowed.
- `422`: Request validation failed.

---

[API](https://skmtc.dev/satoshidata/apis/satoshidata-agent-api.md) · [All operations](https://skmtc.dev/satoshidata/apis/satoshidata-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/satoshidata/apis/satoshidata-agent-api/revisions/9fc9edc41ac4?raw)
