---
title: "Corte Suprema Ruling"
method: POST
path: "/co/corte-suprema/ruling/v1"
tags: ["Colombia", "Corte Suprema de Justicia"]
---

# Corte Suprema Ruling

`POST /co/corte-suprema/ruling/v1`

## Request

- Base URL: `https://api.croma.run`
- URL: `https://api.croma.run/co/corte-suprema/ruling/v1`
- Auth: HTTP bearer

Retrieve one ruling of the Corte Suprema de Justicia de Colombia by its `id` (`978662`) or its number (`AC6049-2026`): its chamber, kind, case file number, magistrado ponente, the relatoría's summary and topics, its full text, and the link to the ruling's document at the court. The text comes back a character range at a time (`offset`, `limit`); follow `next_offset` until `has_more` is false. Served by Croma (`as_of` says how current the data is).

**Dataset endpoint**: answers from the whole source in milliseconds and carries `as_of`.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `ruling_id` string, required: The ruling's `id` (`978662`) or its number as the court prints it (`AC6049-2026`).
  - `offset` integer: First character of the range to return. Pass the previous response's `next_offset` to continue reading.
  - `limit` integer: Maximum characters to return (1000-1000000).

## Response `200`

Successful response

- CorteSupremaRulingResponse
  - `data` CorteSupremaRulingData, required
    - `as_of` string, nullable, required: How current the data in this response is.
    - `found` boolean, required
    - `ruling_id` string, required
    - `ruling` object, nullable, required
      - `id` string, required: The ruling's identifier in the Corte Suprema's relatoría, e.g. "978662". The ruling lookup accepts it.
      - `number` string, nullable, required: The ruling's number as the court prints it (número de providencia), e.g. "AC6049-2026", "SL1234-2024", "STC5959-2026". Null on most older rulings, which the court lists without one.
      - `type` string, nullable, required: The kind of ruling as the court names it (tipo de providencia): "SENTENCIA", "AUTO", "AUTO INTERLOCUTORIO".
      - `proceeding_class` string, nullable, required: The kind of proceeding (clase de actuación), e.g. "RECURSO DE CASACIÓN", "ACCIÓN DE TUTELA - PRIMERA INSTANCIA", "CONFLICTO DE COMPETENCIA". Null when the court records none.
      - `chamber` string, nullable, required: The chamber (sala) that handed the ruling down, as the court names it, e.g. "SALA DE CASACIÓN CIVIL", "Sala de Casación Penal", "SALA DE DESCONGESTIÓN LABORAL N.º 1", "SALA PLENA - NEGOCIOS GENERALES".
      - `chamber_group` 'civil' | 'laboral' | 'penal' | 'plena' | 'constitucional' | 'negocios-generales', nullable, required: The chamber as one of six groups, which is what the `chamber` filter matches: `civil`, `laboral`, `penal` (the criminal cassation chamber and its special chambers), `plena`, and the historic `constitucional` and `negocios-generales`.
      - `is_tutela` boolean, required: Whether the ruling decides a tutela, as the court marks it. False for the chambers' own matters.
      - `registration_number` string, nullable, required: The case file number (número de proceso) as the court prints it: the 23-digit radicado on modern rulings, e.g. "11001-02-03-000-2026-04999-00". Null on most historic rulings.
      - `registration_digits` string, nullable, required: The digits of `registration_number` alone, without dashes, spaces or letters. This is what the `registration_number` filter matches.
      - `reporting_judges` string[], required: The magistrado or magistrados ponentes, as the court names them.
      - `reporting_judge_keys` string[], required: The same names in canonical form (lowercased, unaccented, spaces hyphenated: "francisco-ternera-barrios"), which is what the `reporting_judge` filter matches.
      - `year` number, nullable, required: The year of the ruling.
      - `ruling_date` string, nullable, required: `yyyy-mm-dd` the court handed the ruling down.
      - `subject` string, nullable, required: The relatoría's summary of the ruling (tema): each topic in capitals followed by what the court held on it, one paragraph per topic. Null when it records none.
      - `descriptors` string[], required: The topics the relatoría indexes the ruling under, in order, e.g. ["CONFLICTO DE COMPETENCIA", "COMPETENCIA"]. Empty when it records none.
      - `text_status` 'extracted' | 'scanned' | 'unavailable', required: `extracted` when `text` holds the ruling's full text; `scanned` when the court's document is a scanned image with no text in it; `unavailable` when the court publishes no document for the ruling.
      - `text_source` 'html' | 'pdf' | 'doc' | 'none', required: The format of the court's document the text comes from: `html`, `pdf` or `doc` (a Word file). `none` when the court publishes no document.
      - `official_url` string, required: The link to the ruling's document as the court publishes it, in the format `text_source` names; the PDF when the court publishes no text of the ruling.
      - `content` object, nullable, required: A range of the ruling's text, or null when there is no text (see `text_status`).
        - `text` string, required: The requested character range of the ruling's text.
        - `offset` number, required: First character of the range, which is where the reading actually started.
        - `total_length` number, required: Length of the whole text in characters, however much of it this response carries.
        - `has_more` boolean, required: Whether the text continues past this range.
        - `next_offset` number, nullable, required: Pass this back as `offset` to read the next range. Null at the end of the text.

## Other responses

- `400`: Invalid request body
- `401`: Missing or invalid API key
- `429`: Rate limit exceeded
- `500`: Internal error
- `502`: Upstream source returned an error

---

[API](https://skmtc.dev/usecroma/apis/croma-marketplace-api.md) · [All operations](https://skmtc.dev/usecroma/apis/croma-marketplace-api/llms.txt) · [OpenAPI document](https://skmtc.dev/usecroma/apis/croma-marketplace-api/revisions/df016cdb29d7?raw)
