{
  "openapi": "3.0.1",
  "info": {
    "title": "Cendoj",
    "description": "Automatiza la búsqueda de jurisprudencia en el CENDOJ. Permite buscar sentencias, autos y acuerdos por término de texto y filtrarlos por jurisdicción, tipo de órgano, tipo de resolución, comunidad autónoma y rango de fechas.",
    "version": "2.0",
    "x-build-id": "XqyvagijlyTjZYUdG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/legaltech~cendoj/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-legaltech-cendoj",
        "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~cendoj/runs": {
      "post": {
        "operationId": "runs-sync-legaltech-cendoj",
        "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~cendoj/run-sync": {
      "post": {
        "operationId": "run-sync-legaltech-cendoj",
        "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 la jurisprudencia de CENDOJ. Admite operadores booleanos en el propio término: Y/AND (ambos), O/OR (cualquiera), NO/NOT (excluir) y PROXn/NEARn (proximidad, ej. PROX20). Ejemplo: \"abogado Y costas O \\\"condena en costas\\\" NO penal\".",
            "items": {
              "type": "string"
            }
          },
          "pdfUrls": {
            "title": "Descargar texto de sentencias concretas",
            "maxItems": 50,
            "type": "array",
            "description": "Lista de URLs de PDF (campo `pdfUrl` de resultados anteriores) de las que quieres descargar y extraer el texto completo para analizarlas. Úsalo en una segunda ejecución tras una búsqueda: copia aquí las URLs de las sentencias que te interesen. Si rellenas este campo, el actor solo extrae el texto de esas sentencias (no es necesario rellenar 'Términos de Búsqueda'). Límite de 50 por ejecución para evitar bloqueos por descargas masivas.",
            "items": {
              "type": "string"
            }
          },
          "jurisdictions": {
            "title": "Jurisdicciones",
            "type": "array",
            "description": "Selecciona una o más jurisdicciones. Si no se selecciona ninguna, se buscará en todas por defecto.",
            "items": {
              "type": "string",
              "enum": [
                "CIVIL",
                "PENAL",
                "CONTENCIOSO",
                "SOCIAL",
                "MILITAR",
                "ESPECIAL"
              ],
              "enumTitles": [
                "Civil",
                "Penal",
                "Contencioso",
                "Social",
                "Militar",
                "Especial"
              ]
            }
          },
          "organoTypes": {
            "title": "Tipo de Órgano",
            "type": "array",
            "description": "Tipo de órgano judicial. Los códigos son opacos: NO los adivines, lee el título (enumTitle) de cada opción y elige el que coincide exactamente con lo que pide el usuario. Para un órgano con varias salas (Tribunal Supremo, Audiencia Nacional, TSJ) usa el código combinado salvo que se precise una sala. Errores frecuentes a evitar: 'Juzgado de Primera Instancia' es el código 42 (NO 31, que es el Tribunal Superior de Justicia); la 'Sala de lo Civil del Tribunal Supremo' es 11 (NO 12, que es Penal); la 'Audiencia Provincial' es 37 (NO 42). Si no se indica ninguno, se busca en todos.",
            "items": {
              "type": "string",
              "enum": [
                "11|12|13|14|15|16",
                "11",
                "12",
                "13",
                "14",
                "15",
                "16",
                "22|2264|23|24|25|26|27|28|29",
                "22",
                "2264",
                "23",
                "24",
                "27",
                "26",
                "25",
                "29",
                "28",
                "31|31201202|33|34",
                "31",
                "31201202",
                "33",
                "34",
                "37",
                "38",
                "1001",
                "42",
                "43",
                "45",
                "53",
                "41",
                "47",
                "1002",
                "51",
                "44",
                "52",
                "48",
                "83",
                "85",
                "75",
                "36"
              ],
              "enumTitles": [
                "Tribunal Supremo",
                "Tribunal Supremo. Sala de lo Civil",
                "Tribunal Supremo. Sala de lo Penal",
                "Tribunal Supremo. Sala de lo Contencioso",
                "Tribunal Supremo. Sala de lo Social",
                "Tribunal Supremo. Sala de lo Militar",
                "Tribunal Supremo. Sala de lo Especial",
                "Audiencia Nacional",
                "Audiencia Nacional. Sala de lo Penal",
                "Sala de Apelación de la Audiencia Nacional",
                "Audiencia Nacional. Sala de lo Contencioso",
                "Audiencia Nacional. Sala de lo Social",
                "Audiencia Nacional. Juzgados Centrales de Instrucción / Tribunal Central Instancia Sec. Instr.",
                "Audiencia Nacional. Juzgado Central de Menores",
                "Audiencia Nacional. Juzgado Central de Vigilancia Penitenciaria",
                "Audiencia Nacional. Juzgados Centrales de lo Contencioso / Tribunal Central Instancia Sec. Contencioso",
                "Audiencia Nacional. Juzgados Centrales de lo Penal",
                "Tribunal Superior de Justicia",
                "Tribunal Superior de Justicia. Sala de lo Civil y Penal",
                "Sección de Apelación Penal. TSJ Sala de lo Civil y Penal",
                "Tribunal Superior de Justicia. Sala de lo Contencioso",
                "Tribunal Superior de Justicia. Sala de lo Social",
                "Audiencia Provincial",
                "Audiencia Provincial. Tribunal Jurado",
                "Tribunal de Marca de la UE",
                "Juzgado de Primera Instancia / Tribunal Instancia Sec. Civil",
                "Juzgado de Instrucción",
                "Juzgado de lo Contencioso Administrativo / Tribunal Instancia Sec. Contencioso-Administrativo",
                "Juzgado de Menores / Tribunal Instancia Sec. Menores",
                "Juzgado de 1ª Inst. Instr. / Tribunal Instancia Sec. Civil Instr.",
                "Juzgado de lo Mercantil / Tribunal Instancia Sec. Mercantil",
                "Juzgados de Marca de la UE",
                "Juzgado de lo Penal / Tribunal Instancia Sec. Penal",
                "Juzgado de lo Social / Tribunal Instancia Sec. Social",
                "Juzgado de Vigilancia Penitenciaria / Tribunal Instancia Sec. Vigilancia Penitenciaria",
                "Juzgado de Violencia sobre la Mujer",
                "Tribunal Militar Territorial",
                "Tribunal Militar Central",
                "Consejo Supremo de Justicia Militar",
                "Audiencia Territorial"
              ]
            }
          },
          "resolutionTypes": {
            "title": "Tipo de Resolución",
            "type": "array",
            "description": "Selecciona uno o más tipos de resolución. Si no se selecciona ninguno, se buscará en todos.",
            "items": {
              "type": "string",
              "enum": [
                "SENTENCIA",
                "AUTO",
                "ACUERDO"
              ],
              "enumTitles": [
                "Sentencia",
                "Auto",
                "Acuerdo"
              ]
            }
          },
          "locations": {
            "title": "Localización",
            "type": "array",
            "description": "Selecciona una o más Comunidades Autónomas. Si no se selecciona ninguna, se buscará en todas.",
            "items": {
              "type": "string",
              "enum": [
                "ANDALUCÍA",
                "ARAGÓN",
                "ASTURIAS",
                "BALEARES",
                "CANARIAS",
                "CANTABRIA",
                "CASTILLA LA MANCHA",
                "CASTILLA Y LEÓN",
                "CATALUÑA",
                "CEUTA",
                "COMUNIDAD VALENCIANA",
                "EXTREMADURA",
                "GALICIA",
                "LA RIOJA",
                "MADRID",
                "MELILLA",
                "MURCIA",
                "NAVARRA",
                "PAÍS VASCO"
              ],
              "enumTitles": [
                "Andalucía",
                "Aragón",
                "Asturias",
                "Baleares",
                "Canarias",
                "Cantabria",
                "Castilla La Mancha",
                "Castilla y León",
                "Cataluña",
                "Ceuta",
                "Comunidad Valenciana",
                "Extremadura",
                "Galicia",
                "La Rioja",
                "Madrid",
                "Melilla",
                "Murcia",
                "Navarra",
                "País Vasco"
              ]
            }
          },
          "maxResults": {
            "title": "Número máximo de sentencias",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Define el número máximo de sentencias a extraer por cada término de búsqueda. Se pagina automáticamente de 50 en 50. El límite es 200 por ejecución.",
            "default": 10
          },
          "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 PDF se devuelven solo ese número de PÁRRAFOS relevantes (los pasajes donde aparecen los términos buscados, en frases completas y priorizando los Fundamentos de Derecho) en lugar del texto íntegro. Ideal para análisis con un LLM (menos tokens). Aplica cuando se extrae texto (campo `pdfUrls`, o búsqueda con extracción de texto activada). 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. Si se deja vacío, se usa el propio término de búsqueda (en la vía `searchTerms`). Es recomendable rellenarlo cuando se usa `pdfUrls` (segunda ejecución), ya que ahí no hay término de búsqueda."
          },
          "dateFrom": {
            "title": "Fecha desde",
            "type": "string",
            "description": "Fecha de resolución inicial (opcional). Se incluyen las sentencias dictadas a partir de esta fecha."
          },
          "dateTo": {
            "title": "Fecha hasta",
            "type": "string",
            "description": "Fecha de resolución final (opcional). Se incluyen las sentencias dictadas hasta esta fecha."
          },
          "sortOrder": {
            "title": "Ordenar por",
            "enum": [
              "Relevance",
              "IN_FECHARESOLUCION:increasing",
              "IN_FECHARESOLUCION:decreasing",
              "IN_FECHAENTRADA:numberdecreasing",
              "IP_TIPOORGANO:alphabetical",
              "IP_TIPOORGANO:reversealphabetical"
            ],
            "type": "string",
            "description": "Criterio de ordenación de los resultados. Por defecto se ordena por coincidencia (relevancia).",
            "default": "Relevance"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Configuración de proxy. CENDOJ bloquea las IP de datacenter, por lo que se recomienda usar proxy residencial de España (grupo RESIDENTIAL, país ES). El tráfico residencial se factura por GB consumido.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "ES"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}