Seadused ja valitsemine
Valitsuse istungite protokollid
Mida valitsus eelnõu kohta otsustas: kes esitas, kes sõna võttis ja mis oli tulemus.
Riigikantselei avalik dokumendiregister (dhs.riigikantselei.ee) hoiab Vabariigi Valitsuse istungite protokolle ja iga päevakorrapunkti otsust eraldi kirjena: kes esitas, kes tegi ettekande, kes sõna võttis, mis otsustati, kuidas hääletati ja kes puudus. Sealsamas on valitsuse ja peaministri õigusaktid, nõukogude protokollid, kirjavahetus ja käskkirjad. Otsuse kirjes on see, mis otsustati, mitte miks: põhjendused on sama istungi kommenteeritud päevakorras valitsus.ee-l.
Mida su agent peab oskama
GETPiisab lehe tõmbamisest. Kõik vajalikud päringud on tavalised HTTPS-päringud. Iga agent, kes oskab veebilehe alla laadida, saab selle juhendi läbi teha.
Vastused, mis on siit tulnud
- Mida valitsus eelnõu kohta otsustas?Valitsus arutas perehüvitiste seaduse muutmise eelnõu (959 SE). Mida ta otsustas, mis põhjendusel ja kuidas hääletati?2026-08-04
Juhend ise
Inglise keeles, sest seda loeb mudel.
Riigikantselei Public Document Register
The Government Office public register, and the government stage of a bill: who put an item on the cabinet agenda, who presented it, who spoke, what was decided, how the vote went, who was absent — as structured XML, not PDF.
Access
- Register root:
https://dhs.riigikantselei.ee/avalikteave.nsf/byjournalkey?open - Lotus Domino serving
Content-Type: text/xml. No login, no cookies, no JavaScript, and no request headers — a bare fetch of every route below returned the same bytes as one sendingAccept: application/json(verified 2026-08-03 with node; the certificates below are still required). - Views, each opened as
/avalikteave.nsf/<view>?open:govmeetingsbydate,govmeetingsbynumber— Vabariigi Valitsuse istungite protokollidbyjournalkey— document series (sarjad) browse; the only view full-text search reachesprotocolsbydate,protocolsbynumber,protocolsbyissuer— government councils'/committees' protocolslegalactsbydate,legalactsbynumber,legalactsbyissuer— Government and Prime Minister actsincomingcorrespondencebydate/bynumber,outgoingcorrespondencebydate/bynumberdecreesbydate,decreesbyissuer(Riigikantselei käskkirjad),contractsbydate
- Any record:
/avalikteave.nsf/documents/<noteid>?open(?openis optional here). Attachments use thehrefon a<file>child,/avalikteave.nsf/documents/<noteid>/$file/<name>, served with their real content type (application/pdf,.docx, …).
Retrieve
Government session minutes and per-item decisions
The richest path in this register. Walk it by date:
govmeetingsbydate?open→<category>rows, one per year (2009 … current).?open&path=2026→ month categories labelled07|Juuli. Encode|as%7C.?open&path=2026/07%7CJuuli→<document noteid="…">rows withdateandprotocolnumber.documents/<noteid>?open→<document form="frmGovMeetingMinutes">withsubject,protocolnumber,date,meetingplace,meetingchair,meetingparticipants,meetingparticipantsother,invitedparticipants,missingparticipants,protocolsigners,protocolcreator,docid(YYYYMMDD.<protocol>), then an<agenda number="…">block listing every agenda item as its own<document noteid="…">with the numbered subject.- The item's own record →
<document form="frmDecision">withdate,protocolnumber,agendaitem,itemsubject,proposedby(Esitaja),presenters(Ettekandja),speakers(Sõnavõtja),votingresults(Hääletustulemused),body(Otsuse tekst), and an<agenda>block with<link rel="parent">back to the minutes.
Items split into sub-points behave differently: the parent record is an umbrella carrying only
agendaitem, itemsubject and subject, with the sub-point records listed in its <agenda> block.
The decision and the vote live on each sub-point record, in agendasubitem, subitemsubject,
subproposedby, subpresenters, subspeakers, subvotingresults and its own body.
Full-text search
GET /avalikteave.nsf/byjournalkey?SearchView&Query=<term>&count=10
- The response is
Content-Type: text/html: the XML is wrapped in a Domino<form>between literal@@@XML_START@@@and@@@XML_END@@@markers. Cut between the markers before parsing. - Inside:
<entries viewname="search" query="…" hits="…" totalhits="…">then<document noteid="" href="">rows withdate,docid,subject. Querytakes Domino syntax:AND/OR, quoted phrases, and fielded terms such as[subject]=riigikaitsekohusor[DocAccess]=AK(URL-encode[,],=).SearchMaxraises the result cap, default 250.SearchOrder=4sorts by date and reports the untruncated total.startis 0-based in this view.- Search does not reach session minutes or decision records. The same term returns 7 registry
documents from
byjournalkeyandtotalhits="0"fromgovmeetingsbydate?SearchView. To reach a cabinet decision, walk the date path above — do not conclude the register lacks it. - The fielded form at
searchform?openis POST-only, so a GET-only agent cannot use it; use the GETSearchViewroute instead.
Journal-series browse
The root returns <category> rows. Pass a category's exact label as path, %20 for spaces and
/ between levels:
?open&path=02%20Vabariigi%20Valitsuse%20istungite%20ja%20n%C3%B5upidamiste%20ettevalmistamine%20ja%20korraldamine/2-5%20Vabariigi%20Valitsuse%20otsuste%20alusdokumendid
Rows are <document noteid="" href=""> with named <field> children; the <fieldtitles> block at
the top of every response maps field names to their Estonian labels. Series 2-5 (Vabariigi
Valitsuse otsuste alusdokumendid) holds the Riigikantselei resolutions that start a bill's
government-stage circuit — they name each ministry, its task, its deadline and the EIS file number.
Records with a casenumber end in a <case number="…"> block listing every document in the same
case. That is the whole government-stage paper trail for one bill in one hop.
Councils' and committees' protocols
protocolsbyissuer?open → issuer categories, then documents. A protocol is
<document form="frmTANProtokoll"> (or frmProtokoll) with subject, docnumber, date,
timebegin, timeset, chair, docsigners — the substance is only in the attached PDF, and there
are no per-item decision records as there are for cabinet sessions.
Paging
<entries> carries totalhits, start, count, hits, from, to, prev, next, plus
<link rel="next"> / rel="end". count=100 works. Read those attributes instead of assuming a
page size; start is 1-based in ordinary views and 0-based under SearchView.
Where the reasons live
A frmDecision body states what was decided, not why. The reasoning — which ministries proposed
the position and on what grounds — is in the kommenteeritud päevakord for that session on
valitsus.ee, which is fully server-rendered and quotable per item. That hop is not part of this
register: use the government-session-agendas recipe to locate and read it.
Return
- Preserve view name, category path or query,
noteid, thedocuments/<noteid>?openURL, protocol number and session date, agenda item (and sub-item) number, every named field, and retrieval time. - Quote
votingresults/subvotingresultsverbatim. It is free Estonian text (e.g. "ühehäälne otsus"), not a tally — do not convert it into vote counts. - Multi-value fields (
meetingparticipants,missingparticipants,speakers,protocolsigners,body) separate entries with the literal four characters\nl— a real backslash,n,l, not a newline escape. Split on that string. missingparticipantsis a stated fact of record. Report who was absent when the question is who decided.- Keep absent fields null; available fields vary by form.
reference(Kehtestatud õigusakt) is declared onfrmDecisionbut was empty in every record checked.
Limits
- The register answers, and
reachable: falsenow means a real failure rather than a standing one.dhs.riigikantselei.eeserves only its leaf certificate — its issuerYR1chains to ISRG Root YR, which Node's bundle does not carry — so it was genuinely unreachable from Node until 2026-08-02. That is fixed centrally:certs/estonian-state-chain.pemsupplies the cross-signed certificate; the published archive ships it and its setup step installs it. Verified 2026-08-02 with Node:byjournalkey?openanswers HTTP 200text/xmlwithtotalhits="23",govmeetingsbydate?openwith 18 year categories, and?open&path=2026with seven months.riigikantselei.mjsdecides reachability at runtime and its TLS note fires only on an actual certificate error. The lesson from that episode is still worth carrying, because it is general: macOScurlsucceeded on this host throughout, because it fetches a missing issuer itself. A passingcurlcheck proves nothing about what the agent can reach — verify with Node.www.riigikantselei.eeandriigikantselei.eeverify fine but answer 404 for/avalikteave.nsf/…(still true 2026-08-02), sodhs.is the only host. If a call ever does come backreachable: false, read its note: say the cabinet's minutes could not be retrieved — never that the government has no record — and fall back togovernment-session-agendasfor the kommenteeritud päevakord and its grounds,riigikogu-open-dataonce a bill reaches the Riigikogu, orlegal-acts-datafor an adopted regulation. A human can open the register athttps://www.riigikantselei.ee/asutus-uudised-ja-kontakt/dokumendiregister.
claim verify fine but answer 404 for `/avalikteave.nsf/…` (still true 2026-08-02)
# The register lives on `dhs.` alone. www.riigikantselei.ee is the Drupal site
# and answers its own 404 page ("Otsitud lehekülge ei leitud!") for anything
# under /avalikteave.nsf/ — 112 KB of HTML, nothing like the 225-byte Domino
# 404 an unknown noteid produces.
GET https://www.riigikantselei.ee/avalikteave.nsf/byjournalkey?open
expect-status 404
expect /Otsitud lehek/
# The control is that host's own front page, which must answer 200. Without it
# a Riigikantselei website outage would read as confirmation — and this is the
# guide that once declared a whole live register dead, so a check that cannot
# tell a refusal from an outage is exactly the failure to avoid here.
control GET https://www.riigikantselei.ee/
- Listing rows carry their data as
<field name="…">CHILDREN, not as attributes on<document>; onlynoteidandhrefare attributes. Reading attributes alone yields rows that are a noteid and four nulls, which reads as a register full of empty records. - This is an older Government Office document system and may overlap newer ADR records
(
ministry-document-registries). - Category labels have historical variants — two different "05 Peaministri nõustamine …" series and two different "18 Avaliku teenistuse …" series sit side by side in the root. Do not merge them solely by numeric prefix.
- Detail records can omit restricted document content while retaining public metadata. An
Asutusesiseseks kasutamiseksrecord keepscompanyname,date,docid, series andaccessrestrictionreason(e.g. "Avaliku teabe seadus § 35 lg 2 p 2") but has an emptysubjectand no<file>children.docaccesstypevalues in use:Avalik,Asutusesiseseks kasutamiseks,Avalik, väljastatakse teabenõude korral. - Protocol numbers restart each year, so
govmeetingsbynumberis not chronological — it opens on protocol 90 of 2020. Usegovmeetingsbydatewhenever the date is known. - Relevance-ordered search reports
totalhitssaturated at the 250 cap; addSearchMax=1000orSearchOrder=4before quoting a count. protocolsbyissuercovers four councils only. Kabinetinõupidamised and press conferences are not in this register.- An unknown
noteidanswers HTTP 404 HTML ("Entry not found in index"), not an empty result.
claim An unknown `noteid` answers HTTP 404 HTML ("Entry not found in index")
# 225 bytes of Domino error HTML, not `<entries>` with nothing in it. So a
# noteid read off the wrong view fails loudly instead of looking like a
# document that is not in the register.
GET https://dhs.riigikantselei.ee/avalikteave.nsf/documents/NT00000000?open
expect-status 404
expect /Entry not found in index/
# The control is the register root: HTTP 200 text/xml. This guide spent a
# release telling the agent the register was dead while it was answering 200
# with totalhits="23", and the control is what stops that from happening in
# this direction — a 404 from a host that is down proves nothing.
control GET https://dhs.riigikantselei.ee/avalikteave.nsf/byjournalkey?open
Verify
- Every view must answer HTTP 200
text/xmlwith root elemententriesand paging attributes, carrying<category>or<document>rows. - Session minutes: require
<document form="frmGovMeetingMinutes">withprotocolnumber,dateand an<agenda>block holding one<document noteid="…">per numbered agenda item. Minutes whose<agenda>block says "No documents found" mean the wrongnoteid. - Decision record vs. empty form. Require
<document form="frmDecision">whoseagendaitemmatches the item asked about, AND a non-emptybodyof Estonian decision text (it reads as a numbered instruction, e.g. "1. Mitte toetada …" or "Anda Vabariigi Valitsuse määrus …"), AND at least one ofvotingresults/subvotingresultspopulated. A record whose only populated fields aredate,protocolnumber,agendaitem,itemsubjectandsubjectis an umbrella item, not a decision: open the sub-point documents listed in its<agenda>block and read those. - Attribution must come from the fetched fields —
proposedby,presenters,speakers(or theirsub*equivalents) — never from which minister the topic suggests. Do not state a name, date, vote or decision text that is not present in retrieved output. - Search: require
<entries … query="…">between the@@@XML_START@@@/@@@XML_END@@@markers withtotalhitsgreater than zero. A 200 containing only the Domino<form>and no<entries>is a failed query. Zero hits on a term the register plainly holds means the search ran on a view other thanbyjournalkey, or that the target is a minutes/decision record, which search never indexes.
Worked example (walked 2026-07-26)
Government opinion on the Riigikaitsekohus bill (979 SE), cabinet session of 23 July 2026, item 7 — four requests, no search:
govmeetingsbydate?open&path=2026→ category07|Juuligovmeetingsbydate?open&path=2026/07%7CJuuli→noteid="NT0041A37A", 23.07.2026, protocol 36documents/NT0041A37A?open→frmGovMeetingMinutes, chaired by rahandusminister Jürgen Ligi, five ministers absent,<agenda>item 7 →noteid="NT0041A35E"documents/NT0041A35E?open→frmDecision:proposedbyjustiits- ja digiminister Liisa-Ly Pakosta,presentersMargus Tsahkna,speakersJürgen Ligi,votingresults"ühehäälne otsus",bodya numbered instruction not to support the bill and to convey the opinion to the põhiseaduskomisjon by 24 July 2026.
byjournalkey?SearchView&Query=riigikaitsekohus&count=10 finds the same bill's preparatory
paperwork instead — 7 hits, including the Riigikantselei resolution 26-01311-2 of 25.06.2026 tasking
two ministries with deadlines — but never the decision record itself.
Module API
govMinutes({date, year, month}) -> {source, page, reachable, note, path, totals, rows} govDecision(noteid) -> {source, page, reachable, note, form, protocol, date, item, subject, proposedby, presenters, speakers, votingresults, body, subitems}