Create a BTC/ETH Price & USD Exchange Rate API with CoinGecko & ExchangeRate-API
Go to WorkflowDescription
๐ Crypto + FX Micro-API (Webhook JSON)
๐ Overview
Spin up a tiny, serverless-style API from n8n that returns BTC/ETH prices & 24h changes plus USDโEUR and USDโNGN from public, no-key data sources. Ideal for dashboards, low-code apps, or internal tools that just need a simple JSON feed.
โ๏ธ How it works
Webhook (GET /crypto-fx) โ entrypoint for your client/app.
HTTP: ExchangeRate-API โ USD-base FX rates (no API key).
HTTP: CoinGecko โ BTC/ETH prices + 24h % change (no API key).
Merge โ combines payloads.
Code (v2) โ shapes a clean JSON:
btc.price, btc.change_24h
eth.price, eth.change_24h
usd_eur, usd_ngn, ts (ISO timestamp)
Respond to Webhook โ returns the JSON with HTTP 200.
๐ Setup Guide
1) Webhook path & URL
In the Webhook node, confirm HTTP Method = GET and Path = crypto-fx.
Use the Test URL while building; switch to Production URL for live usage.
2) Test the endpoint
Curl:
curl -s https://<your-n8n-host>/webhook/crypto-fx
Browser / fetch():
fetch('https://<your-n8n-host>/webhook/crypto-fx')
.then(r => r.json())
.then(data => console.log(data))
3) Response mapping (already wired)
Respond to Webhook โ Response Body is set to {{$json}}.
The Code node outputs the exact JSON structure shown above, so no extra mapping is required.
๐ Security (recommended)
Add a Webhook Secret (query header check in Code node) or IP allowlist via your reverse proxy.
If embedding in public sites, proxy through your backend and apply rate-limit/cache headers there.
๐ Usage ideas
Frontend dashboards (Chart.js, ECharts).
HomeAssistant / Node-RED info panels.
Google Apps Script to store the JSON into Sheets on a timer.
๐ Customization
More coins: extend CoinGecko ids= (e.g., bitcoin,ethereum,solana).
More FX: read additional codes from fx.rates and add to the payload.
Timestamps: convert ts to your preferred timezone on client side.
CORS: if calling from browsers, add CORS headers in Respond (options โ headers).
๐งฉ Troubleshooting
Empty/partial JSON: run the two HTTP nodes once to verify responses.
429s / rate limiting: add a short Wait node or cache outputs.
Wrong URL: ensure youโre using Production URL outside the n8n editor.
Security errors: if you add a secret, return 401 when itโs missing/invalid.