The whole source, organized and ready to query: every endpoint on this page answers in milliseconds. Every response carries
as_of: how current the data is. How datasets work.Search the resolutions
POST /pe/tribunal-constitucional/rulings-search/v1 Dataset
One search over the full text of every resolution since 1996, filtered by kind, proceeding, chamber, case file, year or date.
as_of (how current the data is), the applied filters, total (matches across every page), page, per_page, total_pages, count and results[], most recently published first. Every result carries id (the document’s permanent identifier, e.g. 2026/05005-2025-HC.pdf), registration_number (the expediente), proceeding_type_code and proceeding_type (e.g. HC, Hábeas corpus), type (sentencia, auto or sentencia_interlocutoria), number (the resolution number of a sentencia, e.g. 181/2026), publication_date, year, chamber (Pleno, Sala Primera or Sala Segunda), judicial_district, case_id, text_status (ok, scanned or missing), official_url (the document on the court’s own site) and case_url (the case’s page there).
Search results leave out the text: a single resolution can run to hundreds of thousands of characters.
query still matches against it, so a phrase from the body finds the resolution; read the text itself with the Tribunal Constitucional Ruling endpoint.One resolution, in full
POST /pe/tribunal-constitucional/ruling/v1 Dataset
as_of, found, ruling_id and ruling, which carries everything the search returns plus content: a window onto the resolution’s full text, with text, offset, total_length, has_more and next_offset. Every result carries id (the document’s permanent identifier, e.g. 2026/05005-2025-HC.pdf), registration_number (the expediente), proceeding_type_code and proceeding_type (e.g. HC, Hábeas corpus), type (sentencia, auto or sentencia_interlocutoria), number (the resolution number of a sentencia, e.g. 181/2026), publication_date, year, chamber (Pleno, Sala Primera or Sala Segunda), judicial_district, case_id, text_status (ok, scanned or missing), official_url (the document on the court’s own site) and case_url (the case’s page there).
Long resolutions are read a range at a time: send
offset and limit, then pass the response’s next_offset back as offset until has_more is false. content is null when text_status is scanned (the court published the resolution as an image) or missing; official_url still links the document.An
id the court has not published returns found: false with HTTP 200, not an error.Full reference
Schemas, all response fields, and an interactive playground.