# Fiscalia (`legaltech/fiscalia`) Actor

Busca Circulares, Instrucciones y Consultas de la Fiscalía General del Estado publicadas en BOE.es, con filtros por tipo, título, texto, año, número y materia.

- **URL**: https://apify.com/legaltech/fiscalia.md
- **Developed by:** [Miguel González](https://apify.com/legaltech) (community)
- **Categories:** Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 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

## ⚖️ fiscalia - Doctrina de la Fiscalía General del Estado

Actor de [Apify](https://apify.com) que automatiza la búsqueda de **Circulares, Instrucciones y Consultas** de la **Fiscalía General del Estado**, publicadas en el buscador de doctrina de [BOE.es](https://www.boe.es/buscar/fiscalia.php). Permite filtrar por tipo de documento, título, texto completo, año, número y materia jurídica.

Para cada documento encontrado, el actor extrae su referencia, tipo, número/año y fecha. Además, en una segunda ejecución puedes pedirle que **descargue el texto completo** de documentos concretos (campo `documentIds`) junto con su comentario de vigencia, materias y referencias normativas anteriores.

### ✨ Características

- 🔎 Búsqueda por hasta **4 términos** de texto completo por ejecución, con operadores booleanos (`Y`, `O`, `NO`, `PROXn`).
- 🧰 Filtros: tipo de documento (Circular/Instrucción/Consulta), título, año, número y materia jurídica (25 áreas).
- ↕️ Ordenación por año (más recientes o más antiguos primero).
- 📄 Extracción bajo demanda del **texto completo**, la **vigencia** y las **materias** de documentos concretos.
- 🔗 Enlaces estables al documento (`documentUrl`) y a su PDF oficial (`pdfUrl`).
- ⚡ Vía HTTP directa y ligera: BOE.es no exige sesión ni bloquea IP de datacenter (a diferencia del buscador de sentencias del CENDOJ), por lo que no hace falta proxy residencial ni impersonación de navegador. Playwright actúa solo como backup ante fallos puntuales.

### 📥 Entrada (Input)

La entrada se define mediante un objeto JSON. Debes indicar **al menos uno** de estos campos: algún criterio de búsqueda (`searchTerms`, `titulo`, `tipos`, `materias`, `anno` o `numero`) o `documentIds` (para extraer el texto de documentos concretos).

| Campo | Tipo | Descripción |
| --- | --- | --- |
| `searchTerms` | `array<string>` | Términos a buscar en el **texto completo** de los documentos (**máx. 4**). Admite [operadores booleanos](#-operadores-de-búsqueda). Si se deja vacío, se listan los documentos que cumplan el resto de filtros sin restricción de texto. |
| `titulo` | `string` | Busca solo en el **título** de la disposición (más preciso que `searchTerms`). |
| `tipos` | `array<string>` | Tipo de documento: `C` (Circular), `I` (Instrucción), `Q` (Consulta). Por defecto, los tres. |
| `materias` | `array<string>` | IDs de materia jurídica (ver [tabla de referencia](#-tabla-de-referencia-materias)). Por defecto, todas. |
| `anno` | `string` | Año de la disposición (ej. `"2020"`). |
| `numero` | `string` | Número de la disposición (ej. `"5"`). Combínalo con `anno` para localizar una disposición concreta. |
| `documentIds` | `array<string>` | Referencias (campo `reference` de resultados anteriores, ej. `"FIS-C-2011-00005"`) de las que extraer el **texto completo** (máx. 50). Úsalo en una segunda ejecución tras una búsqueda. |
| `maxResults` | `integer` | Máximo de documentos por combinación de búsqueda (1–2000). Por defecto, `50`. |
| `paragraphs` | `integer` | Si es mayor que 0, al extraer un documento (`documentIds`) devuelve solo ese número de párrafos relevantes en vez del texto íntegro. Requiere `paragraphTerms`. Por defecto, `0` (texto completo). |
| `paragraphTerms` | `string` | Términos con los que localizar los párrafos en el modo párrafos. |
| `sortOrder` | `string` | `desc` (más recientes primero, por defecto) o `asc` (más antiguos primero). |
| `proxyConfiguration` | `object` | Configuración de proxy. No es necesaria para este sitio; desactivada por defecto. |

> ⚠️ **Nota interna sobre `tipos` y `materias`.** El formulario de BOE.es solo admite **un valor** de tipo y un valor de materia por consulta (son `<select>` simples, no multiselección). Si se indica más de uno en cualquiera de los dos campos, el actor **repite la búsqueda** una vez por cada combinación de `searchTerms` × `tipos` × `materias` (máximo 12 combinaciones por ejecución). Para no multiplicar innecesariamente las búsquedas, indica como mucho 1-2 valores en cada uno salvo que realmente necesites comparar varios.

### 🧮 Operadores de búsqueda

El campo `searchTerms` (y `titulo`) admite los mismos **operadores booleanos** que el resto de buscadores de BOE.es:

| Operador (escribe) | Equivalente BOE.es | Significado | Ejemplo |
| --- | --- | --- | --- |
| `AND` | `Y` | Ambos términos deben aparecer. | `extranjería AND expulsión` |
| `OR` | `O` | Basta con que aparezca uno de los términos. | `menor OR menores` |
| `NOT` | `NO` | Excluye las disposiciones con ese término. | `violencia NOT laboral` |
| `NEARn` | `PROXn` | Los términos están a menos de `n` palabras de distancia. | `expulsión NEAR10 extranjero` |

Notas:

- Los operadores deben escribirse en **MAYÚSCULAS** como palabra completa; los términos en minúsculas se tratan como texto literal.
- Puedes usar **comillas** para frases exactas: `"unidad especializada"`.
- **Exclusión de frases con `NOT`/`NO`:** BOE.es solo excluye la **palabra inmediatamente siguiente** al operador. Para excluir una frase de varias palabras, **enciérrala entre comillas**: el actor la expande automáticamente a una exclusión por cada palabra significativa (p. ej. `NOT "medidas cautelares"` se envía como `NO medidas NO cautelares`).

#### 🤖 Uso con Claude Code / MCP de Apify (lenguaje natural)

Este actor está pensado para integrarse en **Claude Code** a través del **MCP de Apify**: el usuario describe su necesidad en lenguaje natural y el asistente construye automáticamente `searchTerms` y el resto de filtros, sin que el usuario tenga que conocer los operadores ni los IDs internos.

> ⚠️ **Límite de términos: máximo 4 por ejecución.** Combínalos con operadores booleanos en vez de multiplicar entradas.

Directrices para que el asistente (LLM) genere la consulta:

- **Tipo de documento** (`tipos`): "circular/circulares" → `C`, "instrucción/instrucciones" → `I`, "consulta/consultas" → `Q`. Si el usuario pide "doctrina" en general sin especificar, no rellenes `tipos` (busca los tres).
- **Materia** (`materias`): mapea la petición del usuario al **ID exacto** de la [tabla de materias](#-tabla-de-referencia-materias). ⚠️ **Los IDs son opacos y no siguen el orden alfabético: NO los adivines**, cópialos de la tabla.
- **Año / Número** (`anno` / `numero`): "de 2020" → `anno: "2020"`; "la Circular 5/2011" → `numero: "5"`, `anno: "2011"`.
- **Texto libre vs. título**: si el usuario busca por un concepto o materia dentro del contenido, usa `searchTerms`; si busca por palabras del **título** de la disposición, usa `titulo`.
- **Texto completo** (`documentIds`): cuando el usuario pida "descárgame/analiza el texto de esta circular/instrucción/consulta" tras una búsqueda, relanza el actor con `documentIds` = las `reference` de los documentos elegidos.

Ejemplos de traducción de lenguaje natural a filtros:

| El usuario pide... | Filtros generados |
| --- | --- |
| "Circulares sobre extranjería" | `tipos: ["C"]`, `materias: ["8"]` |
| "Consultas de violencia de género" | `tipos: ["Q"]`, `materias: ["21"]` |
| "Instrucciones de 2015 sobre menores" | `tipos: ["I"]`, `anno: "2015"`, `searchTerms: ["menor OR menores"]` |
| "La Circular 5/2011" | `tipos: ["C"]`, `numero: "5"`, `anno: "2011"` |
| "Doctrina sobre criminalidad informática, la más reciente primero" | `materias: ["19"]`, `sortOrder: "desc"` |

#### 🏛️ Tabla de referencia (`materias`)

| ID | Materia |
| --- | --- |
| `1` | Cooperación internacional |
| `2` | Derecho Administrativo y proceso contencioso-administrativo |
| `3` | Derecho Civil |
| `4` | Derecho Constitucional |
| `5` | Derecho Penal |
| `6` | Derecho Penitenciario |
| `7` | Derecho Procesal Penal |
| `8` | Extranjería |
| `9` | Ministerio Fiscal |
| `10` | Responsabilidad Penal de Menores |
| `11` | Social |
| `12` | Derecho de la Unión Europea |
| `13` | Protección jurídica del menor |
| `14` | Protección jurídica de las personas con discapacidad |
| `15` | Consumidores y usuarios |
| `16` | Derecho Procesal Civil |
| `17` | Siniestralidad laboral |
| `18` | Medio ambiente |
| `19` | Criminalidad informática |
| `20` | Delitos económicos |
| `21` | Violencia de Género |
| `22` | Seguridad vial |
| `23` | Fiscalía del Tribunal de Cuentas |
| `24` | Protección de datos de carácter personal |
| `25` | Delitos de Odio |

> ⚠️ Verifica siempre el ID contra esta tabla antes de llamar al actor: no siguen el orden alfabético (p. ej. "Extranjería" es `8`, no un número bajo por ser de las primeras letras).

### 📤 Salida (Output)

#### Modo búsqueda (`searchTerms` / `titulo` / `tipos` / `materias` / `anno` / `numero`)

```json
{
    "searchTerm": null,
    "tipo": "Circular",
    "numero": "5",
    "anio": "2011",
    "reference": "FIS-C-2011-00005",
    "title": "Circular 5/2011, de 2 de noviembre, sobre criterios para la unidad de actuación especializada del Ministerio Fiscal en materia de extranjería e inmigración.",
    "dateISO": "2011-11-02",
    "materiaFiltro": "Extranjería",
    "documentUrl": "https://www.boe.es/buscar/doc.php?id=FIS-C-2011-00005",
    "pdfUrl": "https://www.boe.es/buscar/abrir_fiscalia.php?id=FIS-C-2011-00005.pdf"
}
````

| Campo | Descripción |
| --- | --- |
| `searchTerm` | Término de `searchTerms` que originó el resultado (`null` si la búsqueda no usó texto libre). |
| `tipo` | `Circular`, `Instrucción` o `Consulta`. |
| `numero` / `anio` | Número y año de la disposición (ej. Circular `5`/`2011`). |
| `reference` | Referencia interna del documento (ej. `FIS-C-2011-00005`); úsala en `documentIds` para extraer su texto. |
| `title` | Título completo de la disposición. |
| `dateISO` | Fecha de la disposición en formato `YYYY-MM-DD` (derivada del título). |
| `materiaFiltro` | Materia por la que se filtró la búsqueda (`null` si no se filtró por materia). |
| `documentUrl` | Enlace a la ficha del documento en BOE.es. |
| `pdfUrl` | Enlace de descarga del PDF oficial. |

#### Modo extracción (`documentIds`)

```json
{
    "reference": "FIS-C-2011-00005",
    "tipo": "Circular",
    "numero": "5",
    "anio": "2011",
    "title": "Circular 5/2011, de 2 de noviembre, sobre criterios para la unidad de actuación especializada del Ministerio Fiscal en materia de extranjería e inmigración.",
    "dateISO": "2011-11-02",
    "vigencia": "En vigor, salvo las modificaciones reseñadas que, en particular, afectan al contenido de las conclusiones relativas al art. 89 del Código Penal...",
    "materias": ["Derecho Penal", "Extranjería"],
    "referenciasAnteriores": ["Arts. 8, 20.6, 31 bis... de la Ley Orgánica 10/1995, de 23 de noviembre, del Código Penal. BOE-A-1995-25444", "..."],
    "documentUrl": "https://www.boe.es/buscar/doc.php?id=FIS-C-2011-00005",
    "pdfUrl": "https://www.boe.es/buscar/abrir_fiscalia.php?id=FIS-C-2011-00005.pdf",
    "text": "ÍNDICE\n\nI. Introducción: Contrabando de personas...\n\n..."
}
```

| Campo | Descripción |
| --- | --- |
| `vigencia` | Comentario de vigencia (si BOE.es lo indica): modificaciones posteriores relevantes. `null` si no hay comentario. |
| `materias` | Lista de materias jurídicas asociadas al documento (etiquetas legibles). |
| `referenciasAnteriores` | Normas y disposiciones anteriores citadas como referencia (lista de texto). |
| `text` | Texto completo del documento (o los párrafos relevantes, si `paragraphs > 0`). |
| `paragraphs` | (Solo si `paragraphs > 0` y hay coincidencias) Lista de los pasajes extraídos. |

> 💡 A diferencia del buscador de sentencias del CENDOJ, aquí el texto se extrae directamente del **HTML** de la ficha (`doc.php`), no de un PDF: es más rápido y no requiere descargar/parsear binarios.

### 📝 Notas

- El volumen total de doctrina de la Fiscalía General del Estado es de unos cientos de documentos (muy por debajo del límite técnico de 2000 resultados por consulta de BOE.es).
- No se aplica anonimización de nombres: a diferencia de las sentencias judiciales, las Circulares, Instrucciones y Consultas son documentos interpretativos de la Fiscalía General del Estado y no suelen identificar a partes de procedimientos concretos.

### Ecosistema legaltech — actores relacionados

Este actor forma parte de una colección de actores para búsqueda jurídica española y europea. Si la consulta del usuario requiere otras fuentes, usa el actor correspondiente sin pedirle que busque en Apify Store:

| Actor | Fuente | Tipo de documentos |
|-------|--------|--------------------|
| **`legaltech/fiscalia`** ← este actor | Fiscalía General del Estado (BOE.es) | Circulares, Instrucciones y Consultas de doctrina |
| **`legaltech/cendoj`** | CENDOJ (Consejo General del Poder Judicial) | Sentencias y autos del sistema judicial español |
| **`legaltech/aepd`** | AEPD | Resoluciones y guías de protección de datos |
| **`legaltech/tribunal-constitucional`** | Tribunal Constitucional de España | Sentencias del TC, recursos de amparo, cuestiones de inconstitucionalidad |
| **`legaltech/tjue`** | Tribunal de Justicia de la UE (CURIA) | Sentencias, autos y conclusiones del TJUE |

#### Guía de derivación

- **Doctrina, criterios de actuación o consultas del Ministerio Fiscal** → `legaltech/fiscalia`
- **Jurisprudencia civil, penal, laboral, contencioso-administrativa española** → `legaltech/cendoj`
- **Protección de datos, RGPD, LOPDGDD, sanciones de la AEPD** → `legaltech/aepd`
- **Derechos fundamentales, inconstitucionalidad, recursos de amparo** → `legaltech/tribunal-constitucional`
- **Derecho europeo, directivas, reglamentos UE, cuestiones prejudiciales** → `legaltech/tjue`

# Actor input Schema

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

Lista de términos a buscar en el TEXTO COMPLETO de las Circulares, Instrucciones y Consultas de la Fiscalía General del Estado. Máximo 4 términos por ejecución. Admite operadores booleanos dentro de cada término: Y/AND (ambos), O/OR (cualquiera), NO/NOT (excluir) y PROXn/NEARn (proximidad, ej. PROX20). Ejemplo: "violencia de género" AND menor. Si se deja vacío, se listan los documentos que cumplan el resto de filtros (tipo, materia, año, número, título) sin restricción de texto.

## `titulo` (type: `string`):

Busca solo en el TÍTULO de la disposición (más preciso que 'Términos de Búsqueda', que busca en todo el texto). Ejemplo: 'extranjería'.

## `tipos` (type: `array`):

Tipo de documento de doctrina: Circular, Instrucción o Consulta. Si no se selecciona ninguno, se buscan los tres tipos. Nota interna: el campo TIPO.ID del buscador de BOE.es admite un único valor por consulta; si se seleccionan varios tipos, el actor repite la búsqueda una vez por cada uno.

## `materias` (type: `array`):

Área jurídica de la disposición. Los IDs son opacos: NO los adivines, usa exactamente los de esta lista (enumTitles). Si no se selecciona ninguna, se buscan todas las materias. Nota interna: el campo MATERIA.ID admite un único valor por consulta; si se seleccionan varias materias, el actor repite la búsqueda una vez por cada una.

## `anno` (type: `string`):

Año de la disposición (ej. "2020"). Si se deja vacío, se buscan todos los años.

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

Número de la circular/instrucción/consulta (ej. "5"). Combínalo con 'Año' para localizar una disposición concreta (ej. Circular 5/2011: numero=5, anno=2011).

## `documentIds` (type: `array`):

Lista de referencias (campo `reference` de resultados anteriores, ej. "FIS-C-2011-00005") de las que quieres descargar el texto completo, la vigencia, las materias y las referencias anteriores. Úsalo en una segunda ejecución tras una búsqueda: copia aquí las referencias de los documentos que te interesen. Si rellenas este campo, no es necesario rellenar los filtros de búsqueda. Límite de 50 por ejecución.

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

Número máximo de documentos a devolver por cada combinación de búsqueda (searchTerms × tipos × materias). El total de doctrina publicada es de unos cientos de documentos, muy por debajo del límite técnico de BOE.es (2000 por consulta).

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

Si es mayor que 0, al extraer el texto de un documento (campo `documentIds`) se devuelven solo ese número de PÁRRAFOS relevantes (los pasajes donde aparecen los términos indicados en 'Términos para los párrafos') en lugar del texto íntegro. Ideal para análisis con un LLM (menos tokens). 0 = texto completo.

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

Términos con los que localizar los pasajes en el modo párrafos (obligatorio si 'paragraphs' > 0, ya que en el modo `documentIds` no hay un término de búsqueda previo). Ejemplo: "expulsión sustitutiva".

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

Criterio de ordenación de los resultados por año.

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

Configuración de proxy (opcional). BOE.es no bloquea IP de datacenter ni exige sesión, así que no hace falta proxy residencial; actívalo solo si detectas bloqueos.

## Actor input object example

```json
{
  "searchTerms": [],
  "tipos": [],
  "materias": [],
  "documentIds": [],
  "maxResults": 50,
  "paragraphs": 0,
  "sortOrder": "desc",
  "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": [],
    "tipos": [],
    "materias": [],
    "documentIds": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("legaltech/fiscalia").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": [],
    "tipos": [],
    "materias": [],
    "documentIds": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("legaltech/fiscalia").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": [],
  "tipos": [],
  "materias": [],
  "documentIds": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call legaltech/fiscalia --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Fiscalia",
        "description": "Busca Circulares, Instrucciones y Consultas de la Fiscalía General del Estado publicadas en BOE.es, con filtros por tipo, título, texto, año, número y materia.",
        "version": "0.0",
        "x-build-id": "iBwaLQxCMWhqWisPh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/legaltech~fiscalia/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-legaltech-fiscalia",
                "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~fiscalia/runs": {
            "post": {
                "operationId": "runs-sync-legaltech-fiscalia",
                "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~fiscalia/run-sync": {
            "post": {
                "operationId": "run-sync-legaltech-fiscalia",
                "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 (texto completo)",
                        "maxItems": 4,
                        "type": "array",
                        "description": "Lista de términos a buscar en el TEXTO COMPLETO de las Circulares, Instrucciones y Consultas de la Fiscalía General del Estado. Máximo 4 términos por ejecución. Admite operadores booleanos dentro de cada término: Y/AND (ambos), O/OR (cualquiera), NO/NOT (excluir) y PROXn/NEARn (proximidad, ej. PROX20). Ejemplo: \"violencia de género\" AND menor. Si se deja vacío, se listan los documentos que cumplan el resto de filtros (tipo, materia, año, número, título) sin restricción de texto.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "titulo": {
                        "title": "Título",
                        "type": "string",
                        "description": "Busca solo en el TÍTULO de la disposición (más preciso que 'Términos de Búsqueda', que busca en todo el texto). Ejemplo: 'extranjería'."
                    },
                    "tipos": {
                        "title": "Tipo de documento",
                        "type": "array",
                        "description": "Tipo de documento de doctrina: Circular, Instrucción o Consulta. Si no se selecciona ninguno, se buscan los tres tipos. Nota interna: el campo TIPO.ID del buscador de BOE.es admite un único valor por consulta; si se seleccionan varios tipos, el actor repite la búsqueda una vez por cada uno.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "C",
                                "I",
                                "Q"
                            ],
                            "enumTitles": [
                                "Circular",
                                "Instrucción",
                                "Consulta"
                            ]
                        }
                    },
                    "materias": {
                        "title": "Materias",
                        "type": "array",
                        "description": "Área jurídica de la disposición. Los IDs son opacos: NO los adivines, usa exactamente los de esta lista (enumTitles). Si no se selecciona ninguna, se buscan todas las materias. Nota interna: el campo MATERIA.ID admite un único valor por consulta; si se seleccionan varias materias, el actor repite la búsqueda una vez por cada una.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5",
                                "6",
                                "7",
                                "8",
                                "9",
                                "10",
                                "11",
                                "12",
                                "13",
                                "14",
                                "15",
                                "16",
                                "17",
                                "18",
                                "19",
                                "20",
                                "21",
                                "22",
                                "23",
                                "24",
                                "25"
                            ],
                            "enumTitles": [
                                "Cooperación internacional",
                                "Derecho Administrativo y proceso contencioso-administrativo",
                                "Derecho Civil",
                                "Derecho Constitucional",
                                "Derecho Penal",
                                "Derecho Penitenciario",
                                "Derecho Procesal Penal",
                                "Extranjería",
                                "Ministerio Fiscal",
                                "Responsabilidad Penal de Menores",
                                "Social",
                                "Derecho de la Unión Europea",
                                "Protección jurídica del menor",
                                "Protección jurídica de las personas con discapacidad",
                                "Consumidores y usuarios",
                                "Derecho Procesal Civil",
                                "Siniestralidad laboral",
                                "Medio ambiente",
                                "Criminalidad informática",
                                "Delitos económicos",
                                "Violencia de Género",
                                "Seguridad vial",
                                "Fiscalía del Tribunal de Cuentas",
                                "Protección de datos de carácter personal",
                                "Delitos de Odio"
                            ]
                        }
                    },
                    "anno": {
                        "title": "Año",
                        "type": "string",
                        "description": "Año de la disposición (ej. \"2020\"). Si se deja vacío, se buscan todos los años."
                    },
                    "numero": {
                        "title": "Número",
                        "type": "string",
                        "description": "Número de la circular/instrucción/consulta (ej. \"5\"). Combínalo con 'Año' para localizar una disposición concreta (ej. Circular 5/2011: numero=5, anno=2011)."
                    },
                    "documentIds": {
                        "title": "Extraer texto de documentos concretos",
                        "maxItems": 50,
                        "type": "array",
                        "description": "Lista de referencias (campo `reference` de resultados anteriores, ej. \"FIS-C-2011-00005\") de las que quieres descargar el texto completo, la vigencia, las materias y las referencias anteriores. Úsalo en una segunda ejecución tras una búsqueda: copia aquí las referencias de los documentos que te interesen. Si rellenas este campo, no es necesario rellenar los filtros de búsqueda. Límite de 50 por ejecución.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Número máximo de documentos",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Número máximo de documentos a devolver por cada combinación de búsqueda (searchTerms × tipos × materias). El total de doctrina publicada es de unos cientos de documentos, muy por debajo del límite técnico de BOE.es (2000 por consulta).",
                        "default": 50
                    },
                    "paragraphs": {
                        "title": "Modo párrafos (pasajes clave)",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Si es mayor que 0, al extraer el texto de un documento (campo `documentIds`) se devuelven solo ese número de PÁRRAFOS relevantes (los pasajes donde aparecen los términos indicados en 'Términos para los párrafos') en lugar del texto íntegro. Ideal para análisis con un LLM (menos tokens). 0 = texto completo.",
                        "default": 0
                    },
                    "paragraphTerms": {
                        "title": "Términos para los párrafos",
                        "type": "string",
                        "description": "Términos con los que localizar los pasajes en el modo párrafos (obligatorio si 'paragraphs' > 0, ya que en el modo `documentIds` no hay un término de búsqueda previo). Ejemplo: \"expulsión sustitutiva\"."
                    },
                    "sortOrder": {
                        "title": "Ordenar por año",
                        "enum": [
                            "desc",
                            "asc"
                        ],
                        "type": "string",
                        "description": "Criterio de ordenación de los resultados por año.",
                        "default": "desc"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Configuración de proxy (opcional). BOE.es no bloquea IP de datacenter ni exige sesión, así que no hace falta proxy residencial; actívalo solo si detectas bloqueos.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
