/ DOCUMENTATION

Numbers with
a paper trail.

Small, public endpoints for current rates, historical records, conversions, supported currencies, and experimental forecasts.

START HERE

One request.
Readable output.

No key is required. Send query parameters over HTTPS and read JSON back. Amounts are numeric, currency codes are uppercase ISO 4217-style codes, and every rate response identifies its source and dates. Rates come from the European Central Bank; non-EUR bases are derived from ECB EUR references by exchange.io.

curl "https://exchangeio.fxzly.my/api/convert?from=USD&to=EUR&amount=100"

curl

curl "https://exchangeio.fxzly.my/api/convert?from=USD&to=EUR&amount=100"

fetch

fetch('/api/convert?from=USD&to=EUR&amount=100').then(r => r.json())

Python

requests.get('/api/convert', params={'from':'USD','to':'EUR','amount':100}).json()

Free during this early access period. Add caching on your side when your workload does not need a fresh snapshot per request.

THE API

Six useful
surfaces.

GET/api/latest?base=USD

Latest rates

Return the newest available reference snapshot for a base currency.

curl "https://exchangeio.fxzly.my/api/latest?base=USD"
Example response
{
  "base": "USD",
  "rates": { "EUR": 0.92, "JPY": 150.12 },
  "rate_date": "2026-08-16",
  "source": "ecb.europa.eu",
  "fetched_at": "2026-08-16T00:04:12.000Z"
}
GET/api/convert?from=USD&to=EUR&amount=100

Convert

Convert a positive amount using the latest snapshot, or add date for a historical conversion.

curl "https://exchangeio.fxzly.my/api/convert?from=USD&to=EUR&amount=100"
Example response
{
  "from": "USD", "to": "EUR", "amount": 100,
  "result": 92, "rate": 0.92,
  "rate_date": "2026-08-16",
  "source": "ecb.europa.eu",
  "fetched_at": "2026-08-16T00:04:12.000Z"
}
GET/api/historical?date=2024-01-15&base=USD

Historical rates

Read the stored reference snapshot for an ISO calendar date and base currency.

curl "https://exchangeio.fxzly.my/api/historical?date=2024-01-15&base=USD"
Example response
{
  "base": "USD",
  "rates": { "EUR": 0.91, "JPY": 145.48 },
  "rate_date": "2024-01-15",
  "source": "ecb.europa.eu",
  "fetched_at": "2024-01-16T00:04:12.000Z"
}
GET/api/currencies

Supported currencies

List supported currency codes with display precision. Response also includes latest source metadata.

curl "https://exchangeio.fxzly.my/api/currencies"
GET/api/forecast?from=USD&to=EUR&horizon=7

Forecast

Return an experimental baseline estimate and range for 1 to 30 days. Response includes model version, training date, and a mandatory disclaimer.

curl "https://exchangeio.fxzly.my/api/forecast?from=USD&to=EUR&horizon=7"
GET/api/health

Health

Check API availability and rate-service state. Useful for monitoring, not for selecting a rate.

GET/api/timeseries?start=2024-01-01&end=2024-01-31&base=USD

Time series

Return daily rates across an inclusive date range. Add symbols to reduce the response.

curl "https://exchangeio.fxzly.my/api/timeseries?start=2024-01-01&end=2024-01-31&base=USD&symbols=EUR,JPY"
GET/api/fluctuation?start=2024-01-01&end=2024-01-31&base=USD

Fluctuation

Return start, end, absolute, and percentage changes for each available symbol.

curl "https://exchangeio.fxzly.my/api/fluctuation?start=2024-01-01&end=2024-01-31&base=USD"
GET/api/batch-convert?from=USD&to=EUR,GBP&amount=100

Batch convert

Convert one amount to multiple target currencies.

curl "https://exchangeio.fxzly.my/api/batch-convert?from=USD&to=EUR,GBP&amount=100"
GET/api/metadata

Currency metadata

Return names, countries, flags, and symbols for currency codes.

curl "https://exchangeio.fxzly.my/api/metadata"
GET/api/coverage

Coverage

Return earliest/latest stored dates, data sources, and refresh schedule.

curl "https://exchangeio.fxzly.my/api/coverage"
GET/api/backtest?from=USD&to=EUR

Forecast backtest

Return rolling forecast point count and mean absolute error for a pair.

curl "https://exchangeio.fxzly.my/api/backtest?from=USD&to=EUR"
GET/api/metrics

Metrics

Return service state and in-process rate cache counters for monitoring.

curl "https://exchangeio.fxzly.my/api/metrics"

02 / TIME

Date
semantics.

Dates use YYYY-MM-DD and mean a UTC calendar day. A request for 2024-01-15 asks for the snapshot labelled January 15, not a rolling 24-hour window.

Omit date from convert for latest data. Future dates are rejected with future_date. Historical availability depends on stored snapshots; missing records return historical_unavailable rather than silently substituting today's rate.

03 / PROVENANCE

Freshness
is visible.

rate_date is the date represented by the rate. fetched_at is the UTC timestamp when exchange.io obtained or stored the snapshot. source names the upstream dataset.

Latest data is refreshed on a daily schedule and may be temporarily served from the last known snapshot during upstream trouble. Inspect service state through /api/health and treat fetched_at as the freshness boundary.

FORECAST NOTICE

Forecasts are estimates from a simple historical baseline. They are not predictions, financial advice, or trading signals. Do not use them as the sole basis for a financial decision.

04 / FAILURE

Errors
stay legible.

Errors use JSON with error, message, and details. Common codes:

  • invalid_querymissing, malformed, or non-positive input.
  • unsupported_currencycode is not available from the configured source.
  • future_daterequested date is after today in UTC.
  • historical_unavailableno stored snapshot matches date and base.
  • forecast_unavailableinsufficient historical pair data.

REFERENCE

Parameter
shapes.

ParameterTypeMeaning
basestringISO 4217 base currency; defaults to USD.
symbolscomma listOptional response filter.
start/endYYYY-MM-DDInclusive date range for timeseries and fluctuation.
amountpositive numberConversion amount, maximum 1e12.
dateYYYY-MM-DDHistorical conversion date.

05 / NEXT

What comes
after v1.

  • API keys and explicit rate limits for production consumers.
  • Expanded historical coverage and import tooling.
  • More source health signals and documented service-level targets.
  • Improved forecast models with transparent backtesting.