> ## 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.

# Corte Constitucional

> Search every ruling of Colombia's Constitutional Court since 1992, tutela, constitutionality, unification and autos, and read any ruling's full text.

The Corte Constitucional de Colombia has handed down close to 50,000 rulings since 1992: tutela judgments (T), constitutionality judgments (C), unification judgments (SU) and autos (A). Each one here comes with its full text, what the court decided, the rights at stake, the magistrado ponente, the case file number, and a link to the ruling on the court's own site.

Search across all of them at once, by kind, year, case file, ponente or date, or with free text that reaches into the body of every ruling.

<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](/datasets).
</Note>

## Search the rulings

`POST /co/corte-constitucional/rulings-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

One search over the full text of every ruling since 1992, filtered by kind, year, case file, ponente or date.

| Field                 | Type    | Notes                                                                                                                          |
| --------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `query`               | string  | Optional words matched against the ruling's number, case file number, topics, synopsis, decision and full text.                |
| `type`                | string  | Optional kind of ruling: `T` (tutela), `C` (constitucionalidad), `SU` (unificación) or `A` (auto). The Spanish names work too. |
| `year`                | integer | Optional year of the ruling (the 2025 of T-013/25). 0 searches every year. Default `0`.                                        |
| `registration_number` | string  | Optional case file number (expediente) as the court writes it: `T-10417884`, `D-15234`. Case and spaces are ignored.           |
| `reporting_judge`     | string  | Optional magistrado ponente, by full name as it appears in `reporting_judges`. Case and accents are ignored.                   |
| `from_date`           | string  | Optional: only rulings handed down on or after this date, `yyyy-mm-dd`.                                                        |
| `to_date`             | string  | Optional: only rulings handed down 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/co/corte-constitucional/rulings-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "mínimo vital", "type": "T" }'
```

Returns `as_of` (how current the data is), the applied filters, `total` (matches across every page), `page`, `per_page`, `total_pages`, `count` and `results[]`, most recent ruling first. Every result carries `id` (the ruling's number in canonical form, e.g. `T-013/25`), `number` (as the court prints it), `relatoria_id`, `type` and `type_code` (`T`, `C`, `SU` or `A`), `year`, `ruling_date`, `publication_date`, `proceeding_type`, `chamber`, `registration_number` (the expediente), `reporting_judges[]` and `reporting_judge_keys[]`, `subject`, `summary` (the relatoría's synopsis), `decision` (what the court decided), `rights_invoked[]`, `rights_protected[]`, `lower_instances[]`, `related_relatoria_ids[]`, `updated_at` and `official_url` (the ruling's page on the court's own site).

<Note>
  Search results leave out the ruling's text: a single ruling can run to hundreds of thousands of characters. `query` still matches against it, so a phrase from the body finds the ruling; read the text itself with the Corte Constitucional Ruling endpoint.
</Note>

## One ruling, in full

`POST /co/corte-constitucional/ruling/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field       | Type    | Notes                                                                                                                                                                                                                |
| ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ruling_id` | string  | **Required.** The ruling's number in any of the court's notations (`T-013/25`, `SU.502/25`, `A. 006/25`, `T-013-25`), or the `relatoria_id` from a search result or from another ruling's `related_relatoria_ids[]`. |
| `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 rulings fit in one response; the longest run past a million characters. Default `200000`.                                                                            |

```bash theme={"dark"}
curl https://api.croma.run/co/corte-constitucional/ruling/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "ruling_id": "T-013/25" }'
```

Returns `as_of`, `found`, `ruling_id` and `ruling`, which carries everything the search returns plus `content`: a window onto the ruling's full text, with `text`, `offset`, `total_length`, `has_more` and `next_offset`. Every result carries `id` (the ruling's number in canonical form, e.g. `T-013/25`), `number` (as the court prints it), `relatoria_id`, `type` and `type_code` (`T`, `C`, `SU` or `A`), `year`, `ruling_date`, `publication_date`, `proceeding_type`, `chamber`, `registration_number` (the expediente), `reporting_judges[]` and `reporting_judge_keys[]`, `subject`, `summary` (the relatoría's synopsis), `decision` (what the court decided), `rights_invoked[]`, `rights_protected[]`, `lower_instances[]`, `related_relatoria_ids[]`, `updated_at` and `official_url` (the ruling's page on the court's own site).

<Note>
  Long rulings run past a million characters, so the text is 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>

<Note>
  A number the court has not published returns `found: false` with HTTP 200, not an error. The court publishes a ruling up to a year after handing it down, so a recent ruling can be `found: false` today and present next month.
</Note>

<Card title="Full reference" icon="code" href="/api-reference/overview">
  Schemas, all response fields, and an interactive playground.
</Card>
