Developer API
Stop polling, we tell you
Register a URL and pick events. We send a signed POST within seconds of each change, and retry for up to 24 hours if it fails.
Events
rate.updatedA currency rate changed at any bankrate.best_changedThe cheapest sell or highest buy changedrate.threshold_crossedA rate crossed a limit you setcbe.rate_changedThe Central Bank rate changedgold.updatedGold prices changedsilver.updatedSilver prices changedtransfer.quotes_updatedTransfer provider prices changedcertificate.createdA bank launched a new certificatecertificate.rate_changedA certificate return changedtbill.auction_resultA treasury bill auction resultfund.price_updatedA fund unit price was updatedstatus.incidentA service incident started or endedWhat we send
POST https://example.com/geneh
Geneh-Event: rate.best_changed
Geneh-Signature: t=1792118220,v1=5f2b9c1e7a
{
"id": "evt_01JB7Q2K",
"type": "rate.best_changed",
"created_at": "2026-10-16T00:37:00Z",
"data": {
"currency": "USD",
"side": "sell",
"previous": { "bank": "nbe", "rate": 53.52 },
"current": { "bank": "credit_agricole", "rate": 53.47 }
}
}Check the signature
Each request is signed with your endpoint's secret using HMAC SHA-256. Reject anything older than 5 minutes.
import crypto from "node:crypto";
function verify(rawBody, header, secret) {
const [t, v1] = header.split(",").map(p => p.split("=")[1]);
const mac = crypto.createHmac("sha256", secret)
.update(t + "." + rawBody).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - t) < 300;
return fresh && crypto.timingSafeEqual(Buffer.from(mac), Buffer.from(v1));
}Delivery and retries
- Timeout
- Reply with 2xx within 10 seconds
- Retries
- 8 tries over 24 hours, spacing out each time
- Duplicates
- An event can arrive twice, so use its id to skip repeats
- Order
- Compare created_at, because order is not guaranteed
- Pausing
- We pause an endpoint after 3 days of failures and email you, and you can replay what you missed
Your endpoints
Loading your endpoints
The week's prices in your inbox
The dollar, gold, silver and the top savings returns, every Sunday morning. Free, and you can unsubscribe any time.
We'll send you a link to confirm. No account needed.