Credentials
Three of the four endpoints take an API key. One does not.GET /countries is deliberately open: it feeds a country picker drawn before anyone has an account. It is also the only endpoint documented here that does not live under /v1, so do not build its URL from your /v1 base path.
Every response is identical for every business. Nothing here is scoped to your key — the key is there for rate limiting and access control, not for tenancy.
Caching
This is the main configuration decision, and the endpoints tell you what they expect.
Cache the whole response, not a derived subset. When a route gains a required field, a cache holding only
id and name will keep building payloads that no longer validate.
Rate limits
Per 60 seconds, counted once against your business and once against the key.
Corridors is limited fivefold lower than the others because it resolves currency and country data for every route it returns. If you are hitting that limit, you are calling it where a cache belongs.
No events
Reference data emits no webhooks. There is nocurrency.updated.
That means a currency switching off is something you discover in one of two ways: proactively, by refreshing your cache on a schedule, or reactively, by handling 409 currency_capability_unavailable and 409 fx_corridor_unavailable at the point of use.
Do both. The refresh keeps your UI honest; the error handler keeps a stale cache from becoming a failed payout.
Errors
These endpoints have almost no failure surface — no bodies, no path resources to miss.
There is no
404. An unknown currency code returns an empty route array rather than an error, and an unknown country filter simply matches nothing.
Configuration checklist
-
minorUnitsread from this service, not hardcoded — UGX has none and crypto has eight - Countries cached for a day, and the picker built from
code - Currency capabilities cached, with
updatedAtas the key - Corridor data cached per session, not per request
-
409 currency_capability_unavailableand409 fx_corridor_unavailablehandled at the point of use - A scheduled refresh, so a withdrawn currency surfaces before a customer finds it
-
GET /countriescalled without anAuthorizationheader and without the/v1prefix