{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreifxwy5bogimrqd34v47ncpg3dwlsc6yrqxh6wo2u73sgs5jnhlfny",
"uri": "at://did:plc:25rdn5elo5izoxrmtis34zuk/app.bsky.feed.post/3mopkvqhppaq2"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreigz5c35ccdmukuodbka2vjvd5r5d5d4x7bv5gssfw2v6uluanos2u"
},
"mimeType": "image/webp",
"size": 222846
},
"path": "/oleksandr_kaiukov_63f3e92/i-built-a-free-currency-converter-api-no-api-key-no-signup-k0m",
"publishedAt": "2026-06-20T09:07:25.000Z",
"site": "https://dev.to",
"tags": [
"api",
"currency",
"webdev",
"opensource",
"currencyexchangetool.com/api-docs",
"currencyexchangetool.com",
"github.com/Kaiukov/currency-converter-vercel"
],
"textContent": "I needed a simple exchange rate API for my currency converter project, but all the popular ones (XE, OANDA, CurrencyLayer, Fixer.io) require signup, an API key, or a credit card. Some cap you at 100 requests per month. Others return data cached yesterday.\n\nSo I built my own — and made it completely public.\n\n**→ Try it now: currencyexchangetool.com/api-docs**\n\nNo signup. No API key. No monthly cap. Just make a GET request.\n\n## What It Does\n\nThe API provides live exchange rates for 100+ currencies, including major, emerging-market, and cross-rate pairs. Rates are fetched live from Yahoo Finance on each request — you always get the current rate, not cached data.\n\nIt is rate-limited per IP (not per account): 100 requests/minute for convert and currencies, 30 requests/minute for history. There is no monthly cap and no key to manage.\n\n### Endpoints\n\n\n # Convert 100 USD to EUR\n GET /api/v1/convert?from=USD&to=EUR&amount=100\n\n # List supported currencies\n GET /api/v1/currencies\n\n # Historical data — last N days, a single date, or a range (max 365 days)\n GET /api/v1/history?from=USD&to=UAH&days=7\n GET /api/v1/history?from=USD&to=UAH&date=2026-05-01\n GET /api/v1/history?from=USD&to=UAH&start_date=2026-04-01&end_date=2026-05-28\n\n\n### Quick Start — cURL\n\n\n curl -s \"https://www.currencyexchangetool.com/api/v1/convert?amount=100&from=USD&to=UAH\"\n\n\n### Quick Start — Python\n\n\n import requests\n\n res = requests.get(\n 'https://www.currencyexchangetool.com/api/v1/convert',\n params={'amount': 100, 'from': 'USD', 'to': 'UAH'}\n )\n data = res.json()\n print(f\"100 USD = {data['result']} UAH\")\n\n\n### Quick Start — JavaScript\n\n\n const res = await fetch(\n 'https://www.currencyexchangetool.com/api/v1/convert?amount=100&from=USD&to=UAH'\n );\n const data = await res.json();\n console.log(`100 USD = ${data.result} UAH`);\n\n\n### Quick Start — Go\n\n\n package main\n\n import (\n \"encoding/json\"\n \"fmt\"\n \"net/http\"\n \"net/url\"\n )\n\n func main() {\n params := url.Values{}\n params.Add(\"amount\", \"100\")\n params.Add(\"from\", \"USD\")\n params.Add(\"to\", \"UAH\")\n\n resp, _ := http.Get(\n \"https://www.currencyexchangetool.com/api/v1/convert?\" + params.Encode(),\n )\n defer resp.Body.Close()\n\n var data map[string]any\n json.NewDecoder(resp.Body).Decode(&data)\n fmt.Printf(\"100 USD = %v UAH\\n\", data[\"result\"])\n }\n\n\n### Quick Start — PHP\n\n\n <?php\n $response = file_get_contents(\n 'https://www.currencyexchangetool.com/api/v1/convert?' .\n http_build_query(['amount' => 100, 'from' => 'USD', 'to' => 'UAH'])\n );\n $data = json_decode($response, true);\n echo \"100 USD = {$data['result']} UAH\";\n ?>\n\n\n### Google Sheets — IMPORTXML\n\nAdd `format=xml` for Google Sheets compatibility:\n\n\n\n =VALUE(IMPORTXML(\n \"https://www.currencyexchangetool.com/api/v1/convert?amount=1&from=USD&to=EUR&format=xml\",\n \"/response/rate\"\n ))\n\n\n## How It Compares to Other Free Currency APIs\n\nAPI | API Key | Signup | Currencies | Free Limit | Updates\n---|---|---|---|---|---\n**Currency Exchange Tool** ⭐ | No | No | 100+ | 100/min, no monthly cap | Live\nFrankfurter | No | No | ~30 (ECB) | Unlimited | Daily\nMoneyConvert | No | No | 182+ | Rate-limited | 5 min\nExchangeRate-API (Open) | No | No | 160+ | Rate-limited | Daily\nExchangeRate-API (Free) | Yes | Yes | 160+ | 1,500/mo | Daily\nFreeCurrencyAPI | Yes | Yes | 32 | 1,000/mo | Daily\nOpen Exchange Rates | Yes | Yes | 170+ | 1,000/mo | Hourly\nFixer.io | Yes | Yes | 170+ | 100/mo | Daily\nCurrencyAPI.net | Yes | Yes | 300+ | 500/mo | Daily\n\n**Key insight:** Our API is the only one that combines **no API key** , **no signup** , **no monthly cap** , live rates, and **100+ currencies**.\n\n## Why \"No API Key\" Matters\n\n 1. **Prototyping:** No need to stop coding and fill out a registration form\n 2. **Open source:** You can commit working examples without exposing API keys\n 3. **CI/CD:** No env variables to configure in every pipeline\n 4. **Education:** Every student can follow along without their own key\n 5. **Hackathons:** Zero setup friction — just write code\n\n\n\n## Response Format\n\nAll endpoints return a consistent JSON envelope (or XML with `format=xml`):\n\n\n\n {\n \"success\": true,\n \"from\": \"USD\",\n \"to\": \"EUR\",\n \"amount\": 100,\n \"rate\": 0.9234,\n \"result\": 92.34,\n \"change24h\": -0.0002,\n \"changePct24h\": -0.0229,\n \"updatedAt\": \"2026-06-08T12:00:00.000Z\"\n }\n\n\nError responses are predictable:\n\n\n\n {\n \"success\": false,\n \"error\": \"Unsupported currency\",\n \"code\": \"unsupported_currency\"\n }\n\n\nWhen you exceed the rate limit you get HTTP 429 with a `Retry-After` header, and every response carries `X-RateLimit-Limit` / `X-RateLimit-Remaining` so you can back off early.\n\n## Production Features\n\n * **CORS enabled** — `Access-Control-Allow-Origin: *` on every endpoint, with OPTIONS preflight\n * **Rate limit headers** — X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset\n * **XML output** — `format=xml` for Google Sheets integration\n * **Historical data** — Up to 365 days of daily rates\n * **SSL/HTTPS** — Every request is encrypted\n\n\n\n## Who This Is For\n\n * **Side projects & MVPs** — Get building in seconds, not minutes\n * **E-commerce** — Display prices in local currencies\n * **Fintech dashboards** — Live rate widgets without auth complexity\n * **AI assistants** — Simple REST endpoint for currency queries\n * **Google Sheets users** — Pull live rates into spreadsheets\n * **Students** — Learn REST API integration with a no-friction endpoint\n\n\n\n## Tech Stack\n\nBuilt with Next.js API routes running on Vercel. No backend database — rates are fetched on-demand from Yahoo Finance. The main site (a currency converter) and the API share the same infrastructure, keeping operational costs near zero.\n\n## Give It a Try\n\nThe API is live and running right now:\n\n\n\n curl -s \"https://www.currencyexchangetool.com/api/v1/convert?amount=1&from=USD&to=EUR\"\n\n\nNo signup, no API key — it just works.\n\n**Documentation:** currencyexchangetool.com/api-docs\n\n**Main site:** currencyexchangetool.com\n\n**GitHub:** github.com/Kaiukov/currency-converter-vercel\n\n_Feedback welcome! Open an issue on GitHub or leave a comment below. If you find this useful, a quick star on GitHub helps others discover it._",
"title": "I Built a Free Currency Converter API — No API Key, No Signup"
}