Aún no disponible en Español — mostrando inglés.
Why a Bible publisher runs its own exchange rate service
Every company that sells across a border has the same small, recurring problem: what is this amount worth today, and what was it worth on the day the invoice was written? For a Norwegian publisher billing in dollars, euros and pounds, that question comes up several times a week — in accounting, in pricing, in a contract, in a conversation with an AI assistant that is helping draft a quote.
There are a hundred exchange rate APIs. We built our own anyway. This is the honest account of why, what it cost, what it does, and when you should use something else.
What most exchange rate guides get right — and what they miss
Most comparisons of currency APIs rank providers on the number of currencies, the update frequency, and the price per thousand calls. Those are the right questions if you are shopping. They are the wrong questions if you are building infrastructure you intend to keep.
What they rarely ask is: who is the source of truth, and what happens on the days it is silent? Almost every commercial rate feed smooths over gaps. If a central bank publishes nothing on a Sunday, the API still returns a number, because an empty response looks like a bug to the customer. That number is an interpolation dressed as a fact, and once it lands in your ledger you cannot tell the two apart.
Our conclusion was that for accounting and contracts, a missing rate is more useful than an invented one.
Why we built it instead of buying it
Three reasons, in order of weight.
A single source of truth. Norges Bank publishes the official Norwegian krone rates. For a Norwegian company those are the numbers a tax authority, an auditor and a court all recognise. Any other feed is a copy with a middleman.
No metering on our own arithmetic. The service answers thousands of internal calls from other Publifye systems — pricing, invoicing, reporting — and we did not want a per-call meter on a number a central bank publishes for free.
Our AI assistants needed it directly. Every service in this estate speaks the Model Context Protocol, so an assistant can look up a real rate mid-conversation instead of recalling one from training data. A rate an AI remembers is a rate from an unknown date, and that is worse than no rate at all.
What the service actually is
Currency Exchange is the smallest service we run. It syncs daily from the Norges Bank SDMX API and serves the result three ways: a public website, a small read-only web API, and MCP tools for AI assistants.
| Property | What it is |
|---|---|
| Source | Norges Bank SDMX REST API, the official Norwegian rates |
| Currencies | 38 against the krone, including the I-44, TWI and IMF Special Drawing Rights indices |
| History | Back to roughly 1980, with 326,970 daily observations stored |
| Publication | Norges Bank posts around 16:00 CET on business days |
| Gaps | Left as gaps; the service never interpolates |
| Buying-power index | 202 countries from World Bank data, 1990 to 2025 |
| Interfaces | Website, read-only JSON API, and eight MCP tools |
The refusal to fill gaps is the design decision everything else follows from. On a Norwegian public holiday there is no rate, and the service says so. When you convert an amount on a weekend, it walks back up to five days to the last real published rate and tells you which date it used.
The engineering: how a small service stays up
A service is only worth building if it is boring to run. Three choices make this one boring.
It starts without a network
The full rate history ships inside the binary as compressed data, so a fresh container answers correctly the instant it starts. It then warms from its database, then backfills anything missing from Norges Bank in the background. There is no window where the service is running but wrong.
It caches in two tiers
Reads come from an in-memory map of every rate it knows. The database behind it is durable storage and the write path, not the read path. A rate lookup is a map lookup.
It fails toward silence, not toward invention
If Norges Bank is unreachable, yesterday's data stays correct and today's is simply absent. Nothing in the code path can manufacture a number.
The buying-power index: pricing for the country, not the currency
Converting a price is arithmetic. Pricing a product is not.
A book priced at 249 kroner is ordinary in Oslo and expensive in Manila, and the exchange rate does not tell you that. So the service also carries a buying-power index built from World Bank data covering 202 countries, which lets our storefronts adjust a price to local purchasing power rather than simply converting the number.
This is the piece a generic currency API cannot give you, because it is not a currency question. It is the difference between selling in a country and merely being visible there.
How your AI uses it
Connect the service to an assistant and it can use these directly:
| Tool | What it answers |
|---|---|
| get_rate | The rate for one currency on one date |
| convert | An amount from one currency to another, cross-rated through the krone |
| get_rates_range | A series over a date range, for charts and trends |
| get_all_rates | Every rate on a single date |
| list_currencies | The 38 codes and their names |
| get_buying_power | The buying-power index for one country |
| list_buying_power | The full country index |
| service_status | Health, version, and when it last synced |
There is no API key to create and no client to install. Connecting works the same way as the rest of the estate, which we explain in How your AI connects to Darash, Junifye and Lexifye.
Where you should use something else
We would rather say this plainly than have you discover it.
You need real-time trading rates. These are daily reference rates published once per business day. If you are executing trades, you need a market data feed, not a central bank reference.
You are not anchored to the krone. Every rate here is quoted against the Norwegian krone. Cross rates between two other currencies are computed through it, which is correct but adds one conversion step. If your business never touches Norway, a euro or dollar-anchored source is a better fit.
You need currencies we do not carry. Thirty-eight is what Norges Bank publishes. It is not the whole world.
What this has to do with a publisher
It is fair to ask why a company that publishes Bibles runs a currency service.
The answer is that the infrastructure is the product too. We sell books in many countries, in many currencies, through our own storefronts. Pricing them correctly needs rates and buying power. Invoicing needs a rate on a specific historical date that an auditor will accept. Our own AI assistants need to answer money questions without hallucinating a number.
Every service in the estate exists for a reason like that. The Bible engines are the visible half. Darash does Hebrew and Greek research. Junifye publishes the books. And a small service quietly answers what a dollar was worth on the day the contract was signed.
FAQ
Where do the rates come from?
Norges Bank, Norway's central bank, through its public SDMX API. They are the official Norwegian reference rates.
How often do they update?
Once per business day, published around 16:00 CET. There are no rates on weekends or Norwegian public holidays, because none are published.
What happens if I ask for a weekend date?
The conversion walks back up to five days to the most recent published rate and tells you which date it actually used. You are never handed an invented number without being told.
How far back does the history go?
To roughly 1980, which is as far as the Norges Bank series runs. That is around 326,970 daily observations across the 38 currencies.
Is it free to use?
The website and the read-only API are public and need no login. AI access over MCP has a free tier for evaluation and a paid tier beyond it.
Can I use it for accounting?
That is what it was built for. The rates are the official Norwegian ones, on the exact dates they were published, and the service will not fabricate a rate for a date that has none.
What is the buying-power index for?
Pricing. It expresses what a given amount is worth in practice in a country, using World Bank data across 202 countries, so a price can be adapted to local purchasing power rather than merely converted.
Final verdict
Currency Exchange is not a clever service. It fetches a public dataset once a day, refuses to guess, and hands the result to a website, an API and an AI assistant.
That is the whole point. In infrastructure, the components you never think about are the ones that were built correctly. If you want to see it work, the rates and the converter are public, and no account is needed to look.
Recibe un correo cuando lancemos algo nuevo. Suscríbete al boletín