# AEPD (`legaltech/aepd`) Actor

Este actor automatiza la búsqueda en el buscador de la AEPD y la extracción del texto de sus documentos.

- **URL**: https://apify.com/legaltech/aepd.md
- **Developed by:** [Miguel González](https://apify.com/legaltech) (community)
- **Categories:** Automation
- **Stats:** 2 total users, 1 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

## AEPD — Buscador de resoluciones e informes

Actor de [Apify](https://apify.com) que automatiza la búsqueda en el buscador de la **Agencia Española de Protección de Datos** ([aepd.es/buscador](https://www.aepd.es/buscador)). Permite buscar resoluciones, informes, guías, notas de prensa y otros documentos por texto libre y filtrarlos por tipo de documento, concepto jurídico, sector y rango de años.

Para cada documento encontrado extrae sus metadatos (título, tipo, fecha, URL) y el resumen indexado por Solr. Además puede **extraer el texto íntegro** de páginas HTML o usar el resumen de Solr para los PDFs de resoluciones.

### Características

- Búsqueda por múltiples términos en una sola ejecución (hasta 50).
- Filtros: tipo de documento (resolución, informe, guía…), concepto jurídico, sector y rango de años.
- Metadatos completos: título, tipo inferido, fecha ISO, URL y resumen (extracto de Solr).
- Extracción bajo demanda del texto íntegro de páginas HTML (`documentUrls`).
- Modo "párrafos": devuelve solo los N pasajes más relevantes (útil con LLMs).

### Entrada (Input)

Debes indicar **al menos uno** de estos campos: `searchTerms`, `documentUrls` o un filtro de faceta (`documentTypes`, `conceptos`, `sectorial`, `fechaDesde`/`fechaHasta`).

| Campo | Tipo | Descripción |
|---|---|---|
| `searchTerms` | `string[]` | Términos a buscar en texto libre (máx. 50). Cada término se ejecuta por separado. Si se deja vacío con filtros activos, devuelve todos los documentos que los cumplan. |
| `documentUrls` | `string[]` | URLs de páginas de la AEPD de las que extraer el texto íntegro (máx. 50). Las resoluciones son PDFs; para esas se usa el resumen de Solr. |
| `documentTypes` | `string[]` | Tipo de documento. Se acepta el nombre normalizado (`resolucion`, `informe`…) o el código numérico de la faceta (`1387`, `1361`…). |
| `conceptos` | `string[]` | IDs numéricos del concepto jurídico (p. ej. `1568` = Videovigilancia, `1513` = Privacidad). |
| `sectorial` | `string[]` | IDs numéricos del sector (p. ej. `2404` = Financiero, `2398` = Información y comunicaciones). |
| `fechaDesde` | `string` | Año mínimo de publicación (formato `YYYY`). |
| `fechaHasta` | `string` | Año máximo de publicación (formato `YYYY`). |
| `extractText` | `boolean` | Si `true`, descarga el texto íntegro de cada resultado. Por defecto `false`. |
| `paragraphs` | `integer` | Si > 0, devuelve solo los N pasajes más relevantes en lugar del texto íntegro. |
| `paragraphTerms` | `string` | Términos con los que localizar los pasajes (por defecto, el término de búsqueda). |
| `maxResults` | `integer` | Máximo de documentos por término. Por defecto `20`. |

#### Ejemplos de input

**Buscar resoluciones sobre videovigilancia:**
```json
{
  "searchTerms": ["videovigilancia"],
  "documentTypes": ["1387"],
  "maxResults": 20
}
````

**Resoluciones de 2023–2024 con extracción de párrafos:**

```json
{
  "searchTerms": ["reconocimiento facial"],
  "documentTypes": ["1387"],
  "fechaDesde": "2023",
  "fechaHasta": "2024",
  "extractText": true,
  "paragraphs": 3
}
```

**Solo por filtros (sin texto libre) — todos los informes de 2024:**

```json
{
  "documentTypes": ["1361"],
  "fechaDesde": "2024",
  "fechaHasta": "2024",
  "maxResults": 50
}
```

**Extraer texto de documentos concretos:**

```json
{
  "documentUrls": [
    "https://www.aepd.es/prensa-y-comunicacion/notas-de-prensa/mi-nota.html"
  ],
  "paragraphs": 2,
  "paragraphTerms": "videovigilancia"
}
```

### Salida (Output)

Cada documento se guarda en el dataset con esta forma:

```json
{
  "searchTerm": "videovigilancia",
  "title": "PS-00487-2023",
  "documentType": "RESOLUCION",
  "date": "2024-12-30",
  "url": "https://www.aepd.es/documento/ps-00487-2023.pdf",
  "isPdf": true,
  "summary": "Expediente N.º: EXP202307000 RESOLUCIÓN DE PROCEDIMIENTO SANCIONADOR..."
}
```

### Tipos de documento y códigos de faceta

| Código | Nombre |
|--------|--------|
| `1387` | RESOLUCIÓN |
| `1361` | INFORME |
| `1336` | DISCURSOS/INTERVENCIONES PÚBLICAS |
| `1372` | NOTAS/COMUNICADOS DE PRENSA |
| `1379` | PREGUNTAS FRECUENTES |
| `1377` | PÁGINA WEB |
| `1324` | BLOG |
| `1359` | GUÍAS |
| `1360` | INFOGRAFÍA |
| `1394` | VIDEOS |
| `1382` | PUBLICACIONES |
| `1371` | NOTAS TÉCNICAS |
| `1375` | OTROS |
| `2525` | CRITERIOS JURÍDICOS |

### Conceptos jurídicos y códigos de faceta

Usa estos IDs en el campo `conceptos` para filtrar por materia jurídica.

| Código | Concepto | Docs |
|--------|----------|-----:|
| `1487` | Finanzas, fiscalidad y hacienda pública | 8.721 |
| `1568` | Videovigilancia | 7.164 |
| `1513` | Privacidad y principios de protección de datos | 6.192 |
| `1509` | Licitud del tratamiento (bases legitimadoras) | 5.465 |
| `1490` | Internet y nuevas tecnologías | 3.534 |
| `1550` | Telecomunicaciones | 3.262 |
| `1418` | Categorías especiales de datos | 2.003 |
| `1519` | Publicidad y marketing | 1.519 |
| `1594` | Comunicación de datos (Cesiones) | 876 |
| `1546` | Seguridad/Ciberseguridad | 873 |
| `1432` | Comercio y consumo | 795 |
| `1483` | Finalidades específicas | 613 |
| `1449` | Derechos | 553 |
| `1400` | Ámbito laboral y profesional | 361 |
| `1601` | Ficheros | 358 |
| `1500` | Legislación sectorial | 337 |
| `1522` | Reclamaciones, infracciones y sanciones | 310 |
| `1497` | Legislación de protección de datos | 230 |
| `1474` | Educación y menores | 191 |
| `1440` | Datos de carácter personal | 165 |
| `1543` | Responsable del tratamiento | 154 |
| `1412` | Brechas de seguridad | 135 |
| `1478` | Encargado del tratamiento | 135 |
| `1443` | Delegado de Protección de Datos | 77 |
| `1563` | Transparencia y gobierno abierto | 58 |
| `1555` | Transferencias internacionales de datos | 56 |
| `1447` | Delitos en Internet | 36 |
| `1438` | Cumplimiento (compliance) | 28 |
| `1395` | Administración electrónica (e-Administración/e-Government) | 27 |
| `1425` | Censos | 27 |
| `1589` | Buenas prácticas | 26 |
| `1541` | Responsabilidad social corporativa (RSC) | 18 |
| `1427` | Certificaciones y acreditaciones | 15 |
| `1429` | Códigos de conducta | 15 |
| `1406` | Autoridades de control | 14 |
| `1459` | Derechos digitales | 8 |
| `2337` | Aprendizaje automático | 3 |
| `1535` | Relaciones internacionales | 2 |
| `2336` | Algoritmos de entrenamiento | 1 |
| `1435` | Comité Europeo de Protección de Datos (EDPB) | 1 |

### Sectorial y códigos de faceta

Usa estos IDs en el campo `sectorial` para filtrar por sector de actividad.

| Código | Sector | Docs |
|--------|--------|-----:|
| `2404` | Actividades financieras y de seguros | 9.920 |
| `2398` | Información y comunicaciones | 8.432 |
| `2420` | Administración Pública y defensa; Seguridad Social obligatoria | 2.706 |
| `2409` | Actividades profesionales, científicas y técnicas | 2.299 |
| `210` | Actividades sanitarias y de servicios sociales | 2.255 |
| `2430` | Otros servicios | 1.002 |
| `2375` | Suministro de energía eléctrica, gas, vapor y aire acondicionado | 520 |
| `2407` | Actividades inmobiliarias | 451 |
| `2422` | Educación | 448 |
| `2377` | Suministro de agua, saneamiento, gestión de residuos y descontaminación | 265 |
| `2413` | Actividades administrativas y servicios auxiliares | 54 |
| `184` | Transporte y almacenamiento | 45 |
| `2395` | Hostelería | 23 |
| `2386` | Comercio al por mayor y al por menor; reparación de vehículos | 17 |
| `2382` | Construcción | 4 |
| `2350` | Industria manufacturera | 4 |

#### Flujo recomendado en dos fases

**Fase 1 — Búsqueda** (rápida): obtén la lista de documentos con metadatos y el resumen de Solr (~500 chars por documento).

```json
{
  "searchTerms": ["videovigilancia"],
  "documentTypes": ["1387"],
  "fechaDesde": "2024",
  "maxResults": 20
}
```

**Fase 2 — Texto íntegro**: pasa las `url` que quieras analizar en `documentUrls`. El actor descarga cada PDF y devuelve el texto completo (máx. 50 documentos por llamada).

```json
{
  "documentUrls": [
    "https://www.aepd.es/documento/ps-00487-2023.pdf",
    "https://www.aepd.es/documento/ai-00109-2024.pdf"
  ],
  "paragraphs": 3,
  "paragraphTerms": "videovigilancia"
}
```

# Actor input Schema

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

Lista de términos a buscar en el buscador de la AEPD (máx. 50). Cada término se busca por separado. Si se deja vacío pero se aplican filtros (tipo, fecha, concepto…) se devuelven TODOS los documentos que cumplan los filtros. Ejemplo: \["videovigilancia", "consentimiento"].

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

Lista de URLs de documentos de la AEPD (campo 'url' devuelto por una búsqueda previa) de los que extraer el texto íntegro. Úsalo en la segunda fase: tras buscar, copia aquí las 'url' que te interesen (máx. 50). Si rellenas este campo, no es necesario indicar 'searchTerms'. Las páginas HTML se descargan directamente; los PDFs requieren el navegador (Playwright).

## `conceptos` (type: `array`):

Filtra por concepto jurídico usando los IDs numéricos de la faceta de la AEPD. Ejemplos: 1568 = Videovigilancia, 1513 = Privacidad y principios de protección de datos, 1418 = Categorías especiales de datos.

## `sectorial` (type: `array`):

Filtra por sector de actividad usando los IDs numéricos de la faceta de la AEPD. Ejemplos: 2404 = Actividades financieras y de seguros, 2398 = Información y comunicaciones.

## `fechaDesde` (type: `string`):

Año mínimo de publicación del documento (formato YYYY). Ejemplo: '2022'.

## `fechaHasta` (type: `string`):

Año máximo de publicación del documento (formato YYYY). Ejemplo: '2024'.

## `extractText` (type: `boolean`):

Si se activa, descarga el texto íntegro de cada documento encontrado. Para documentos HTML (noticias, guías…) se extrae del HTML. Para PDFs (resoluciones) se usa el resumen de Solr. Por defecto desactivado (la búsqueda es más rápida).

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

Si es mayor que 0, en lugar del texto íntegro se devuelven solo los N pasajes más relevantes del documento (campos 'paragraphs' y 'text' resumido). Útil para reducir el volumen al analizar con un LLM. Solo aplica cuando se extrae texto.

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

Términos con los que se localizan los pasajes relevantes en modo párrafos. Si se omite, se usan los términos de búsqueda. Ejemplo: 'consentimiento expreso menores'.

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

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

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

Configuración de proxy opcional. La AEPD es un sitio público del gobierno; normalmente no es necesario.

## Actor input object example

```json
{
  "searchTerms": [
    "videovigilancia"
  ],
  "documentUrls": [],
  "conceptos": [],
  "sectorial": [],
  "extractText": false,
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "ES"
  }
}
```

# 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": [
        "videovigilancia"
    ],
    "documentUrls": [],
    "conceptos": [],
    "sectorial": [],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "ES"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("legaltech/aepd").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": ["videovigilancia"],
    "documentUrls": [],
    "conceptos": [],
    "sectorial": [],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "ES",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("legaltech/aepd").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": [
    "videovigilancia"
  ],
  "documentUrls": [],
  "conceptos": [],
  "sectorial": [],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "ES"
  }
}' |
apify call legaltech/aepd --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "AEPD",
        "description": "Este actor automatiza la búsqueda en el buscador de la AEPD y la extracción del texto de sus documentos.",
        "version": "2.0",
        "x-build-id": "SgZpRxWpWkKNYKuNA"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/legaltech~aepd/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-legaltech-aepd",
                "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~aepd/runs": {
            "post": {
                "operationId": "runs-sync-legaltech-aepd",
                "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~aepd/run-sync": {
            "post": {
                "operationId": "run-sync-legaltech-aepd",
                "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 buscador de la AEPD (máx. 50). Cada término se busca por separado. Si se deja vacío pero se aplican filtros (tipo, fecha, concepto…) se devuelven TODOS los documentos que cumplan los filtros. Ejemplo: [\"videovigilancia\", \"consentimiento\"].",
                        "items": {
                            "type": "string"
                        }
                    },
                    "documentUrls": {
                        "title": "Extraer texto de documentos concretos",
                        "maxItems": 50,
                        "type": "array",
                        "description": "Lista de URLs de documentos de la AEPD (campo 'url' devuelto por una búsqueda previa) de los que extraer el texto íntegro. Úsalo en la segunda fase: tras buscar, copia aquí las 'url' que te interesen (máx. 50). Si rellenas este campo, no es necesario indicar 'searchTerms'. Las páginas HTML se descargan directamente; los PDFs requieren el navegador (Playwright).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "conceptos": {
                        "title": "Conceptos (IDs de faceta)",
                        "maxItems": 10,
                        "type": "array",
                        "description": "Filtra por concepto jurídico usando los IDs numéricos de la faceta de la AEPD. Ejemplos: 1568 = Videovigilancia, 1513 = Privacidad y principios de protección de datos, 1418 = Categorías especiales de datos.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sectorial": {
                        "title": "Sectorial (IDs de faceta)",
                        "maxItems": 10,
                        "type": "array",
                        "description": "Filtra por sector de actividad usando los IDs numéricos de la faceta de la AEPD. Ejemplos: 2404 = Actividades financieras y de seguros, 2398 = Información y comunicaciones.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "fechaDesde": {
                        "title": "Fecha desde (año)",
                        "type": "string",
                        "description": "Año mínimo de publicación del documento (formato YYYY). Ejemplo: '2022'."
                    },
                    "fechaHasta": {
                        "title": "Fecha hasta (año)",
                        "type": "string",
                        "description": "Año máximo de publicación del documento (formato YYYY). Ejemplo: '2024'."
                    },
                    "extractText": {
                        "title": "Extraer texto íntegro",
                        "type": "boolean",
                        "description": "Si se activa, descarga el texto íntegro de cada documento encontrado. Para documentos HTML (noticias, guías…) se extrae del HTML. Para PDFs (resoluciones) se usa el resumen de Solr. Por defecto desactivado (la búsqueda es más rápida).",
                        "default": false
                    },
                    "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 del documento (campos 'paragraphs' y 'text' resumido). Útil para reducir el volumen al analizar con un LLM. Solo aplica cuando se extrae texto."
                    },
                    "paragraphTerms": {
                        "title": "Términos para localizar los pasajes",
                        "type": "string",
                        "description": "Términos con los que se localizan los pasajes relevantes en modo párrafos. Si se omite, se usan los términos de búsqueda. Ejemplo: 'consentimiento expreso menores'."
                    },
                    "maxResults": {
                        "title": "Número máximo de resultados",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Número máximo de documentos a devolver por término de búsqueda."
                    },
                    "proxyConfiguration": {
                        "title": "Configuración de proxy",
                        "type": "object",
                        "description": "Configuración de proxy opcional. La AEPD es un sitio público del gobierno; 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
