Why I Built a Currency Exchange Rate API as a Side Project — And What I Learned
A while back, I needed exchange rate data for a small personal project. Nothing fancy — just convert a few currencies, maybe pull some historical rates for a simple chart.
So I did what most developers do: went to RapidAPI, picked the first free currency API that looked decent, and integrated it.
It worked. Until it didn't.
💬 The problems nobody talks about
The more I used these APIs, the more friction I ran into — not bugs, just poor design decisions that compound over time:
No batch endpoint. Converting 30 line items in an invoice meant 30 separate requests. Quota burned fast, code got messy.
No timeseries. Need rates over a date range for a chart or accounting reconciliation? Good luck stitching together 90 individual daily calls.
No transparency. Is this rate fresh or cached from 6 hours ago? No idea. The response just gave me a number. No source, no timestamp, no cache signal — nothing to audit or debug with.
Cross-rate inconsistency. Most cheap APIs source from ECB (EUR base) but don't tell you that. Ask for USD/GBP and you'd get silently computed cross-rates with no indication of how they were derived.
These aren't dealbreakers individually. But when you're building something production-grade — an invoicing tool, a BI dashboard, a fintech app — they add up.
🛠️ So I built the version I wanted to use
I didn't set out to build a business. I set out to fix the specific things that annoyed me, then figured other developers probably had the same frustrations.
The rules I gave myself were simple:
Every response must tell you where the data came from (source: "ecb"), whether it's stale, and when it was last updated — via both response fields and HTTP headers (X-Cache, X-Last-Updated).
Batch first. POST /convert/batch handles multiple conversions in one request. One call, one quota unit, clean code.
Timeseries as a first-class endpoint. GET /timeseries returns rates over a date range — ready for charts, accounting, BI pipelines without any stitching.
Cross-rates done correctly. ECB publishes EUR-based rates. The API computes accurate cross-rates for any base currency — USD, GBP, JPY, whatever — consistently and transparently.
No database required. Everything runs on in-memory caching with hourly auto-refresh from ECB. Fast, simple, cheap to operate.
📦 What it looks like in practice
One batch request replaces 50 individual calls. A timeseries endpoint gives you 90 days of data in a single response. Every response tells you exactly what you're working with — fresh data or cached, ECB-sourced, cross-rate computed. Full OpenAPI/Swagger spec so integration takes minutes, not hours.
It's available on RapidAPI with a free tier to try, and Pro/Ultra plans for production use.
🌱 Why I'm sharing this
This is a side project, not a startup. I'm not raising money or building a team. I built something I wanted to exist, made it production-ready, and put it out there.
If you're a developer who's ever burned quota on unnecessary requests, shipped a chart with silently stale rates, or spent 20 minutes debugging why your cross-rates were slightly off — this was built for you.
Feedback welcome. Especially the critical kind.
Developer of Currency Exchange Rate API (https://rapidapi.com/Lequanganh241209/api/currency-exchange-rate-api10)
Replies