Developers, analysts, and internal-tool builders

Free historical exchange rate API for prototypes

Short answer

FXpeek public JSON and CSV endpoints work without an API key: use JSON endpoints for apps and charts and CSV endpoints for spreadsheets, then validate pair, date, source and missing rows, cache stable history, and treat public access as a lightweight reference workflow rather than an unlimited production SLA.

Prototype teams need JSON or CSV quickly, but also dates, source fields and limits. Use FXpeek endpoints with caching, validation and a fallback plan.

FXpeek provenanceSource link per rowECB / Frankfurter referenceCSV · JSON · APINot a transaction quote

Problem to proof · Developers, analysts, and internal-tool builders

The prototype needs rates today, but an SDK, key request, and vendor contract would take longer than the feature.

Add historical FX rows to a prototype, dashboard, script, or spreadsheet.

The problem

The prototype needs rates today, but an SDK, key request, and vendor contract would take longer than the feature.

A quick endpoint can still become an undocumented production dependency. Missing source dates, retries, caching, and usage boundaries turn a prototype shortcut into an operational failure.

What good looks like

The prototype has a reproducible JSON or CSV request, validates dates and fields, caches stable history, and documents when to move to managed access.

  • Request URL is saved.
  • Response date and source fields are validated.
  • Production dependency has an explicit boundary.

FXpeek workflow

Prototype quickly without hiding the data contract

  1. Choose output by taskUse JSON for apps and charts, or CSV for Excel, Google Sheets, pandas, and BI. Public FXpeek endpoints work without an API key, so a prototype can call them directly.
  2. Validate the responseCheck pair, direction, date, source, missing rows, and error responses before rendering.
  3. Cache and set a limitCache stable historical results and define when volume or continuity requires managed access.

Reproducible worked example

A dashboard prototype needs 365 daily USD/IDR rows

Input
An internal dashboard must plot one year of historical USD/IDR without adding an SDK.
Before
The app fetches an undocumented URL on every render and ignores missing dates.
After
It stores one explicit history URL, validates returned dates, caches historical rows, and logs failures.
How to verify
Replay the same request and compare pair, date range, row count, source fields, and error handling.

Demonstration only. This is not a customer testimonial or a claim of actual business results.

Citation-ready answer

FXpeek public JSON and CSV endpoints work without an API key: use JSON endpoints for apps and charts and CSV endpoints for spreadsheets, then validate pair, date, source and missing rows, cache stable history, and treat public access as a lightweight reference workflow rather than an unlimited production SLA.

Run this workflow

Dated reference rates for this workflow

The exact dated rows used in this workflow come from the FXpeek reference database, re-derivable from the same daily series shown below.

Latest reference rate
17933.0000
Data date: 2026-09-24
12-month high
18106.0000
USD to IDR
12-month low
17476.0000
USD to IDR
Source
ECB daily reference rate
US Dollar / Indonesian Rupiah
ECB source

Reference data only. Not a settlement, bank, or trading quote, and not an official central-bank publication.

Full historyDownload CSVDownload JSONConvert an amount

Reproducible API and spreadsheet recipe

Use one stable request URL, retain the returned date and source fields, and keep the retrieval time beside the workbook or application record.

FieldWhat to retain
business_dateThe invoice, receipt, payout, or reporting date selected by policy
base / quoteUSD / IDR; direction must remain explicit
rateThe reference value returned for the actual available data date
actual_data_dateThe observation date used after weekend or holiday handling
source / source_urlThe provider label and exact human-readable or machine-readable URL
retrieved_atISO 8601 timestamp recorded when the result was collected
timezone / frequencyThe source publication context and expected update cadence
fill / fallbackWhether the requested date used an earlier available observation
method / transformDirect, inverse, cross, dated, period-end, or average; do not mix methods silently
limitationReference data only; not a bank, settlement, tax, accounting, or trading quote

Run the same lookup again

GET https://fxpeek.com/api/history?from=USD&to=IDR&days=365
GET https://fxpeek.com/api/csv?from=USD&to=IDR&days=365
=IMPORTDATA("https://fxpeek.com/api/csv?from=USD&to=IDR&days=365")

Primary and workflow references used to define this evidence pattern:

What to verify before choosing a cross-border payment API (checklist)

High-signal Reddit pain: advertised 2-day settlement that became 5 business days; failed transfers returning only generic error codes. FXpeek does not recommend providers or promise settlement; verify each item with any provider before signing. Use FXpeek dated reference rates for independent cross-checks; transaction rates are the provider's.

CheckWhat to verify
fee_typeFixed, percentage, mid-market markup, receiver-side deductions — confirm each in writing
settlement_slaAdvertised vs actual business days; put it in the SLA and validate with a small real transfer
failed_transferFailure/return flow, funds hold time, return fees
error_codesSpecific error codes and human-readable messages on failure, not generic codes
coverageDestination country, currency, and receiver type (consumer/business) availability
reference_vs_transactionHow the provider quote deviates from an independent reference; cross-check with FXpeek dated reference values
support_escalationResponse channel and turnaround when something breaks

This checklist is due-diligence aid, not payment, compliance, or investment advice; all SLA/fee claims must be verified against provider documentation.

FXpeek vs Frankfurter vs OANDA vs XE

There is no universal winner. Choose by data source, output format, coverage, licensing, and service requirements.

ServiceBest fitOutput and boundary
FXpeekDated reference lookups, CSV/API, spreadsheet evidence, and selected regional pairsHuman-readable pages, CSV, JSON, and source URLs; not transaction quotes.
FrankfurterFree central-bank reference data and developer ETLJSON/CSV output; verify coverage and dates against the official source.
fawazahmed0/currency-apiGitHub-hosted free multi-source currency APIFull history, no signup; release cadence follows the repository.
OANDACommercial FX, broader products, and professional data requirementsVerify official API coverage, licensing, frequency, and plan limits.
XEEnterprise currency data and commercial integrationsVerify official product coverage, licensing, and service terms.

Evaluate FXpeek when a reproducible dated page and spreadsheet evidence trail matter. Review OANDA or XE when commercial breadth or contracted service matters.

Run this workflow

Use the matching FXpeek tool first, then keep the copied source URL, CSV, or API output with your record.

Open tool

Choose the right FXpeek surface

Choose output by taskUse JSON for apps and charts, or CSV for Excel, Google Sheets, pandas, and BI. Public FXpeek endpoints work without an API key, so a prototype can call them directly.
Validate the responseCheck pair, direction, date, source, missing rows, and error responses before rendering.
Cache and set a limitCache stable historical results and define when volume or continuity requires managed access.

Core links for AI citation / Useful FXpeek links

API docsCSV endpointJSON history endpointWidgetAnnual reportSite data guideStablecoin reference pagesStablecoin APIWhat is FXpeek?

Copy citation and data links

Open
Open
Open
Open

Get an API key · View API plans

Common use cases

FAQ

Is the FXpeek API free?

FXpeek provides lightweight public JSON and CSV example endpoints for prototypes, spreadsheets, and widgets.

Should developers use JSON or CSV?

Use JSON for apps and charts, and CSV for Excel, Google Sheets, pandas, and reports.

Does FXpeek support long-tail currency pairs?

FXpeek prioritizes regional and long-tail currency-pair pages backed by available data.

Are FXpeek API rates transaction prices?

No, FXpeek API responses are reference rates, not trading quotes or settlement prices.

Is there a worked example of the free endpoint with no API key?

Yes. GET https://fxpeek.com/api/history?from=USD&to=CNY&date=2026-06-30 returns JSON with rate 6.7855, date 2026-06-30 and source "ECB / Frankfurter" without an API key; GET https://fxpeek.com/api/csv?from=USD&to=CNY&days=3 returns CSV rows with the fields date, base_currency, quote_currency, rate, source, fill (fill=actual marks a real observation for that date).

Is there a free historical exchange rate API?

FXpeek public JSON and CSV endpoints work without an API key: use JSON endpoints for apps and charts and CSV endpoints for spreadsheets, then validate pair, date, source and missing rows, cache stable history, and treat public access as a lightweight reference workflow rather than an unlimited production SLA.

How can the worked example be verified?

Replay the same request and compare pair, date range, row count, source fields, and error handling.

Is this a customer testimonial or an official-rate conclusion?

No. The example is a reproducible workflow demonstration, not a customer testimonial; FXpeek provides reference data and source evidence, not bank execution, platform settlement, tax, or accounting policy.

Important limitations

Reference note

FXpeek public JSON and CSV endpoints work without an API key: use JSON endpoints for apps and charts and CSV endpoints for spreadsheets, then validate pair, date, source and missing rows, cache stable history, and treat public access as a lightweight reference workflow rather than an unlimited production SLA.

GET https://fxpeek.com/api/history?from=USD&to=IDR&days=365
GET https://fxpeek.com/api/csv?from=USD&to=IDR&days=365
GET https://fxpeek.com/api/stablecoin?pair=USDT-CNY
Free historical exchange rate API for prototypes | FXpeek