> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usecroma.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tribunal Constitucional

> The sentencias of Chile's Tribunal Constitucional: search about 13,000 cases since 1981 by rol, procedure, outcome or date, and read any sentence in full with its ficha, its votes and its original PDF.

Chile's Tribunal Constitucional decides whether laws and other rules fit the Constitution: requests to declare a legal provision inapplicable in a pending case (inaplicabilidad, the bulk of its work), declarations of unconstitutionality, the preventive review of organic laws, and challenges to autos acordados, decrees and bills. Each case here is one rol with its procedure, the sentence date, the outcome, who filed it and the proceeding it comes from, the legal provisions challenged and the articles of the Constitution at issue, the Tribunal's keywords and doctrine, the justices of the majority, the dissent and any concurrence with who wrote each, every ficha of the Tribunal's case-law search for the case, and every distinct document of the case, kept byte for byte, with the sentence's text.

Recent sentences arrive the day after the Tribunal signs them, with the signed PDF and the case caption; the ficha follows when the Tribunal's case-law search catches up, usually about three months later. Search by rol, procedure, outcome or date, or with free text that reaches into the provisions, the justices and the sentence itself. Search first, then read one case in full.

> [!NOTE]
>
> 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](https://docs.usecroma.com/datasets.md).

## Search the sentencias

`POST /cl/tc-cl/rulings-search/v1` [Dataset](https://docs.usecroma.com/datasets.md)

One search over every case of the Tribunal Constitucional with a published sentence since 1981, filtered by rol, procedure, outcome or date.

| Field | Type | Notes |
| - | - | - |
| `query` | string | Optional words matched against the rol, caption, requesters, pending proceeding, challenged laws, constitutional articles, keywords, justices, doctrine and the sentence's text, e.g. `debido proceso`. Every word must appear. |
| `rol` | string | Optional rol of the case, e.g. `16770`. `16.770-25-INA` works too: only the number counts. |
| `procedure` | string | Optional procedure code: `INA` (inaplicabilidad), `INC` (inconstitucionalidad), `CPR` (preventive review), `CAA` (autos acordados), `CPT`, `CDS` and the rest. |
| `outcome` | string | Optional outcome as the Tribunal records it, e.g. `Acoge`, `Rechaza`, `Acoge parcialmente`. Accents and case are ignored. |
| `from_date` | string | Optional: only cases whose latest sentence is on or after this date, `yyyy-mm-dd`. |
| `to_date` | string | Optional: only cases whose latest sentence is on or before this date, `yyyy-mm-dd`. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-50). Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/cl/tc-cl/rulings-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "debido proceso", "procedure": "INA" }'
```

Returns `as_of` (how current the data is), the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`, most recent sentence first. Every result is one case: `rol` (the case's number, e.g. `16770`), `case_number` (with its filing year, e.g. `17637-2026`, for recent sentences), `procedure` (e.g. `INA`) and `procedure_name`, `ruling_type` (e.g. `INA-STC`), `sentence_date` and `sentence_date_raw` (the date as the Tribunal records it, kept when it is mistyped; `sentence_date` is then null) and `year`, `caption` (the carátula, for recent sentences), `outcome` and `outcomes`, `resolution_types`, `requesters`, `pending_proceeding`, `challenged_provisions` (each with `legal_body`, `article`, `paragraph`, `number`, `letter`, `section`, `phrase` and `text`) and `challenged_laws`, `constitutional_articles`, `keywords`, `majority` and `majority_author`, `dissent` and `dissent_author`, `concurrence` and `concurrence_author`, `bench`, `chamber`, `related_rulings`, `doctrine`, `justices` (everyone named on the case), `fichas` (every ficha of the Tribunal's case-law search for the case, each with `id`, `type`, `type_name`, `sentence_date`, `status`, `updated_at` and every one of its `fields` with its `name` and `values`), `documents` (every distinct document of the case, each with `id`, `collection`: `case_file` for the signed sentence or `case_law` for the copy in the case-law search, `name`, `date`, `pages`, `bytes`, `text_status`, `document_url`, Croma's byte-identical copy, and `source_document_url`), `text_status`, `document_url` and `source_document_url` (those of the first document). Fields the Tribunal does not state are null or empty.

> [!NOTE]
>
> Search results leave out the sentence's text. `query` still matches against it; read the text itself with the Tribunal Constitucional Chile Ruling endpoint.

> [!NOTE]
>
> A new sentence appears the day after the Tribunal signs it, with its signed PDF and caption. Its ficha (outcome, provisions, votes, doctrine) follows when the Tribunal's case-law search catches up, usually about three months later.

## One case, in full

`POST /cl/tc-cl/ruling/v1` [Dataset](https://docs.usecroma.com/datasets.md)

| Field | Type | Notes |
| - | - | - |
| `rol` | string | **Required.** The case's `rol` from a search result, e.g. `16770`. `16.770-25` or `16770-2025-INA` work too: only the number counts. |
| `offset` | integer | First character of the text to return. Pass the previous response's `next_offset` to read on. Default `0`. |
| `limit` | integer | How many characters of the text to return. Most sentences fit in one response. Default `200000`. |

```bash theme={"dark"}
curl https://api.croma.run/cl/tc-cl/ruling/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "rol": "16770" }'
```

Returns `as_of`, `found`, `rol` and `ruling`, which carries everything the search returns plus `content` (a window onto the sentence's text, with `text`, `offset`, `total_length`, `has_more` and `next_offset`). Every result is one case: `rol` (the case's number, e.g. `16770`), `case_number` (with its filing year, e.g. `17637-2026`, for recent sentences), `procedure` (e.g. `INA`) and `procedure_name`, `ruling_type` (e.g. `INA-STC`), `sentence_date` and `sentence_date_raw` (the date as the Tribunal records it, kept when it is mistyped; `sentence_date` is then null) and `year`, `caption` (the carátula, for recent sentences), `outcome` and `outcomes`, `resolution_types`, `requesters`, `pending_proceeding`, `challenged_provisions` (each with `legal_body`, `article`, `paragraph`, `number`, `letter`, `section`, `phrase` and `text`) and `challenged_laws`, `constitutional_articles`, `keywords`, `majority` and `majority_author`, `dissent` and `dissent_author`, `concurrence` and `concurrence_author`, `bench`, `chamber`, `related_rulings`, `doctrine`, `justices` (everyone named on the case), `fichas` (every ficha of the Tribunal's case-law search for the case, each with `id`, `type`, `type_name`, `sentence_date`, `status`, `updated_at` and every one of its `fields` with its `name` and `values`), `documents` (every distinct document of the case, each with `id`, `collection`: `case_file` for the signed sentence or `case_law` for the copy in the case-law search, `name`, `date`, `pages`, `bytes`, `text_status`, `document_url`, Croma's byte-identical copy, and `source_document_url`), `text_status`, `document_url` and `source_document_url` (those of the first document). Fields the Tribunal does not state are null or empty.

> [!NOTE]
>
> Long sentences 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.

> [!NOTE]
>
> A rol the Tribunal has not published a sentence for returns `found: false` with HTTP 200, not an error.

> **[Full reference](https://docs.usecroma.com/api-reference/overview.md)**
>
> Schemas, all response fields, and an interactive playground.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.