--- name: bailiff-proceedings description: Estonian bailiff directory by jurisdiction plus public forced-sale auctions and enforcement notices. module: kohtutaiturid.mjs execution: get --- # Estonian Bailiffs and Enforcement (kohtutäiturid, täitemenetlus) Public surfaces only. **A person's own enforcement proceedings are NOT publicly queryable** — see `## Limits` first if the question is "which bailiff is collecting from me". ## Vetted module (use this first) `kohtutaiturid.mjs` ships in https://kodanikukratt.ee/kratt-agent.tar.gz (plain ESM, Node 22+) and is re-verified against the live source: ```js import { show } from "./kratt.mjs"; import { bailiffs, auctions, auctionDetails } from "./kohtutaiturid.mjs"; const b = await bailiffs(); show({ kokku: b.totals.serving, piirkonniti: b.totals.byRegion, piirkonnad: b.regions, page: b.page }); show(b.rows.filter((r) => r.region === "Harju")); const a = await auctions({ varaliik: "KI", offers: "reg", onpage: 50 }); show({ lehel: a.totals.onPage, lehti: a.totals.pages, note: a.note }); const d = await auctionDetails(a.rows[0].okid); show({ alghind: d.startingPrice, tagatisraha: d.deposit, korraldaja: d.organiser, katastritunnus: d.cadastralUnit }); show(d.notice, 3000); // the official notice, incl. the III/IV jagu encumbrances ``` - `bailiffs({region})` returns every serving kohtutäitur with their tööpiirkond, office address, phone, e-mail and reception hours. **`totals.byRegion` is counted over all of them, before any filter** — state a count from there, never by counting the rows you printed. - `regions` carries the four tööpiirkonnad with their maakonnad, parsed off the same page rather than transcribed here, so the map cannot drift from what the Chamber states. - `auctions({...})` lists public forced-sale auctions one page at a time. `totals.pages` says how many pages the filter returned and `totals.siteWide` is the site's own counters for **all** property types — neither is "how many of these there are", so say the listing is partial when it is. - `auctionDetails(okid)` returns the auction plus its official notice. **For real estate that notice copies the kinnistusraamat III and IV jagu in full** — keelumärked, hüpoteegid with amounts and beneficiaries — which is otherwise paid, login-only data (see `land-register`). Read the encumbrances out of `notice`. - **Personal identification codes are stripped from the notice** before it is returned, and must not be reconstructed. The debtor is named there because publication is required by law; repeat that name only if the question is about that auction. - Fees, garnishment limits and who may choose a bailiff are law, not directory data: fetch them through `legal-acts-data` and quote the § you printed. The endpoints below are the fallback if a module call throws. ## Access - Chamber of Bailiffs and Trustees in Bankruptcy: `https://kpkoda.ee` — static HTML, no authentication. - KPK auction environment: `https://www.oksjonikeskus.ee` — server-rendered HTML with GET query parameters, no authentication, no login needed to read listings. - Notices: Ametlikud Teadaanded (use the `official-notices` recipe for the URI contract). - Fee rates and garnishment formulas live in law — use `legal-acts-data`. ## Retrieve ### 1. Which bailiff serves an area, and how to reach them `GET https://kpkoda.ee/kohtutaiturid/kohtutaiturid-kontakt/` — one static page carrying every serving bailiff (37 on 2026-07-27). Send `Accept: text/html` only to override a client that asks for JSON by default, as `get()` does — a fetch sending no `Accept` at all returned the byte-identical page (verified 2026-08-03), so an agent that cannot set headers can still run this. The page is ~420 KB, almost all of it inline `` icons; strip those before printing anything. ```js import { get, show } from "./kratt.mjs"; const flat = (h) => h.replace(/<[^>]+>/g, " ").replace(/ /g, " ").replace(/\s+/g, " ").trim(); const url = "https://kpkoda.ee/kohtutaiturid/kohtutaiturid-kontakt/"; const page = await get(url, { headers: { Accept: "text/html" } }); const cards = page.replace(//g, "").split('
').slice(1); const rows = cards.map((c) => ({ nimi: c.match(/class="kohtu__item__title">([^<]+)([^<]+)([^<]+)([\s\S]*?)<\/div>\s*<\/div>/g)] .map((m) => flat(m[1])).filter(Boolean), // [address, phone+email, office/reception hours] })); show({ source: url, kokku: cards.length, read: rows.filter((r) => r.piirkond === "Harju") }, 3000); ``` Jurisdictions (four `tööpiirkonnad`, stated on the same page — cite that URL): Harju = Harju maakond; Viru = Lääne-Viru + Ida-Viru; Tartu = Tartu, Viljandi, Jõgeva, Põlva, Valga, Võru; Pärnu = Pärnu, Saare, Hiiu, Lääne, Järva, Rapla. The page frames the search as "pick a bailiff by `tööpiirkond`". Who may choose the bailiff in a given case is a TMS question — check it through `legal-acts-data` rather than asserting it. ### 2. "Which bailiff is enforcing a claim against me?" — the two real routes Source: `https://kpkoda.ee/kohtutaiturid/taitemenetluse-register/`. Both routes are free; neither is machine-readable. Give both, with the details: 1. `https://www.eesti.ee` → "Minu vastu algatatud täitetoimikud" (ID-card / Mobiil-ID / Smart-ID login). Returns claim size, the handling bailiff's name and the case number. 2. A written extract from the Chamber: digitally signed application to `info@kpkoda.ee`, or on paper with a copy of an identity document to Roosikrantsi 8b, 10119 Tallinn. State name, isikukood, purpose, which data, and the reply address. Paper extracts are issued Mon and Wed 9:30–12:00 and 13:00–16:30; the service is free (tel 6461672). For another person's data, attach the legal basis (volikiri, eestkosteotsus). ### 3. Bailiff fees and enforcement costs Overview page: `https://kpkoda.ee/tasud/`. The rates themselves are **kohtutäituri seadus** 5th section §§ 28–53 (per-act rates §§ 34–51); a fee decision is contested under **täitemenetluse seadustik § 217**. Fetch the in-force text through `legal-acts-data` and quote the § you actually printed — never state a euro amount from memory. The page confirms: the debtor pays the fee, fees cannot be raised or lowered by agreement, and there is no ground for exemption. ### 4. Income garnishment and the protected minimum `GET https://kpkoda.ee/kohtutaiturid/tootasu-arestimise-skeem/` — the formulas are set by **TMS § 132**. The page lists the income types that cannot be attached at all (riiklikud peretoetused, puudega inimese sotsiaaltoetus, töövõimetoetus, seadusel põhinev elatis, riiklik pension in the statutory extent, and others), states the current minimum wage used by the scheme, and links three schemes as public files, including one for elatis claims. Print the figure you use; it changes every year. ### 5. Public forced-sale auctions (täitemenetlus and pankrotimenetlus) Listing: `GET https://www.oksjonikeskus.ee/?varaliik=KI&offers=reg&page=1&onpage=50` - `varaliik`: `KI` kinnisvara, `VS` sõidukid, `MS` veesõidukid, `VO` varalised õigused, `VV` muu vallasvara. - `offers`: `reg` open for registration (the ones a citizen can still enter), `aktiiv` bidding under way, `U` being re-valued. - Also accepted: `msona` (keyword or auction ID), `maakond` (numeric county code from the form), `linn_vald`, `tubadearv`, `minhind`, `maxhind`, `korraldaja` (numeric organiser id), `page`, `onpage` (5/10/50/100). - Auction ids appear as `okid=` links. Detail: `GET https://www.oksjonikeskus.ee/oksjon/view/?okid=` — alghind, tagatisraha, registration and auction start/end, extension interval, the named organiser (kohtutäitur, pankrotihaldur, likvideerija or usaldusisik), the Ametlikud Teadaanded notice URL, linn/vald, aadress, `katastritunnus`, `reg. osa nr`, the owner, and — for real estate — the official notice text with the **full encumbrance list copied from kinnistusraamat III and IV jagu** (isiklikud kasutusõigused, keelumärked, hüpoteegid with amounts and beneficiaries). Those sections are otherwise paid and login-only, so an auctioned object is the one case where the agent can read them for free (see `land-register`). ### 6. Enforcement notices in Ametlikud Teadaanded Always bind a date — the undated collection URI times out. - `https://www.ametlikudteadaanded.ee/ee/-/taitemenetlus/-/{yyyy}/{mm}/{dd}/xml` — main type `taitemenetlus`; subtypes `taitmisteade`, `taitmisteade-elatis`, `vara-arestimine`, `valjatostmine`, `taitetoimingu-teostamine`, `taitemenetlusega-seotud`, `kohtutaituri-vahetumine`, `tahteavalduse-kattetoimetamine`. - `https://www.ametlikudteadaanded.ee/ee/-/enapakkumine-myyk/taitemenetluses-kinnisasja-enampakkumine/{yyyy}/{mm}/{dd}/xml` and `.../taitemenetluses-vallasasja-enampakkumine/...` — note the publisher's own spelling of the main type: `enapakkumine-myyk`, one `m`. ## Return Preserve the bailiff's name, `tööpiirkond`, office address, phone and e-mail; for auctions the `okid`, alghind, tagatisraha, every date, the organiser's name, `katastritunnus` and `reg. osa nr`; for notices the `teate_number`, canonical URL and publication date. Keep the URL actually fetched next to each fact, and keep the legal basis (TMS/KTS §) separate from the Chamber's own explanatory text. ## Limits - The täitemenetluse register (täitemenetluses osalevate isikute ja täitetoimingute andmekogu) has **no public query**: a person's proceedings, claims and balances are reachable only after ID-login on eesti.ee or by signed written application to the Chamber. Never claim to have looked anyone's debts up. - The Chamber warns that register balances can be stale, because bailiffs keep the running account in a separate program — for an exact figure the citizen must ask the handling bailiff. - Most täitemenetlus notices are published for service on a natural person and are therefore excluded from the open URI/XML interface (AvTS § 3¹ lg 7–8), as are archived notices. A given day legitimately returns very few or zero notices. - Fines not yet sent for enforcement are in karistusregister, not here. - The Chamber's `Täitestatistika` page stops at 2011 — do not cite it as current. ## Verify - Bailiff list: require at least 30 `kohtu__item__title` matches and at least one of `Harju`/`Viru`/`Tartu`/`Pärnu` as a `press` label. Zero cards means the template changed — link the page instead of naming a bailiff. - Auctions: a listing is retrieved only when at least one `okid=` id was parsed; a detail page counts only when `alghind oksjonil` plus either `katastritunnus` or `reg. osa nr` are present in printed output. A page containing only the search form and the organiser dropdown is not a result. - Notices: require `at:teadaanded` with at least one `at:teadaanne` carrying `teate_number` and `url`. ## Module API bailiffs({region}) -> {source, page, totals, regions, rows, note} auctions({varaliik, offers, msona, maakond, pageNumber, onpage}) -> {source, page, filter, totals, rows, note} auctionDetails(okid) -> {source, page, okid, title, startingPrice, deposit, organiser, noticeUrl, place, address, cadastralUnit, registerPart, dates, fields, notice, note}