Skip to content

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 ​

SourceFOD Financiën (commercial); annual notice in the Belgisch Staatsblad (legal)
Built byHand: add a period when a new rate is published
Changes whenEvery calendar year (legal); every semester (commercial)
CoversThe legal rate from 1 July 1970, the commercial rate from 1 July 2002: getInterestRate returns null for a day outside the periods on file
CheckedWeekly: the freshness check opens an issue when today, or the next two weeks, has no rate
LicenceCC BY 4.0
  • 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

FromToRateNote
2026-01-012026-12-314,5 %
2025-01-012025-12-314,5 %
2024-01-012024-12-315,75 %
2023-01-012023-12-315,25 %
2022-01-012022-12-311,5 %
2021-01-012021-12-311,75 %
2020-01-012020-12-311,75 %
2019-01-012019-12-312 %
2018-01-012018-12-312 %
2017-01-012017-12-312 %
2016-01-012016-12-312,25 %
2015-01-012015-12-312,5 %
2014-01-012014-12-312,75 %
2013-01-012013-12-312,75 %
2012-01-012012-12-314,25 %
2011-01-012011-12-313,75 %
2010-01-012010-12-313,25 %
2009-01-012009-12-315,5 %
2008-01-012008-12-317 %
2007-01-012007-12-316 %
1996-09-012006-12-317 %
1986-08-011996-08-318 %
1985-08-011986-07-3110 %
1981-08-011985-07-3112 %
1974-11-011981-07-318 %
1970-07-011974-10-316,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.

ts
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 ​

ts
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
}

Code under MIT, data under CC BY 4.0. Reference data, not legal advice: check the official sources.