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.
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_query — missing, malformed, or non-positive input.
unsupported_currency — code is not available from the configured source.
future_date — requested date is after today in UTC.
historical_unavailable — no stored snapshot matches date and base.