Currency Conversion API for Developers

Most rate APIs are fine until something goes wrong — then you discover inconsistent errors, mystery rate limits, and no way to see your usage. This API is designed for the unhappy path: every response uses one envelope, every error has a machine-readable code, and your integration can always ask where it stands.

One envelope everywhere

success/data/meta on success, success/error on failure — a single response parser covers all seven endpoints.

Errors you can program against

Codes like rate_limited, quota_exceeded, and date_out_of_plan_range tell your code exactly what happened; Retry-After tells it what to do next.

Observable limits

The quota endpoint is free to call and works even when your quota is exhausted — dashboards and alerts never fly blind.

The endpoints you'll use

Defensive conversion call

const res = await fetch(url, { headers });
const body = await res.json();

if (!body.success) {
  switch (body.error.code) {
    case "rate_limited":   return retryAfter(res.headers.get("Retry-After"));
    case "quota_exceeded": return alertOps("FX quota exhausted");
    default:               throw new Error(body.error.message);
  }
}
return body.data.result;

FAQ

Do failed requests count against my quota?

Gate rejections (bad key, rate limit, quota) don't count. Requests that reach processing do — including 4xx parameter errors, since they consume the same resources.

Is there CORS support?

Yes, all endpoints send Access-Control-Allow-Origin: * — though we recommend calling from your backend so your key stays server-side.