Interest rates
File: data/interest-rates.json. Source: FOD Financiën, published in the Belgisch Staatsblad.
Why it's useful
Interest on a late payment is part of almost every claim, and the rate depends on the day:
- Legal interest (wettelijke interest) applies to debts in general, and is what courts award as moratory interest unless a contract or a special law says otherwise.
- Commercial interest (Wet 2 augustus 2002) applies to late payment between businesses and towards public authorities, unless the contract sets a higher rate.
A claim that runs over several years crosses several periods, each with its own rate. Getting one period wrong changes the amount claimed, and the 2013–2015 transition (below) is easy to miss. getInterestRate gives the right rate for a day, and returns null instead of guessing when the rate isn't published yet.
Source and updates
| Source | FOD Financiën (commercial); annual notice in the Belgisch Staatsblad (legal) |
| Built by | Hand: add a period when a new rate is published |
| Changes when | Every calendar year (legal); every semester (commercial) |
| Checked | Weekly: the freshness check opens an issue when today, or the next two weeks, has no rate |
- Legal (
legal, wettelijke interest, Wet 5 mei 1865): set per calendar year; on file since 1970. - Commercial (
commercial, late payment in commercial transactions, Wet 2 augustus 2002): set per semester; on file since 2002.
Look up a rate
4,5 %
Period 2026-01-01 to 2026-12-31. Latest day covered: 2026-12-31.
getInterestRate('2026-01-01', 'legal')Wettelijke interestvoet (Wet 5 mei 1865), per kalenderjaar. Source: FOD Financiën (financien.belgium.be), bekendgemaakt in het Belgisch Staatsblad
| From | To | Rate | Note |
|---|---|---|---|
| 2026-01-01 | 2026-12-31 | 4,5 % | |
| 2025-01-01 | 2025-12-31 | 4,5 % | |
| 2024-01-01 | 2024-12-31 | 5,75 % | |
| 2023-01-01 | 2023-12-31 | 5,25 % | |
| 2022-01-01 | 2022-12-31 | 1,5 % | |
| 2021-01-01 | 2021-12-31 | 1,75 % | |
| 2020-01-01 | 2020-12-31 | 1,75 % | |
| 2019-01-01 | 2019-12-31 | 2 % | |
| 2018-01-01 | 2018-12-31 | 2 % | |
| 2017-01-01 | 2017-12-31 | 2 % | |
| 2016-01-01 | 2016-12-31 | 2,25 % | |
| 2015-01-01 | 2015-12-31 | 2,5 % | |
| 2014-01-01 | 2014-12-31 | 2,75 % | |
| 2013-01-01 | 2013-12-31 | 2,75 % | |
| 2012-01-01 | 2012-12-31 | 4,25 % | |
| 2011-01-01 | 2011-12-31 | 3,75 % | |
| 2010-01-01 | 2010-12-31 | 3,25 % | |
| 2009-01-01 | 2009-12-31 | 5,5 % | |
| 2008-01-01 | 2008-12-31 | 7 % | |
| 2007-01-01 | 2007-12-31 | 6 % | |
| 1996-09-01 | 2006-12-31 | 7 % | |
| 1986-08-01 | 1996-08-31 | 8 % | |
| 1985-08-01 | 1986-07-31 | 10 % | |
| 1981-08-01 | 1985-07-31 | 12 % | |
| 1974-11-01 | 1981-07-31 | 8 % | |
| 1970-07-01 | 1974-10-31 | 6,5 % |
The 2013–2015 contract rule
From 2013 to 15 March 2015 the commercial rate depends on when the contract was concluded. Those periods carry an extra rateForContractsBefore20130316. By default getInterestRate returns the rate for older contracts; pass { contractAfter20130316: true } for contracts concluded on or after 16 March 2013.
getInterestRate('2014-06-15', 'commercial') // { rate: 7.5, … }
getInterestRate('2014-06-15', 'commercial', { contractAfter20130316: true }) // { rate: 8.5, … }Missing periods
getInterestRate returns null for a day with no rate on file: before the first period, or a period that hasn't been published (or added) yet. Use getLatestKnownRateDate(type) to show how far the data reaches, and warn instead of silently using 0 %.
Shape
type InterestType = 'legal' | 'commercial'
interface InterestRateSeries {
description: string
source: string
periods: InterestRatePeriod[]
}
interface InterestRatePeriod {
from: string // first day, inclusive, YYYY-MM-DD
to: string // last day, inclusive, YYYY-MM-DD
rate: number // percent
rateForContractsBefore20130316?: number
note?: string
}