# Tribunal Constitucional (`legaltech/tribunal-constitucional`) Actor

Este actor automatiza la búsqueda de resoluciones en la jurisprudencia del Tribunal Constitucional.

- **URL**: https://apify.com/legaltech/tribunal-constitucional.md
- **Developed by:** [Miguel González](https://apify.com/legaltech) (community)
- **Categories:** Automation
- **Stats:** 6 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 🏛️ Tribunal Constitucional — Buscador de jurisprudencia

Actor de [Apify](https://apify.com) que automatiza la búsqueda de jurisprudencia del **Tribunal Constitucional de España** ([hj.tribunalconstitucional.es](https://hj.tribunalconstitucional.es)). Permite buscar **sentencias** por texto libre y filtrarlos por tipo de resolución, órgano, número/año y rango de fechas.

Para cada resolución encontrada, el actor extrae sus metadatos (órgano, tipo, número, fecha, ECLI, tipo de proceso, síntesis descriptiva y analítica, referencia del BOE) y los enlaces a la resolución y a su PDF del BOE. Además, en una segunda ejecución puedes pedirle que **extraiga el texto íntegro** de resoluciones concretas (campo `documentUrls`) para analizarlas.

### ✨ Características

- 🔎 Búsqueda por múltiples términos en una sola ejecución (hasta 50).
- 🔍 Filtros: tipo de resolución, órgano, tipo de proceso, materia, número/año y rango de fechas.
- 📖 Análisis doctrinal: búsqueda en síntesis, extractos y resumen.
- ↕️ Ordenación por fecha (ascendente o descendente).
- 📄 Metadatos completos (órgano, tipo, número, fecha, ECLI, tipo de proceso, síntesis).
- 🔗 Enlace a la resolución y al PDF oficial del BOE.
- 📝 Extracción bajo demanda del **texto íntegro** de resoluciones concretas (`documentUrls`).
- 🔒 **Anonimización automática** de nombres de personas en el texto extraído.

### 🔒 Anonimización de datos personales

> **Las sentencias del Tribunal Constitucional no se publican anonimizadas.** A diferencia de otros órdenes jurisdiccionales (p. ej. el CGPJ, que sí anonimiza la jurisprudencia ordinaria antes de su difusión), el TC publica sus resoluciones con los nombres completos de las partes, sus representantes, letrados y magistrados.

Para proteger la privacidad de las personas que aparecen en los textos, este actor **anonimiza automáticamente** todos los nombres detectados en el campo `text` (y `paragraphs`). 

### 📥 Entrada (Input)

Debes indicar **al menos uno** de estos campos: `searchTerms` (para buscar) o `documentUrls` (para extraer texto de resoluciones concretas).

| Campo | Tipo | Descripción |
| --- | --- | --- |
| `searchTerms` | `array<string>` | Términos a buscar (máx. 50). Cada término se busca por separado. Si se deja vacío con filtros, devuelve todas las que cumplan los filtros. |
| `documentUrls` | `array<string>` | URLs de páginas `Show` (campo `showUrl` de resultados anteriores) de las que extraer el **texto íntegro** (máx. 50). |
| `resolutionTypes` | `array<string>` | Tipos: `SENTENCIA`, `AUTO`, `DECLARACION`. Por defecto, los tres. |
| `organo` | `string` | Órgano: Pleno, Sala primera, Sala segunda, Secciones… Por defecto, todos. |
| `tipoRecurso` | `array<string>` | Tipo(s) de proceso constitucional (recurso de amparo, de inconstitucionalidad, conflicto de competencia…). Por defecto, todos. |
| `materia` | `array<string>` | Materia(s): Civil, Contencioso-Administrativo, Electoral, Militar, Parlamentario, Penal, Social, Otros. Por defecto, todas. |
| `numero` | `string` | Número de resolución (sin año), p. ej. `34`. |
| `anio` | `string` | Año de la resolución, p. ej. `2026`. |
| `dateFrom` | `string` | Fecha mínima (`YYYY-MM-DD` o `DD/MM/YYYY`). |
| `dateTo` | `string` | Fecha máxima (`YYYY-MM-DD` o `DD/MM/YYYY`). |
| `searchScope` | `string` | Parte de la resolución sobre la que se busca el texto (por defecto, todo el texto). |
| `doctrinalText` | `string` | Texto a buscar en el análisis doctrinal (síntesis, extractos, resumen…). |
| `doctrinalScope` | `string` | Ámbito del análisis doctrinal sobre el que se busca `doctrinalText`. Por defecto, todos los campos. |
| `sortOrder` | `string` | `desc` (recientes primero, por defecto) o `asc`. |
| `maxResults` | `integer` | Máximo de resoluciones por término. Por defecto, `20`. |

#### Ejemplo de input

```json
{
  "searchTerms": ["derecho al honor"],
  "resolutionTypes": ["SENTENCIA"],
  "sortOrder": "desc",
  "maxResults": 20
}
````

### 📤 Salida (Output)

Cada resolución se guarda en el dataset con esta forma:

```json
{
  "searchTerm": "derecho al honor",
  "id": "32085",
  "title": "Sala Segunda. SENTENCIA 34/2026, de 27 de abril (BOE núm. 137 de 05 de junio de 2026)",
  "organo": "Sala Segunda",
  "resolutionType": "Sentencia",
  "resolutionNumber": "34/2026",
  "resolutionYear": "2026",
  "resolutionDate": "2026-04-27",
  "ecli": "ECLI:ES:TC:2026:34",
  "tipoProceso": "Recurso de amparo 2820-2024",
  "sintesisDescriptiva": "Promovido por doña…",
  "sintesisAnalitica": "Vulneración del derecho a la tutela judicial efectiva…",
  "boe": "BOE núm. 137 de 05 de junio de 2026",
  "showUrl": "https://hj.tribunalconstitucional.es/HJ/es/Resolucion/Show/32085",
  "pdfUrl": "https://hj.tribunalconstitucional.es/HJ/es/Resolucion/Api/32085?format=pdf"
}
```

### 📝 Extracción del texto íntegro

El texto completo de cada resolución **no** se extrae por defecto, se extrae el resumen.

- **En una segunda ejecución selectiva:** copia los `showUrl` que te interesen en el campo `documentUrls`. El actor solo extraerá el texto de esas resoluciones.

#### Modo "párrafos"

Para reducir el volumen de texto (útil con LLMs), usa `paragraphs` (número de pasajes) y, opcionalmente, `paragraphTerms` (términos con los que localizar los pasajes; por defecto, el término de búsqueda). En vez del texto íntegro se devuelven solo los pasajes relevantes en el campo `paragraphs`.

# Actor input Schema

## `searchTerms` (type: `array`):

Lista de términos a buscar en el texto de la jurisprudencia del Tribunal Constitucional (máx. 50). Cada término se busca por separado y genera sus propios resultados. Si se deja vacío pero se aplican filtros (tipo, fechas, número/año, materia, órgano...), se devuelven TODAS las resoluciones que cumplan los filtros. Úsalo en la primera fase (búsqueda). Ejemplo: \["vivienda", "derecho al honor"].

## `documentUrls` (type: `array`):

Lista de URLs de páginas de resolución (campo 'showUrl' devuelto por una búsqueda previa, p. ej. https://hj.tribunalconstitucional.es/HJ/es/Resolucion/Show/32085) de las que extraer el TEXTO ÍNTEGRO. Úsalo en la segunda fase: tras buscar, copia aquí los 'showUrl' que te interesen (máx. 50). Si rellenas este campo, el actor solo extrae el texto de esas resoluciones y NO es necesario indicar 'searchTerms'. Combínalo con 'section', 'paragraphs' y 'paragraphTerms' para acotar la parte del texto devuelta.

## `resolutionTypes` (type: `array`):

Tipo(s) de resolución a incluir en la búsqueda. Si no se selecciona ninguno, se buscan los tres. Valores admitidos: SENTENCIA, AUTO, DECLARACION.

## `searchScope` (type: `string`):

Parte de la resolución sobre la que se busca el texto introducido en 'Términos de Búsqueda'. Por defecto, todo el texto de la resolución.

## `tipoRecurso` (type: `array`):

Tipo(s) de proceso constitucional (TIPO\_RECURSO). Si no se selecciona ninguno, se buscan todos.

## `materia` (type: `array`):

Materia(s) de la resolución (MATERIA). Si no se selecciona ninguna, se buscan todas.

## `doctrinalScope` (type: `string`):

Parte del análisis doctrinal sobre la que se busca el 'Texto en análisis doctrinal'. Por defecto, todos los campos.

## `organo` (type: `string`):

Órgano del Tribunal Constitucional que dictó la resolución. Si no se indica, se buscan todos.

## `numero` (type: `string`):

Número de la resolución (sin el año). Ejemplo: 34. Combínalo con 'Año' para localizar una resolución concreta.

## `anio` (type: `string`):

Año de la resolución. Ejemplo: 2026.

## `dateFrom` (type: `string`):

Fecha mínima de la resolución (inclusive).

## `dateTo` (type: `string`):

Fecha máxima de la resolución (inclusive).

## `doctrinalText` (type: `string`):

Texto a buscar en el análisis doctrinal de la resolución (BUSQUEDA\_LIBRE\_DOCTRINAL): síntesis, extractos, resumen...

## `sortOrder` (type: `string`):

Orden de los resultados por fecha.

## `section` (type: `string`):

Cuando se extrae el texto de una resolución, parte de la resolución que se devuelve. Por defecto, la resolución completa. 'Fallo' corresponde a la sección de dictamen del Tribunal Constitucional.

## `paragraphs` (type: `integer`):

Si es mayor que 0, en lugar del texto íntegro se devuelven solo los N pasajes más relevantes de la resolución (campo 'paragraphs' y un 'text' resumido). Útil para reducir el volumen de texto al analizar con un LLM. Si es 0 o se omite, se devuelve el texto completo de la sección indicada. Solo aplica cuando se extrae texto ('documentUrls' o EXTRACT\_TEXT activado).

## `paragraphTerms` (type: `string`):

Términos con los que se localizan los pasajes relevantes cuando se usa el 'Modo párrafos'. Si se omite, se usa el término de búsqueda ('searchTerms'). Indícalo cuando extraes texto de 'documentUrls' (sin búsqueda) para que el modo párrafos sepa qué buscar. Ejemplo: 'derecho a la vivienda'.

## `maxResults` (type: `integer`):

Número máximo de resoluciones a devolver por término de búsqueda.

## `proxyConfiguration` (type: `object`):

Configuración de proxy opcional. El Tribunal Constitucional no bloquea las IP de datacenter, por lo que normalmente no es necesario.

## Actor input object example

```json
{
  "searchTerms": [
    "vivienda"
  ],
  "documentUrls": [],
  "searchScope": "0",
  "doctrinalScope": "23",
  "organo": "0",
  "sortOrder": "desc",
  "section": "completa",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "vivienda"
    ],
    "documentUrls": [],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("legaltech/tribunal-constitucional").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["vivienda"],
    "documentUrls": [],
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("legaltech/tribunal-constitucional").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "vivienda"
  ],
  "documentUrls": [],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call legaltech/tribunal-constitucional --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=legaltech/tribunal-constitucional",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tribunal Constitucional",
        "description": "Este actor automatiza la búsqueda de resoluciones en la jurisprudencia del Tribunal Constitucional.",
        "version": "2.0",
        "x-build-id": "JDcFb9K952u8y4t0d"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/legaltech~tribunal-constitucional/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-legaltech-tribunal-constitucional",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/legaltech~tribunal-constitucional/runs": {
            "post": {
                "operationId": "runs-sync-legaltech-tribunal-constitucional",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/legaltech~tribunal-constitucional/run-sync": {
            "post": {
                "operationId": "run-sync-legaltech-tribunal-constitucional",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchTerms": {
                        "title": "Términos de Búsqueda",
                        "maxItems": 50,
                        "type": "array",
                        "description": "Lista de términos a buscar en el texto de la jurisprudencia del Tribunal Constitucional (máx. 50). Cada término se busca por separado y genera sus propios resultados. Si se deja vacío pero se aplican filtros (tipo, fechas, número/año, materia, órgano...), se devuelven TODAS las resoluciones que cumplan los filtros. Úsalo en la primera fase (búsqueda). Ejemplo: [\"vivienda\", \"derecho al honor\"].",
                        "items": {
                            "type": "string"
                        }
                    },
                    "documentUrls": {
                        "title": "Extraer texto de resoluciones concretas",
                        "maxItems": 50,
                        "type": "array",
                        "description": "Lista de URLs de páginas de resolución (campo 'showUrl' devuelto por una búsqueda previa, p. ej. https://hj.tribunalconstitucional.es/HJ/es/Resolucion/Show/32085) de las que extraer el TEXTO ÍNTEGRO. Úsalo en la segunda fase: tras buscar, copia aquí los 'showUrl' que te interesen (máx. 50). Si rellenas este campo, el actor solo extrae el texto de esas resoluciones y NO es necesario indicar 'searchTerms'. Combínalo con 'section', 'paragraphs' y 'paragraphTerms' para acotar la parte del texto devuelta.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "resolutionTypes": {
                        "title": "Tipo de resolución",
                        "type": "array",
                        "description": "Tipo(s) de resolución a incluir en la búsqueda. Si no se selecciona ninguno, se buscan los tres. Valores admitidos: SENTENCIA, AUTO, DECLARACION.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "SENTENCIA",
                                "AUTO",
                                "DECLARACION"
                            ],
                            "enumTitles": [
                                "Sentencia",
                                "Auto",
                                "Declaración"
                            ]
                        }
                    },
                    "searchScope": {
                        "title": "Ámbito de la búsqueda libre",
                        "enum": [
                            "0",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5",
                            "6",
                            "7",
                            "8",
                            "9"
                        ],
                        "type": "string",
                        "description": "Parte de la resolución sobre la que se busca el texto introducido en 'Términos de Búsqueda'. Por defecto, todo el texto de la resolución.",
                        "default": "0"
                    },
                    "tipoRecurso": {
                        "title": "Tipo de proceso",
                        "type": "array",
                        "description": "Tipo(s) de proceso constitucional (TIPO_RECURSO). Si no se selecciona ninguno, se buscan todos.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "3",
                                "7",
                                "1",
                                "10",
                                "2",
                                "12",
                                "14",
                                "4",
                                "5",
                                "11",
                                "21",
                                "8",
                                "20",
                                "19",
                                "9"
                            ],
                            "enumTitles": [
                                "Recurso de amparo",
                                "Recurso de amparo electoral",
                                "Recurso de inconstitucionalidad",
                                "Recurso previo de inconstitucionalidad",
                                "Cuestión de inconstitucionalidad",
                                "Cuestión interna de inconstitucionalidad",
                                "Conflicto positivo de competencia",
                                "Conflicto negativo de competencia",
                                "Conflicto entre órganos constitucionales",
                                "Conflicto en defensa de la autonomía local",
                                "Conflicto en defensa de la autonomía foral",
                                "Impugnación de disposiciones autonómicas",
                                "Recurso contra normas forales fiscales",
                                "Cuestión prejudicial de validez sobre normas forales fiscales",
                                "Requerimiento sobre tratados internacionales"
                            ]
                        }
                    },
                    "materia": {
                        "title": "Materia",
                        "type": "array",
                        "description": "Materia(s) de la resolución (MATERIA). Si no se selecciona ninguna, se buscan todas.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5",
                                "6",
                                "8",
                                "9"
                            ],
                            "enumTitles": [
                                "Civil",
                                "Contencioso-Administrativo",
                                "Electoral",
                                "Militar",
                                "Parlamentario",
                                "Penal",
                                "Social",
                                "Otros"
                            ]
                        }
                    },
                    "doctrinalScope": {
                        "title": "Ámbito del análisis doctrinal",
                        "enum": [
                            "23",
                            "6",
                            "7",
                            "8",
                            "9"
                        ],
                        "type": "string",
                        "description": "Parte del análisis doctrinal sobre la que se busca el 'Texto en análisis doctrinal'. Por defecto, todos los campos.",
                        "default": "23"
                    },
                    "organo": {
                        "title": "Órgano",
                        "enum": [
                            "0",
                            "1",
                            "3",
                            "4",
                            "5",
                            "6",
                            "7",
                            "8",
                            "2",
                            "9"
                        ],
                        "type": "string",
                        "description": "Órgano del Tribunal Constitucional que dictó la resolución. Si no se indica, se buscan todos.",
                        "default": "0"
                    },
                    "numero": {
                        "title": "Número de resolución",
                        "type": "string",
                        "description": "Número de la resolución (sin el año). Ejemplo: 34. Combínalo con 'Año' para localizar una resolución concreta."
                    },
                    "anio": {
                        "title": "Año de resolución",
                        "type": "string",
                        "description": "Año de la resolución. Ejemplo: 2026."
                    },
                    "dateFrom": {
                        "title": "Fecha desde",
                        "type": "string",
                        "description": "Fecha mínima de la resolución (inclusive)."
                    },
                    "dateTo": {
                        "title": "Fecha hasta",
                        "type": "string",
                        "description": "Fecha máxima de la resolución (inclusive)."
                    },
                    "doctrinalText": {
                        "title": "Texto en análisis doctrinal",
                        "type": "string",
                        "description": "Texto a buscar en el análisis doctrinal de la resolución (BUSQUEDA_LIBRE_DOCTRINAL): síntesis, extractos, resumen..."
                    },
                    "sortOrder": {
                        "title": "Orden",
                        "enum": [
                            "desc",
                            "asc"
                        ],
                        "type": "string",
                        "description": "Orden de los resultados por fecha.",
                        "default": "desc"
                    },
                    "section": {
                        "title": "Sección a extraer",
                        "enum": [
                            "completa",
                            "antecedentes",
                            "fundamentos",
                            "fallo",
                            "votos"
                        ],
                        "type": "string",
                        "description": "Cuando se extrae el texto de una resolución, parte de la resolución que se devuelve. Por defecto, la resolución completa. 'Fallo' corresponde a la sección de dictamen del Tribunal Constitucional.",
                        "default": "completa"
                    },
                    "paragraphs": {
                        "title": "Modo párrafos (número de pasajes)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Si es mayor que 0, en lugar del texto íntegro se devuelven solo los N pasajes más relevantes de la resolución (campo 'paragraphs' y un 'text' resumido). Útil para reducir el volumen de texto al analizar con un LLM. Si es 0 o se omite, se devuelve el texto completo de la sección indicada. Solo aplica cuando se extrae texto ('documentUrls' o EXTRACT_TEXT activado)."
                    },
                    "paragraphTerms": {
                        "title": "Términos para localizar los pasajes",
                        "type": "string",
                        "description": "Términos con los que se localizan los pasajes relevantes cuando se usa el 'Modo párrafos'. Si se omite, se usa el término de búsqueda ('searchTerms'). Indícalo cuando extraes texto de 'documentUrls' (sin búsqueda) para que el modo párrafos sepa qué buscar. Ejemplo: 'derecho a la vivienda'."
                    },
                    "maxResults": {
                        "title": "Número máximo de resultados",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Número máximo de resoluciones a devolver por término de búsqueda."
                    },
                    "proxyConfiguration": {
                        "title": "Configuración de Proxy",
                        "type": "object",
                        "description": "Configuración de proxy opcional. El Tribunal Constitucional no bloquea las IP de datacenter, por lo que normalmente no es necesario."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
