Exchange rates — the ECB feed, your own rates, and what Xero and Sage receive
Section 01
Three currencies, never mixed
1 minute
Your books currency is chosen at sign-up and locked once stock has moved: every valuation, margin and report is in it. A document currency is what one purchase order, sales order, quote, invoice or credit note was agreed in — a UK company can buy steel in euro and sell into Ireland in euro while its books stay sterling. The rate between the two is frozen on the document at its own date and never refreshed, so last month's figures do not move when the market does. Stock is valued once, at the goods-receipt rate, exactly as IAS 21 treats a non-monetary asset.
Rates are always shown the way Xero, Sage and Odoo show them: 1 <books currency> = X <other currency>. A GBP company sees 1 GBP = 1.16 EUR, and the inverse (1 EUR = 0.86 GBP) beside it.
Section 02
Where rates come from
2 minutes
Published rates are the European Central Bank's euro reference rates — one rate per currency per working day, published at about 16:00 CET, imported every four hours. They are attributable (“the ECB published this on that day” is an answer an auditor accepts) and free. Two things follow from the source:
| Fact | What it means for you |
|---|---|
| Everything is quoted against the euro | A GBP company buying in USD has no published GBP/USD rate; Brytebuild derives it through the euro (USD→EUR→GBP) from the same published day, one hop only, and the Currencies page labels such a rate cross via EUR. |
| The ECB publishes 29 currencies | Euro-area partners, the dollar bloc, most of Europe and Asia's majors, the rand, the real and the peso. Not the naira, the dirham, the riyal, the Egyptian pound or most of Africa, the Middle East and Latin America. Trade in one of those and you key the rate yourself (Section 04) — nothing else can value the document. |
| Nothing is ever guessed | A rate is used for up to 7 days after its date (a Monday legitimately uses Friday's rate). Beyond that there is no default and no “use 1.0”: a foreign-currency goods receipt is refused, because a wrong number would enter the append-only stock ledger for ever, while commercial documents are still raised and simply stay in their own currency until a rate exists. |
Section 03
The Currencies page
2 minutes
Everyone can read it — it is where you find out why a document could not be valued. Three cards: Books currency with a health banner (newest published rate, when the import last ran and whether it succeeded — green, amber after 4 days without a new rate, red once the 7-day window has passed); Currencies you trade in — every currency found on your customers, supplier quotes, price lists and the last six months of documents, with today's rate, its inverse, its date and its source (ECB, ECB · cross via EUR, or Your rate), or a plain statement that no usable rate exists; and Your keyed rates, with who keyed each and when.
Section 04
Keying your own rate
3 minutes
Under Key a rate: the currency, the rate as 1 <books> = X, the date it applies from (today if blank) and an optional note such as the bank and the document it was for. Keying needs company-settings access — the owner, or a role given change company — because a rate changes what every foreign document from that day is worth in the books. Every entry and deletion is in the audit log.
| Rule | Behaviour |
|---|---|
| Yours wins for its day | On the same date your rate beats the published one — the same idea as Xero's custom daily rate and Sage's default rate. On later days the newest rate of either kind applies, so a single keyed rate does not silence the feed for a week. |
| Private to your company | No other tenant ever sees or uses it. Published rates are shared; keyed rates are not. |
| Same currency and date = a correction | Keying EUR for 31 August twice leaves one row, the later value. It is not a second rate. |
| Unvalued documents are valued, once | A document raised while no rate existed for its date is given its first rate the moment one arrives — from your entry or from the feed catching up — and the toast tells you how many (“1 document valued that had no rate”). A document that already carries a rate is never restated by the feed, and deleting a rate does not unpick a document that used it. |
| Correcting one document's rate | Until a document is posted you may correct its rate by hand — the pencil beside 1 EUR = 0.86 GBP on an invoice or a purchase order. The book value recomputes from the rate you enter; nothing else changes and the old and new rate go to the audit log. The boundary is the same one Katana and Business Central draw: an invoice locks once it has been sent to your accounting platform or money has been received against it; a purchase order locks once it or its bill has been pushed. After that the padlock shows and the correction belongs in your accounting system. |
| Dates matter | A rate dated today does not reach back to an invoice issued three weeks ago: key it for that date (or within the 7 days before it). Future dates are refused. |
A sterling company issued INV-2026-000006 for NGN 500,000 on 31 August with no naira rate in the system, so Receivables held it out as “cannot be valued”. Keying 1 GBP = 1,980 NGN dated 31 Aug valued it at once: GBP 252.53, and Receivables' total moved from 4,781.04 to 5,033.57 with nothing left unvalued. Keying the same rate dated today would have done nothing for that invoice — the right date is the one on the document.
Section 05
What Xero and Sage receive
2 minutes
A foreign-currency invoice (and, for Xero, purchase order) is pushed with its currency and the rate it was recognised at here, so the base-currency figure in your accounts equals the one in Brytebuild's reports. Without the rate, Xero applies its own XE.com day rate and Sage applies today's ECB rate rather than the transaction date's — two systems, two sterling values for the same invoice. The rate is sent in the convention each system documents, foreign per base (Xero: “a CurrencyRate of 1.10 for a EUR invoice on a GBP organisation says 1 GBP = 1.1 EUR”), which is the inverse of how it is stored here — the conversion is done for you.
| System | Sent | Checked |
|---|---|---|
| Xero | CurrencyCode on invoices and purchase orders; CurrencyRate when the document is foreign and has a frozen rate. Never on base-currency documents, never a rate of 1. | The currency must already be enabled in your Xero organisation (Xero → Settings → Currencies). If it is not, the sync fails with that message — Brytebuild will not add a currency for you, because Xero cannot remove one once added. Xero's own rate warnings are kept on the sync log. |
| Sage Accounting | currency_id, exchange_rate and inverse_exchange_rate on sales invoices. | The response is verified: the currency Sage booked, and Sage's base_currency_total_amount against the invoice's books total. A disagreement fails the sync naming both figures rather than leaving a wrong value in your accounts. |
Some accountants want XE.com day rates throughout. Untick Send Brytebuild's exchange rate on foreign-currency documents in Settings → Integrations → Xero → GL account mapping and Xero applies its own rate; the currency is still sent. The setting is per company and takes effect from the next push.
Section 06
When the feed stops
1 minute
A feed that answers but has published nothing new for more than 4 days (a bank-holiday weekend is the longest normal gap) is treated as broken: the import job goes into its error state and the platform team is e-mailed once, every company that trades in a foreign currency gets an in-app notification naming the newest date and pointing here, and the Currencies banner turns amber — red once documents start being refused at 7 days. Companies that only use their books currency are not told, because nothing of theirs can be affected. In the meantime you can key today's rate yourself; when the feed catches up, documents raised in the gap are valued automatically.
Realised or unrealised exchange gains and losses — a receipt must be in its invoice's currency, and the gain or loss on settlement is your accounting system's job. Overriding the rate on a single document (key a rate for that date instead). Choosing a different rate provider such as HMRC monthly rates or XE. Sending the rate on credit notes or payments — neither is pushed today.