Courts
File: data/courts.json. Every court of the judiciary that the courts' own portal, tribunaux-rechtbanken.be, lists: 347 records that apply today. The numbers on this page are computed from the data when the site is built.
| Kind | Courts | Divisions or seats | Area |
|---|---|---|---|
| Justice of the peace | 162 | 2 | A canton; Philippeville sits in two places |
| Police court | 15 | 33 | An arrondissement (Brussels split by language, Halle, Vilvoorde) |
| Court of first instance | 13 | 23 | An arrondissement (Brussels split by language) |
| Enterprise court | 9 | 24 | An arrondissement, or the area of a court of appeal |
| Labour court | 9 | 29 | An arrondissement, or the area of a court of appeal |
| Court of appeal | 5 | 0 | A judicial area |
| Labour court of appeal | 5 | 7 | A judicial area |
| Court of assize | 11 | 0 | A province, or Brussels-Capital |
Not on the portal, so not here yet: the Court of Cassation, the Constitutional Court and the Council of State, and the disciplinary courts.
Why it's useful
- Addressing documents. Writs of summons, petitions and conclusions name the court as it names itself; letters and filings go to the registry (griffie, greffe) at its address.
- Contacting the right registry. Larger courts have a registry per matter (civil, criminal, family, the register of legal entities…), each with its own phone number, e-mail and sometimes bank account. The data keeps them apart, labelled as the court labels them.
- Paying fees. Registries that publish a bank account for court fees and deposits have it in the data, checksum verified.
- Building forms. Court pickers need a complete list with stable ids, linked to cantons, arrondissements and judicial areas, and to the court a division belongs to.
- Linking to case law.
ecligives the code the court's decisions carry in their European Case Law Identifier (ECLI:BE:HBGNT:…).
Source and updates
| Source | tribunaux-rechtbanken.be, the portal of the College of Courts and Tribunals; the courts' areas from the annex to the Judicial Code, art. 3–5 |
| Built by | scripts/parse from weekly snapshots of every court's page and contact page |
| Changes when | A court moves, changes its contacts or hours, or the portal adds or renames a court |
| Covers | 1 January 2025 onwards: lookups for an earlier day throw a RangeError (time) |
| Checked | Every week, by the sources workflow; changes arrive as a pull request |
| Licence | CC BY 4.0 |
Every record lists the pages it was read from and the day each page's content was first seen (sources). Contact details change more often than anything else in this package: when it matters, check the court's page (website).
347 of 347 courts, divisions and seats
| Name, as published | Address | Contacts |
|---|---|---|
Hof van Beroep Antwerpencourt-of-appeal-antwerpenAntwerpen (judicial area) | Britselei 55 2000 Antwerpen | 02 682 00 08 (Griffie - burgerlijk) 02 682 00 06 (Griffie - correctioneel) 02 682 00 07 (Griffie - Kamer van Inbeschuldigingstelling) |
| Hof van Beroep Brussel Cour d'appel de Bruxelles court-of-appeal-brusselBrussel (judicial area) | Poelaertplein 1 1000 Brussel | 02 508 68 74 (Jeugd- en familiegriffie - Onthaal) fax 02 508 65 90 (Jeugd- en familiegriffie - Onthaal) BE14 6792 0092 4483 (Jeugd- en familiegriffie - Onthaal) BE43 6792 0087 7401 (Burgerlijke griffie) 02 508 66 36 (Burgerlijke griffie - Onthaal) 02 508 66 67 (Burgerlijke griffie - UNIT A (kamers 1N – 1F – 5N -5F): NL) and 14 more |
Hof van Beroep Gentcourt-of-appeal-gentGent (judicial area) | Koophandelsplein 23 9000 Gent Mo-Fr 08:30-12:30,13:30-16:00 | 09 234 54 85 (Burgerlijke griffie - unit A (kamers 1, 1ter, 5, 14, 14bis)) 09 234 54 86 (Burgerlijke griffie - unit B (bouwzaken - kamers 9, 9bis, 16)) 09 234 54 81 (Correctionele griffie) 09 234 42 18 (burgerlijke - dienst verzoekschriften) and 5 more |
Cour d'appel de Liègecourt-of-appeal-liegeLuik (judicial area) | Place Saint Lambert 16 4000 Liège | 04 232 56 16 (Greffe civil) liege.ca.greffecivil@just.fgov.be (Greffe civil) 04 232 56 23 (Greffe pénal) liege.ca.greffepenal@just.fgov.be (Greffe pénal) 04 232 56 16 (Service des expertises civiles) liege.ca.greffecivil@just.fgov.be (Service des expertises civiles) and 3 more |
Cour d'appel de Monscourt-of-appeal-monsHenegouwen | Rue des Droits de l'Homme 1 7000 Mons | 02 682 07 01 (Accueil) 02 682 07 01 (Greffe civil: tapez 2) ca.mons.greffe.civil@just.fgov.be (Greffe civil) 02 682 07 01 (Greffe correctionnel: tapez 1) ca.mons.greffe.cor.cma.mons@just.fgov.be (Greffe correctionnel) 065 37 93 05 (Sécrétariat de la première présidence) and 2 more |
Hof van assisen Antwerpencourt-of-assize-antwerpenAntwerpen | Britselei 55 2000 Antwerpen | |
Cour d'assises du Brabant walloncourt-of-assize-brabant-wallonWaals-Brabant | Rue Clarisse 115 1400 Nivelles | 067 28 38 60 (Le greffe) |
| Hof van assisen van het administratief arrondissement Brussel-Hoofdstad Cour d'assises de l'arrondissement administratif de Bruxelles-Capitale court-of-assize-brussel-hoofdstadBrussel | Poelaertplein 1 1000 Brussel | 02 508 66 91 (Griffie op het justitiepaleis) assisen.brussel@just.fgov.be (Griffie op het justitiepaleis) 02 208 08 00 (Griffie op de Justitia site (specifiek voor het proces van de aanslagen)) assises.bruxelles.justitia@just.fgov.be (Griffie op de Justitia site (specifiek voor het proces van de aanslagen)) assises.bruxelles@just.fgov.be (Greffe de la cour d'assises) 02 508 66 74 (Greffe de la cour d'assises) |
Cour d'assises du Hainautcourt-of-assize-hainautHenegouwen | Rue des Droits de l'Homme 1 7000 Hainaut | |
Cour d'assises de Liègecourt-of-assize-liegeLuik (judicial area) | Place Saint-Lambert 16 4000 Liège | |
Hof van assisen Limburgcourt-of-assize-limburgLimburg | Vrijthof 2 3700 Tongeren | |
Cour d'assises du Luxembourgcourt-of-assize-luxembourgLuxemburg | Place Schalbert, bâtiment 8 6700 Arlon | |
Cour d'assises de Namurcourt-of-assize-namurNamen | Place du Palais de Justice 4 5000 Namur | 081 25 17 11 (Greffe correctionnel) |
Hof van assisen Oost-Vlaanderencourt-of-assize-oost-vlaanderenOost-Vlaanderen | Opgeëistenlaan 401 9000 Gent | |
Hof van assisen Vlaams-Brabantcourt-of-assize-vlaams-brabantBrussel (judicial area) | Smoldersplein 5 3000 Leuven | |
Hof van assisen West-Vlaanderencourt-of-assize-west-vlaanderenWest-Vlaanderen | Kazernevest 3 8000 Brugge | |
Rechtbank eerste aanleg Antwerpencourt-of-first-instance-antwerpenAntwerpen | Bolivarplaats 20 bus 1 2000 Antwerpen | |
Rechtbank eerste aanleg Antwerpen - afdeling Antwerpencourt-of-first-instance-antwerpen-antwerpenAntwerpen | Bolivarplaats 20 bus 1 2000 Antwerpen | 02 682 06 20 (secretariaat (afdelings)voorzitter) |
Rechtbank eerste aanleg Antwerpen - afdeling Mechelencourt-of-first-instance-antwerpen-mechelenAntwerpen | Keizerstraat 20 2800 Mechelen | |
Rechtbank eerste aanleg Antwerpen - afdeling Turnhoutcourt-of-first-instance-antwerpen-turnhoutAntwerpen | Kasteelplein 1 2300 Turnhout Mo-Fr 08:30-12:30,13:30-16:00 | BE93 6792 0090 3467 |
Tribunal de première instance du Brabant Walloncourt-of-first-instance-brabant-wallonWaals-Brabant | No single address | 067 28 23 07 (Greffe de la section pénale / correctionnelle) nivelles.greffe.correctionnel@just.fgov.be (Greffe de la section pénale / correctionnelle) fax 067 28 23 80 (Greffe de la section pénale / correctionnelle) 067 88 71 31 (Greffe de la section jeunesse / protectionnelle) jeunesseprotect.bw@just.fgov.be (Greffe de la section jeunesse / protectionnelle) 067 87 51 51 (Greffe de la section civile) and 3 more |
Tribunal de première instance francophone de Bruxellescourt-of-first-instance-brussel-frBrussel | No single address | and 4 more |
Nederlandstalige rechtbank van eerste aanleg Brusselcourt-of-first-instance-brussel-nlBrussel | Quatre Brasstraat 13 1000 Brussel | 02 682 09 07 (Secretariaat van de hoofdgriffier) fax 02 519 86 45 (Secretariaat van de hoofdgriffier) brussel.rea.secr.hoofdgriffier@just.fgov.be (Secretariaat van de hoofdgriffier) 02 682 09 07 (Secretariaat van de voorzitter) fax 02 519 86 45 (Secretariaat van de voorzitter) brussel.rea.secr.voorzitter@just.fgov.be (Secretariaat van de voorzitter) and 1 more |
| Gericht Erster Instanz Eupen Tribunal de première instance d'Eupen court-of-first-instance-eupenEupen | Rathausplatz 4 4700 Eupen | jugendkanzlei.eupen@just.fgov.be (Jugendkanzlei) 02 682 08 39 (Jugendkanzlei) zivilkanzlei.eupen@just.fgov.be (Zivil- und Familienkanzlei) 02 682 08 39 (Zivil- und Familienkanzlei) strafkanzlei.eupen@just.fgov.be (Strafkanzlei) 02 682 08 39 (Strafkanzlei) and 7 more |
Tribunal de première instance du Hainautcourt-of-first-instance-hainautHenegouwen | No single addressMo-Fr 08:30-12:30,13:30-16:00 | |
Tribunal de première instance du Hainaut - division Charleroicourt-of-first-instance-hainaut-charleroiHenegouwen | Avenue Général Michel 2 Boîte 1 6000 Charleroi Mo-Fr 08:30-12:30,13:30-16:00 | 02 682 19 45 (Accueil) 071 23 66 01 (Secrétariat de la Présidence) 065 35 65 73 (Secrétariat Greffier en Chef) |
Tribunal de première instance du Hainaut - division Monscourt-of-first-instance-hainaut-monsHenegouwen | Rue de Nimy 35 7000 Mons Mo-Fr 08:30-12:30,13:30-16:00 | 065 35 66 59 (Secrétariat de la Présidence) 065 35 65 73 (Secrétariat du Greffier en chef) |
Tribunal de première instance du Hainaut - division Tournaicourt-of-first-instance-hainaut-tournaiHenegouwen | Place du Palais de Justice 5 7500 Tournai Mo-Fr 08:30-12:30,13:30-16:00 | |
Rechtbank eerste aanleg Leuvencourt-of-first-instance-leuvenLeuven | Ferdinand Smoldersplein 5 3000 Leuven | 02 682 15 41 (Griffie burgerlijke rechtbank) realeuven.burgerlijk@just.fgov.be (Griffie burgerlijke rechtbank) 02 682 15 37 (Griffie correctionele rechtbank: dienst zittingen) 02 682 15 39 (Griffie correctionele rechtbank: dienst overtuigingsstukken) corr.leuven@just.fgov.be (Griffie correctionele rechtbank) 02 682 15 43 (Griffie jeugdrechtbank) and 14 more |
Tribunal de première instance de Liègecourt-of-first-instance-liegeLuik | Rue de Bruxelles 2 - 3 4000 Liège | stephane.cloes@just.fgov.be (Secrétariat du Président) secretariatgchef.tpi.liege@just.fgov.be (Secrétariat du Greffier en chef) |
Tribunal de première instance de Liège - division Huycourt-of-first-instance-liege-huyLuik | Palais de Justice de Huy, Quai d'Arona 4500 Huy | 085 24 45 67 (Greffe de l'instruction) chcinstruction.tpi.huy@just.fgov.be (Greffe de l'instruction) 085 24 45 75 (Greffe correctionnel) correctionnel.tpi.huy@just.fgov.be (Greffe correctionnel) 085 24 45 79 (Greffe civil) civil.tpi.huy@just.fgov.be (Greffe civil) and 8 more |
Tribunal de première instance de Liège - division Liègecourt-of-first-instance-liege-liegeLuik | Rue de Bruxelles 2 - 3 4000 Liège | 02 682 07 70 (Numéro unique général de contact division de Liège) instruction.tpi.liege@just.fgov.be (Greffe de l'instruction) penal.tpi.liege@just.fgov.be (Greffe correctionnel) greffe.tpilie@just.fgov.be (Greffe civil) liege.tpi.famille@just.fgov.be (Greffe de la famille) protectionnel.tpi.liege@just.fgov.be (Greffe protectionnel (jeunesse)) and 12 more |
Tribunal de première instance de Liège - division Vervierscourt-of-first-instance-liege-verviersLuik | Rue du Tribunal 4 4800 Verviers | 02 682 03 23 (Greffe de l'instruction) correctionnel.tpi.verviers@just.fgov.be (Greffe de l'instruction) 02 682 03 23 (Greffe correctionnel) correctionnel.tpi.verviers@just.fgov.be (Greffe correctionnel) 02 682 03 23 (Greffe civil) civil.tpi.verviers@just.fgov.be (Greffe civil) and 7 more |
Rechtbank eerste aanleg Limburgcourt-of-first-instance-limburgLimburg | No single address | |
Rechtbank eerste aanleg Limburg - afdeling Hasseltcourt-of-first-instance-limburg-hasseltLimburg | Parklaan 25/2 3500 Hasselt Mo-Fr 08:30-12:30,13:30-16:00 | |
Rechtbank eerste aanleg Limburg - afdeling Tongeren-Borglooncourt-of-first-instance-limburg-tongeren-borgloonLimburg | Piepelpoel 10 3700 Tongeren-Borgloon | |
Tribunal de première instance du Luxembourgcourt-of-first-instance-luxembourgLuxemburg | No single address | |
Tribunal de première instance du Luxembourg - division Arloncourt-of-first-instance-luxembourg-arlonLuxemburg | Place Schalbert, Bâtiment A 6700 Arlon Mo-Fr 08:30-12:30,13:30-16:00 | 063 21 52 33 (Section correctionnelle) correctionnel.arlon@just.fgov.be (Section correctionnelle) 063 21 52 33 (Section civile) arlon.civil@just.fgov.be (Section civile) 063 21 52 33 (Section instruction) arlon.greffe.instruction@just.fgov.be (Section instruction) and 3 more |
Tribunal de première instance du Luxembourg - division Marche-en-Famennecourt-of-first-instance-luxembourg-marche-en-famenneLuxemburg | Rue Victor Libert 9 6900 Marche-en-Famenne Mo-Fr 08:30-12:30,13:30-16:00 | 084 31 07 00 (Section famille/jeunesse) marche.famille@just.fgov.be (Section famille/jeunesse) 084 31 07 00 (Section correctionnelle) correctionnel.marche@just.fgov.be (Section correctionnelle) 084 31 07 25 (Section instruction) marche.greffe.instruction@just.fgov.be (Section instruction) and 4 more |
Tribunal de première instance du Luxembourg - division Neufchâteaucourt-of-first-instance-luxembourg-neufchateauLuxemburg | Place Charles Bergh 1 et 7/1 6840 Neufchâteau Mo-Fr 08:30-12:30,13:30-16:00 | 02 682 08 25 (Section civile/saisies) neufchateau.civil@just.fgov.be (Section civile/saisies) 02 682 08 25 (Section famille/jeunesse) neufchateau.famille@just.fgov.be (Section famille/jeunesse) 02 682 08 25 (Section correctionnelle) correctionnel.neufchateau@just.fgov.be (Section correctionnelle) and 1 more |
Tribunal de première instance de Namurcourt-of-first-instance-namurNamen | rue Général Michel 10 5000 Namur Mo-Fr 08:30-12:30,13:30-16:00 | greffecorrectionnel.dinant@just.fgov.be (Greffe correctionnel - DINANT) greffecorrectionnel.namur@just.fgov.be (Greffe correctionnel - NAMUR) pac.dinant@just.fgov.be (Greffe correctionnel (pièces à conviction) - DINANT) pac.namur@just.fgov.be (Greffe correctionnel (pièces à conviction) - NAMUR) famille.dinant@just.fgov.be (Greffe de la Famille - DINANT) famille.namur@just.fgov.be (Greffe de la Famille - NAMUR) and 9 more |
Tribunal de première instance de Namur - division Dinantcourt-of-first-instance-namur-dinantNamen | Place du Palais de Justice 6 5500 Dinant Mo-Fr 08:30-12:30,13:30-16:00 | 02 682 04 62 (Greffe correctionnel) greffecorrectionnel.namur@just.fgov.be (Greffe correctionnel) 02 682 04 62 (Greffe correctionnel (Pièces à conviction)) pac.namur@just.fgov.be (Greffe correctionnel (Pièces à conviction)) 02 682 04 62 (Greffe de la Famille) famille.dinant@just.fgov.be (Greffe de la Famille) and 7 more |
Tribunal de première instance de Namur - division Namurcourt-of-first-instance-namur-namurNamen | rue Général Michel 10 5000 Namur Mo-Fr 08:30-12:30,13:30-16:00 | greffecorrectionnel.namur@just.fgov.be (Greffe correctionnel) pac.namur@just.fgov.be (Greffe correctionnel (pièces à conviction)) famille.namur@just.fgov.be (Greffe de la Famille) jeunesse.namur@just.fgov.be (Greffe de la Jeunesse et Chambre de règlement amiable) greffecivil.namur@just.fgov.be (Greffe civil) tpinamur.compta@just.fgov.be (Service comptabilité (BE79 6792 0087 0933)) and 2 more |
Rechtbank eerste aanleg Oost-Vlaanderencourt-of-first-instance-oost-vlaanderenOost-Vlaanderen | No single addressMo-Fr 08:30-12:30,13:30-16:00 | |
Rechtbank eerste aanleg Oost-Vlaanderen - afdeling Dendermondecourt-of-first-instance-oost-vlaanderen-dendermondeOost-Vlaanderen | Justitieplein 1 9200 Dendermonde Mo-Fr 08:30-12:30,13:30-16:00 | 02 682 19 03 (Griffie burgerlijke en familierechtbank: keuzemenu 3-2) ovl.rea.de.burgerlijk.griffie@just.fgov.be (Griffie burgerlijke en familierechtbank) 02 682 19 03 (Afschriften/expedities burgerlijke en familierechtbank: keuzemenu 3-1) ovl.rea.de.bur.expeditie@just.fgov.be (Afschriften/expedities burgerlijke en familierechtbank) 02 682 19 03 (Griffie jeugdrechtbank: keuzemenu 2) ovl.rea.de.jeugd@just.fgov.be (Griffie jeugdrechtbank) and 9 more |
Rechtbank eerste aanleg Oost-Vlaanderen - afdeling Gentcourt-of-first-instance-oost-vlaanderen-gentOost-Vlaanderen | Opgeëistenlaan 401A 9000 Gent | 02 682 01 70 (Secretariaat afdelingsvoorzitter) ovl.rea.secrvoorzittergent@just.fgov.be (Secretariaat afdelingsvoorzitter) 02 682 01 70 (Secretariaat afdelingsgriffier) |
Rechtbank eerste aanleg Oost-Vlaanderen - afdeling Oudenaardecourt-of-first-instance-oost-vlaanderen-oudenaardeOost-Vlaanderen | Bourgondiëstraat 5 9700 Oudenaarde Mo-Fr 08:30-12:30,13:30-16:00 | 02 682 06 84 (correctionele griffie: NIEUW keuze 1 (CORR) / keuze 6 (expedities/afschriften)) ovl.rea.ou.cor.griffie@just.fgov.be (correctionele griffie) 02 682 06 84 (burgerlijke griffie en griffie familierechtbank: NIEUW keuze 2 (BUR/FAM) / keuze 5 (boekhouding/deskundigen/rollen)) ovl.rea.ou.fam.bur@just.fgov.be (burgerlijke griffie en griffie familierechtbank) 02 682 06 84 (griffie raadkamer en onderzoek: NIEUW keuze 4) ovl.rea.ou.onderzoek@just.fgov.be (griffie raadkamer en onderzoek) and 2 more |
Rechtbank eerste aanleg West-Vlaanderencourt-of-first-instance-west-vlaanderenWest-Vlaanderen | Kazernevest 3 8000 Brugge Mo-Fr 08:30-12:30,13:30-16:00 | |
Rechtbank eerste aanleg West-Vlaanderen - afdeling Bruggecourt-of-first-instance-west-vlaanderen-bruggeWest-Vlaanderen | Kazernevest 3 8000 Brugge Mo-Fr 08:30-12:30,13:30-16:00 | 050 47 32 20 (Griffie beslagrechter) 050 47 32 00 (Griffie burgerlijk (Inschrijvingen/Afschriften)) wvl.rea.bru.burgerlijk@just.fgov.be (Griffie burgerlijk (Inschrijvingen/Afschriften)) 050 47 31 00 (Griffie correctioneel) wvl.rea.bru.correctioneel@just.fgov.be (Griffie correctioneel) 050 47 32 20 (Griffie familierechtbank) and 12 more |
Rechtbank eerste aanleg West-Vlaanderen - afdeling Iepercourt-of-first-instance-west-vlaanderen-ieperWest-Vlaanderen | Grote Markt 1 8900 Ieper Mo-Fr 08:30-12:30,13:30-16:00 | 02 682 05 04 (Griffie burgerlijke en familierechtbank) wvl.rea.iep.burgerlijk.familie@just.fgov.be (Griffie burgerlijke en familierechtbank) 02 682 05 04 (Griffie correctioneel) wvl.rea.iep.correctioneel@just.fgov.be (Griffie correctioneel) 02 682 05 04 (Griffie jeugd) wvl.rea.iep.jeugd@just.fgov.be (Griffie jeugd) and 5 more |
Fields
| Field | Type | Description |
|---|---|---|
id | CourtId | Stable id: the type, then the place in the court's own language: justice-of-the-peace-gent-1, police-court-brussel-fr, enterprise-court-gent-brugge. See identifiers |
validFrom | string? | First day the record applies, YYYY-MM-DD: the day the portal first listed it. None: since the coverage starts |
validTo | string? | Last day the record applies: the day before the weekly check found it gone from the portal. None: still applies |
type | CourtType | justice-of-the-peace, police-court, court-of-first-instance, enterprise-court, labour-court, court-of-appeal, labour-court-of-appeal, court-of-assize |
kind | 'court' | 'division' | 'seat' | The court itself, one of its divisions (afdeling, division, Abteilung), or one of the places a justice of the peace sits |
court | CourtId? | For a division or seat: the court it belongs to |
name | { nl?, fr?, de? } | The name as the court publishes it, in each language it has a page in: Vredegerecht Gent 1, Tribunal de l'entreprise du Hainaut - division Mons |
label | { nl, fr, de }? | For a justice of the peace (not its seats): a display label built from its canton, Vredegerecht 1e kanton Gent, as formatCourtName(court, locale, { style: 'canton' }) gives it. Generated, not the official name |
judicialArea | JudicialAreaId | The judicial area |
arrondissement | ArrondissementId? | The arrondissement, for a court or division whose area is one arrondissement or lies within one |
canton | CantonId? | For a justice of the peace: the canton it serves |
cantons | CantonId[]? | For every other court (not its divisions): the cantons it covers, as the annex to the Judicial Code (art. 3–5) and art. 114 of the Code set them |
ecli | string[]? | The court's ECLI codes, one per language it judges in; only codes seen in published decisions |
address | Address? | Where the registry is, with the municipality its postal code belongs to (municipality, by REFNIS code). Missing when the court publishes no single address (a court whose divisions each have their own) |
contacts | Contact[] | Phone, fax, e-mail and bank account, each with the registry it belongs to (label) and the text published with it (note) |
openingHours | string? | Registry hours in OpenStreetMap opening_hours syntax: Mo-Fr 08:30-12:30,13:30-16:00, only when the published text says exactly that |
openingHoursText | { nl?, fr?, de? }? | The opening hours as published, per language |
website | { nl?, fr?, de? } | The court's page on the portal, per language |
sources | { url, retrieved }[] | The pages the record was read from, and when their content was first seen |
New court types
type may gain values (the Court of Cassation, for one). If you switch on it, keep a default branch so a new type doesn't break your code.
Shape
interface Court {
id: CourtId
validFrom?: string
validTo?: string
type: CourtType
kind: 'court' | 'division' | 'seat'
court?: CourtId
name: Partial<Translated>
label?: Translated
judicialArea: JudicialAreaId
arrondissement?: ArrondissementId
canton?: CantonId
cantons?: CantonId[]
ecli?: string[]
address?: Address
contacts: Contact[]
openingHours?: string
openingHoursText?: Partial<Translated>
website: Partial<Record<Locale, string>>
sources: SourceRef[]
}
interface Address {
building?: string
street: string // as published, with number, box or floor: 'Beverstraat 7B (eerste verdieping)'
postalCode: string
city: string
municipality?: MunicipalityId // through the postal code; see the postal codes page
}
interface Contact {
type: 'phone' | 'fax' | 'email' | 'bank-account'
value: string // canonical: E.164, lowercase e-mail, electronic IBAN
label?: string // the registry or service: 'Burgerlijke griffie', 'Greffe pénal'
note?: string // text published with the value: 'druk 1', 'tapez 2'
}Locations
File: data/court-locations.json, entry point belgica/court-locations. A point on the map for each justice of the peace, from the National Geographic Institute's peace court layer in the file the canton boundaries come from.
import { getCourtLocation } from 'belgica/court-locations'
getCourtLocation('justice-of-the-peace-aalst-1')?.geometry
// { type: 'Point', coordinates: [4.0409722, 50.941518] }: longitude, latitude (WGS 84)| Field | Type | Description |
|---|---|---|
id, court | CourtId | The court, or seat of one, the point is the location of |
validFrom, validTo | string? | The days the record applies. See time |
ngiId | string | The NGI's identifier of the point (its tgid), a GUID |
address | string | The address the NGI gives with the point, as published: Place de la Résistance 3 |
geometry | Point | GeoJSON, WGS 84, longitude first, rounded to 7 decimals |
sources | { url, retrieved }[] | The NGI file the record was read from |
Not every justice of the peace has one
The NGI moves a point when it hears of a move, and doesn't always: in its July 2026 file, about one point in seven still sits at a building the court has left. A point is only kept when the NGI's address has the house number of the court's address on the portal (comparing numbers, not streets, keeps the Brussels courts whose address the NGI gives in French and the portal in Dutch). The others are left out, and listed by the build. So getCourtLocation returns undefined for those courts, and for every other kind of court, which the NGI has no layer for.
Helpers
Each is described, with its results and errors, in the API reference.
getCourt('justice-of-the-peace-gent-1')
getJusticeOfThePeace('gent-1') // the same court, by canton id
getDivisions('enterprise-court-gent') // its eight divisions
getCourtsForCanton('gent-1') // its justice of the peace, and one court of each other type
findCourtsWithJurisdiction('23088', 'police-court') // [police-court-vilvoorde], by REFNIS code
findCourts({ type: 'police-court', kind: 'court', judicialArea: 'gent' })
getContact(court, 'email', 'Greffe pénal') // the first matching contact's value
formatPhoneNumber('+3253820701') // '053 82 07 01'
formatIban('BE73679200844560') // 'BE73 6792 0084 4560'Only the courts you need
data/courts.json is the complete file, about 580 KB. An app that needs some courts, in a browser above all, can load smaller files generated from it. Every path below is public API, like the ids.
| File | Contents |
|---|---|
data/courts/<type>.json | Every court, division and seat of a type, in all of Belgium |
data/courts/<type>/<arrondissement>.json | Those of one type in one arrondissement |
data/courts/<type>/judicial-area/<area>.json | Those of one type without an arrondissement, by judicial area |
data/courts/details/<id>.json | One court's contacts, openingHours, openingHoursText, website, sources and ecli, one entry per version |
data/courts/index.json | Each court id → its file under data/courts/, without .json |
The list files hold summaries (CourtSummary): id, validFrom, validTo, type, kind, court, name, label, canton, cantons, arrondissement, judicialArea and address. A summary and its details together are the full record. Every court is in exactly one <type>/… file; a court whose area covers several arrondissements (a court of appeal, the labour courts of Antwerpen and Liège, …) has no arrondissement and is in the file of its judicial area. Like data/courts.json, the files hold every version of a record.
Import a file statically when you know which one you need. The 38 justices of the peace of East and West Flanders are 15 KB minified (2 KB gzip), against 410 KB for belgica/courts:
import east from 'belgica/data/courts/justice-of-the-peace/oost-vlaanderen.json' with { type: 'json' }
import west from 'belgica/data/courts/justice-of-the-peace/west-vlaanderen.json' with { type: 'json' }
import { formatCourtName, type CourtSummary } from 'belgica/courts/format'
// A JSON import types `type` and `kind` as string: cast to the summary type
const courts = [...east, ...west] as CourtSummary[]
courts.map((court) => formatCourtName(court, 'nl', { style: 'canton' }))Or load them when they're needed, with belgica/courts/load. Each file is its own import(), so a bundler makes a chunk of it and a browser downloads only what you ask for:
import { loadCourts, loadCourt, loadCourtDetails } from 'belgica/courts/load'
await loadCourts({ type: 'justice-of-the-peace', arrondissement: 'oost-vlaanderen' })
await loadCourt('justice-of-the-peace-gent-1') // an id from a saved file: index.json, then its file
await loadCourtDetails('justice-of-the-peace-gent-1') // its contacts, for the one court you showThe loader is 8 KB minified (2 KB gzip). Every file needs an entry in it, so the map of the 347 details files is a chunk of its own, 31 KB (5 KB gzip), that the first loadCourtDetails loads.
belgica/courts/format has formatCourtName, getContact, formatPhoneNumber and formatIban, and loads no data: they work on a court you already hold.
How the data is read
The portal has a page per court and per division, in the court's language; bilingual courts in Brussels have a page in Dutch and one in French, and the courts in Eupen one in French and one in German. The parser:
- reads the court's type and place from its name (
Politierechtbank Limburg - afdeling Genk), and the canton of a justice of the peace from its name and number; - merges the language versions of one court into one record: names, pages and opening hours per language; address and contacts from the first language (Dutch in Brussels, German in Eupen), with any value only the other page has;
- reads the registries' contact blocks, keeping each value with its registry;
- turns the published opening hours into
opening_hourssyntax only when every word is understood and every language says the same. Text with a note or a temporary arrangement ("OPGELET: tot 31 december…") keeps only the published text; - gives each court the cantons the law assigns it (
cantons), from a table of the annex to the Judicial Code inscripts/parse/jurisdictions.ts, and derives itsarrondissementfrom them. The table and the portal check each other: a court on the portal that the law table lacks, or the reverse, stops the build.
It refuses to write anything when a page can't be placed (an unknown kind of court, a justice of the peace without a canton), a canton has no court, or the law table and the portal disagree on which courts exist. What it can't read (a phone number without an area code, an address written as a sentence) is reported with the weekly pull request, and left out of the data rather than guessed.
Canonical values
| Value | Stored as | Why |
|---|---|---|
| Phone number | E.164: +3253820701 | One form per number, dialable from anywhere, tel: links work as is |
| IBAN | Electronic format: BE73679200844560 | The form payment systems take; the checksum is verified when read and in the tests |
| Lowercase | Comparisons and deduplication work | |
| Opening hours | opening_hours: Mo-Fr 08:30-12:30,13:30-16:00 | The OpenStreetMap standard, with parsers in many languages (e.g. opening_hours.js) and no language of its own |
| Street | As published | Numbers, boxes and floors are written too many ways (Canadaplein ZN, Rue de Bruxelles 2 - 3) to split them without guessing |