API Juristeca

Inicio / APIs Judiciales / API Juristeca

Descripcion

La API Pública de Juristeca es un servicio web desarrollado por el Poder Judicial, a través de la plataforma de la Escuela Nacional de la Judicatura (ENJ), que facilita la consulta programática de información jurídica especializada sobre doctrina, legislación, jurisprudencia y boletines judiciales del Poder Judicial de la República Dominicana y otras altas cortes. A través de esta herramienta, los usuarios pueden acceder de forma ágil y estructurada a contenido jurídico actualizado, permitiendo búsquedas precisas sobre decisiones judiciales, normas y publicaciones relevantes. Esto contribuye a fortalecer el acceso a la información, la transparencia y la difusión del conocimiento jurídico, tanto para profesionales del derecho como para la ciudadanía en general.

Manual de Usuario - API Pública de Decisiones Judiciales

API Pública Juristeca

Poder Judicial de la República Dominicana y Escuela Nacional de la Judicatura

Versión 1.0  |  Abril 2026

1. Introducción

La API Pública Juristeca es un servicio web RESTful desarrollado por el Poder Judicial de la República Dominicana y la Escuela Nacional de la Judicatura que permite a desarrolladores, investigadores e instituciones acceder programáticamente a los recursos jurídicos digitales gestionados a través de la plataforma Juristeca.

A través de esta API es posible realizar búsquedas y consultas sobre cuatro grandes colecciones documentales: boletines judiciales, jurisprudencia, legislación y doctrina jurídica, integrando de forma transparente múltiples fuentes de datos institucionales.

Características Principales

🔓 Acceso Público No requiere autenticación ni registro previo para realizar consultas.
📄 Cuatro Módulos Boletines, Jurisprudencia, Legislación y Doctrina en un único punto de acceso.
📊 Búsqueda Avanzada Soporte para múltiples términos de búsqueda, paginación y ordenamiento.
⚡ Formato JSON Respuestas estructuradas en JSON para integración sencilla en cualquier plataforma.
🛡 Rate Limiting Control de acceso por IP para garantizar la disponibilidad del servicio.
🌐 REST Estándar Arquitectura RESTful con métodos HTTP estándar (GET y POST).

¿Qué puedo consultar?

  • Boletines Judiciales: Acceso al boletín judicial mensual actual con enlace al PDF y portada.
  • Jurisprudencia: Búsqueda y recuperación de decisiones judiciales con metadatos completos (tribunal, ponente, materia, tipo de decisión, etc.).
  • Legislación: Consulta de leyes, decretos y normativas vigentes con datos de publicación en Gaceta Oficial.
  • Doctrina: Búsqueda de libros y publicaciones jurídicas con información de autores, editorial y número de páginas.

Audiencia Objetivo

Este manual está dirigido a:

  • Desarrolladores de software que deseen integrar datos jurídicos en sus aplicaciones.
  • Instituciones públicas y privadas que requieran acceso automatizado a recursos legales.
  • Investigadores y académicos en el ámbito del derecho.
  • Equipos de TI del Poder Judicial que administren integraciones con esta API.

2. Requisitos Previos

Requisitos Técnicos

  1. Conexión a Internet: Necesaria para enviar peticiones HTTP/HTTPS al servidor.
  2. Cliente HTTP: Puede utilizar cualquiera de las siguientes opciones:
    • Herramientas gráficas: Postman, Insomnia o similar.
    • Línea de comandos: cURL o HTTPie.
    • Código en cualquier lenguaje: JavaScript, Python, C#, Java, PHP, etc.
    • Navegador web (solo para los endpoints GET).
  3. Soporte para JSON: Librería o función nativa para parsear respuestas JSON.
  4. Soporte para HTTPS: El servidor únicamente acepta conexiones seguras (TLS).

Conocimientos Recomendados

  • Conceptos básicos de APIs REST (recursos, verbos HTTP, URLs).
  • Formato de intercambio de datos JSON.
  • Códigos de estado HTTP (200, 400, 404, 429, 500).
  • Manejo de peticiones asíncronas en su lenguaje de preferencia.
  • Nociones sobre paginación en servicios web.

Software Recomendado para Pruebas

Herramienta Tipo Descripción
Postman Cliente GUI Ideal para explorar endpoints de forma visual, incluyendo cuerpos JSON en POST.
Insomnia Cliente GUI Alternativa ligera a Postman con soporte completo para REST.
cURL CLI Disponible en Windows, macOS y Linux. Útil para scripts y automatización.

3. URL Base de la API

Todas las rutas descritas en este manual se construyen sobre la siguiente URL base:

https://api.poderjudicial.gob.do/Juristeca
Nota: Anteponga siempre la URL base a cada ruta indicada en este manual. Por ejemplo, el endpoint de Boletines quedaría como:
https://api.poderjudicial.gob.do/Juristeca/api/v1/boletines

Versionado

La versión actual de la API es v1. Todos los endpoints llevan el prefijo api/v1/ para garantizar compatibilidad futura.

4. Autenticación

🔓 Esta API es pública y no requiere autenticación.

Puede realizar consultas directamente sin necesidad de tokens, API keys ni credenciales de ningún tipo. Simplemente construya la petición y envíela al endpoint correspondiente.

Control de Acceso por IP

Aunque no hay autenticación, el sistema identifica a cada cliente por su dirección IP (o por el encabezado X-Api-Key si se provee) para aplicar las políticas de límite de uso. Consulte la sección 5. Límites de Uso para más detalles.

5. Límites de Uso

Para garantizar la disponibilidad y el rendimiento del servicio para todos los usuarios, la API aplica un mecanismo de rate limiting basado en el algoritmo Token Bucket.

Configuración del Rate Limiter

Parámetro Valor Descripción
Período de reposición 1 minuto Ventana deslizante de reabastecimiento
Código al exceder 429 Too Many Requests Respuesta cuando se agota el límite

Respuesta al Exceder el Límite

Al superar las 100 peticiones por minuto, la API responde con:

// HTTP 429 Too Many Requests
{
                "error": "Ha superado el límite de peticiones permitidas."
}

⚠ Recomendaciones para Evitar el Error 429

  • Implemente retroceso exponencial al recibir un error 429.
  • Distribuya las peticiones a lo largo del tiempo en lugar de enviarlas en ráfagas.
  • Cache los resultados en su aplicación cuando los datos no cambien frecuentemente.
  • Monitoree el número de peticiones que realiza su aplicación por minuto.
  • Si necesita un límite mayor, contacte al equipo técnico del Poder Judicial.

6. Módulos Disponibles

La API Juristeca está organizada en cuatro módulos temáticos, cada uno con su propio conjunto de endpoints:

📰

Boletines Judiciales

Boletín judicial mensual del Poder Judicial: enlace al PDF y portada.

GET api/v1/boletines

Jurisprudencia

Decisiones judiciales: buscar por términos o recuperar por ID con metadatos completos.

api/v1/jurisprudencia
📚

Legislación

Leyes, decretos y normativas vigentes. Incluye datos de Gaceta Oficial.

api/v1/legislacion
📖

Doctrina

Libros y publicaciones jurídicas con información de autores y editorial.

api/v1/doctrina

Resumen de Endpoints

Método Ruta Descripción
GET api/v1/boletines Obtener el boletín judicial actual (con fecha opcional)
POST api/v1/jurisprudencia/search Buscar documentos de jurisprudencia
GET api/v1/jurisprudencia/{id} Obtener un documento de jurisprudencia por ID
POST api/v1/legislacion/search Buscar documentos de legislación
GET api/v1/legislacion/{id} Obtener un documento de legislación por ID
POST api/v1/doctrina/search Buscar documentos de doctrina
GET api/v1/doctrina/{isbn} Obtener un documento de doctrina por ISBN

6.1. Módulo: Boletines Judiciales

El módulo de Boletines permite acceder al Boletín Judicial emitido mensualmente por el Poder Judicial. Devuelve la URL del documento PDF y la imagen de portada correspondientes al mes indicado (o al mes actual si no se especifica fecha).

GET

Obtener Boletín Judicial

api/v1/boletines

Retorna el boletín judicial del mes actual o del mes correspondiente a la fecha indicada.

Parámetros de Consulta (Query Parameters)

Parámetro Tipo Requerido Descripción Ejemplo
date datetime No Fecha del boletín a consultar. Si se omite, devuelve el boletín del mes actual. 2025-03-01

Ejemplo de Solicitud

# Sin parámetro (boletín del mes actual)
GET api/v1/boletines

# Con fecha específica
GET api/v1/boletines?date=2025-03-01

Respuesta Exitosa 200 OK

{
                    "pdf": "https://juristeca.edu.do/base/domenj/boletines_judiciales/2025-03/boletin.pdf",
                    "cover": "https://juristeca.edu.do/base/domenj/boletines_judiciales/2025-03/portada.jpg"
}

Campos de la Respuesta

Campo Tipo Descripción
pdf string (URL) Enlace directo al documento PDF del boletín judicial.
cover string (URL) Enlace a la imagen de portada del boletín.

Respuesta No Encontrado 404 Not Found

{
                    "status": 404,
                    "message": "No se pudo encontrar el boletín del mes dado"
}

Error Interno 500 Internal Server Error

// Respuesta vacía con código 500 si ocurre un error al obtener el boletín

6.2. Módulo: Jurisprudencia

El módulo de Jurisprudencia proporciona acceso a las decisiones judiciales disponibles en la plataforma Juristeca. Permite tanto la búsqueda por términos como la recuperación de un documento específico mediante su identificador numérico.

POST

Buscar Jurisprudencia

api/v1/jurisprudencia/search

Realiza una búsqueda de texto completo en la colección de jurisprudencia. El cuerpo de la solicitud debe enviarse en formato JSON con el encabezado Content-Type: application/json.

Cuerpo de la Solicitud (Request Body)

{
                    "searchTokens": ["desahucio", "arrendamiento"],
                    "sort": "score desc",
                    "page": 0,
                    "rows": 10
}

Parámetros del Cuerpo

Campo Tipo Requerido Valor por defecto Descripción
searchTokens string[] No [] Lista de términos de búsqueda. Array vacío retorna todos los documentos paginados.
sort string No "score desc" Criterio de ordenamiento de los resultados.
page integer No 0 Número de página (base 0). Use con rows para paginar resultados.
rows integer No 10 Cantidad de resultados por página. Máximo recomendado: 50.

Respuesta Exitosa 200 OK

{
                    "documentsJurisprudencia": [
    {
                    "id": 10452,
                    "numeroTOL": "TOL-2024-00123",
                    "title": "Sentencia sobre contrato de arrendamiento y desahucio",
                    "materia": ["Civil", "Inmobiliario"],
                    "fecha": "2024-06-15T00:00:00",
                    "numero": "SCJ-2024-0456",
                    "tribunal": "Suprema Corte de Justicia",
                    "tipoDecision": "Sentencia",
                    "accionORecurso": "Casación",
                    "organo": "Primera Cámara Civil",
                    "distritoJudicial": "Distrito Nacional",
                    "ponente": "Magistrado Juan Pérez"
    }
  ]
}

Campos de la Respuesta

Campo Tipo Descripción
documentsJurisprudencia array Lista de documentos de jurisprudencia encontrados.
  id integer Identificador único del documento en el sistema.
  numeroTOL string Número de referencia TOL (Tirant Online) del documento.
  title string Título descriptivo de la decisión judicial.
  materia string[] Áreas del derecho relacionadas (Civil, Penal, Laboral, etc.).
  fecha datetime Fecha de emisión de la decisión.
  numero string Número identificador de la decisión.
  tribunal string Nombre del tribunal que emitió la decisión.
  tipoDecision string Tipo de la decisión: Sentencia, Auto, Resolución, etc.
  accionORecurso string Tipo de acción o recurso interpuesto: Casación, Apelación, etc.
  organo string Órgano o cámara específica del tribunal.
  distritoJudicial string Distrito judicial de la decisión.
  ponente string Magistrado o juez ponente de la decisión.
GET

Obtener Jurisprudencia por ID

api/v1/jurisprudencia/{id}

Recupera un documento específico de jurisprudencia mediante su identificador numérico.

Parámetros de Ruta (Path Parameters)

Parámetro Tipo Requerido Descripción
id integer Identificador numérico del documento de jurisprudencia.

Ejemplo

GET api/v1/jurisprudencia/10452

Respuesta Exitosa 200 OK

Retorna el mismo objeto Jurisprudencia descrito en el endpoint de búsqueda.

No Encontrado 404 Not Found

{
                    "status": 404,
                    "message": "No existe documento jurisprudencia con id '10452'"
}

6.3. Módulo: Legislación

El módulo de Legislación permite consultar el cuerpo normativo vigente: leyes, decretos, reglamentos y disposiciones que conforman el ordenamiento jurídico de la República Dominicana, incluyendo datos de publicación en la Gaceta Oficial.

POST

Buscar Legislación

api/v1/legislacion/search

Realiza una búsqueda de texto completo en la colección de documentos legislativos.

Cuerpo de la Solicitud

{
                    "searchTokens": ["ley", "notariado"],
                    "sort": "score desc",
                    "page": 0,
                    "rows": 10
}
Los parámetros searchTokens, sort, page y rows son idénticos a los descritos en el módulo de Jurisprudencia. Ver Sección 11 — Parámetros Comunes de Búsqueda.

Respuesta Exitosa 200 OK

{
                    "documentsLegislacion": [
    {
                    "id": 3301,
                    "numeroTOL": "TOL-LEG-20240015",
                    "numero": "140-15",
                    "title": "Ley Orgánica del Notariado Dominicano",
                    "fecha": "2015-08-07T00:00:00",
                    "fechaGacetaOficial": "2015-08-21T00:00:00",
                    "entidad": "Congreso Nacional",
                    "ordenamiento": "Derecho Notarial"
    }
  ]
}

Campos de la Respuesta

Campo Tipo Descripción
documentsLegislacion array Lista de documentos legislativos encontrados.
  id integer Identificador único del documento.
  numeroTOL string Número de referencia TOL del documento.
  numero string Número oficial de la ley, decreto o disposición.
  title string Nombre completo del instrumento normativo.
  fecha datetime Fecha de promulgación o firma del instrumento.
  fechaGacetaOficial datetime Fecha de publicación en la Gaceta Oficial.
  entidad string Entidad o poder que emitió el instrumento normativo.
  ordenamiento string Rama o área del derecho a la que pertenece el instrumento.
GET

Obtener Legislación por ID

api/v1/legislacion/{id}

Recupera un documento legislativo específico mediante su identificador numérico.

Parámetros de Ruta

Parámetro Tipo Requerido Descripción
id integer Identificador numérico del documento de legislación.

Ejemplo

GET api/v1/legislacion/3301

Respuesta Exitosa 200 OK

Retorna el mismo objeto Legislacion descrito en el endpoint de búsqueda.

No Encontrado 404 Not Found

{
                    "status": 404,
                    "message": "No existe documento legislación con id '3301'"
}

6.4. Módulo: Doctrina

El módulo de Doctrina ofrece acceso al catálogo de libros y publicaciones jurídicas disponibles en la biblioteca digital Juristeca. Permite buscar por título, autores o editorial, y recuperar la ficha completa de un libro mediante su ISBN.

POST

Buscar Doctrina

api/v1/doctrina/search

Realiza una búsqueda de texto completo en el catálogo de doctrina jurídica.

Cuerpo de la Solicitud

{
                    "searchTokens": ["derecho penal"],
                    "sort": "score desc",
                    "page": 0,
                    "rows": 10
}

Respuesta Exitosa 200 OK

{
                    "doctrinaDocuments": [
    {
                    "id": 801,
                    "title": "Manual de Derecho Penal Dominicano",
                    "editorial": "Ediciones Jurídicas Trajano Potentini",
                    "pages": 648,
                    "authors": [
        {
                    "id": 112,
                    "fullName": "Artagnan Pérez Méndez"
        }
      ]
    }
  ]
}

Campos de la Respuesta

Campo Tipo Descripción
doctrinaDocuments array Lista de documentos de doctrina encontrados.
  id integer Identificador único del libro en el sistema.
  title string Título completo de la publicación.
  editorial string Nombre de la editorial que publicó la obra.
  pages integer Número total de páginas de la publicación.
  authors array Lista de autores de la publicación.
    id integer Identificador único del autor.
    fullName string Nombre completo del autor.
GET

Obtener Doctrina por ISBN

api/v1/doctrina/{isbn}

Recupera la ficha completa de un libro de doctrina mediante su número ISBN.

Parámetros de Ruta

Parámetro Tipo Requerido Descripción
isbn string Número ISBN del libro (puede contener guiones).

Ejemplo

GET api/v1/doctrina/978-9945-444-00-1

Respuesta Exitosa 200 OK

Retorna el mismo objeto Doctrina descrito en el endpoint de búsqueda.

No Encontrado 404 Not Found

{
                    "status": 404,
                    "message": "No existe documento jurisprudencia con id '978-9945-444-00-1'"
}

11. Parámetros Comunes de Búsqueda

Los tres módulos con capacidad de búsqueda (Jurisprudencia, Legislación y Doctrina) comparten la misma estructura de solicitud. Esta sección detalla cada parámetro con ejemplos prácticos.

Estructura Base del Request Body

{
                "searchTokens": [],         // Lista de términos de búsqueda
                "sort": "score desc",       // Criterio de ordenamiento
                "page": 0,                  // Página (base 0)
                "rows": 10                  // Resultados por página
}

searchTokens — Términos de Búsqueda

Es un arreglo de cadenas de texto. Cada elemento representa un término de búsqueda. El sistema realiza una búsqueda de texto completo considerando todos los términos proporcionados.

EjemploEfecto
["desahucio"] Busca documentos que contengan la palabra "desahucio".
["contrato", "arrendamiento"] Busca documentos que contengan "contrato" y/o "arrendamiento".
["ley 140-15"] Busca la frase completa "ley 140-15" en los documentos.
[] Retorna todos los documentos (paginados según page y rows).

sort — Ordenamiento

Define el criterio por el cual se ordenan los resultados devueltos. Valor por defecto: "score desc".

ValorDescripción
"score desc" Ordena por relevancia de mayor a menor (recomendado para búsquedas).
"score asc" Ordena por relevancia de menor a mayor.
"fecha desc" Ordena por fecha más reciente primero.
"fecha asc" Ordena por fecha más antigua primero.

Paginación — page y rows

Use page (base 0) y rows para navegar entre los resultados. La primera página es siempre page: 0.

EscenariopagerowsResultado
Primera página, 10 resultados 0 10 Registros 1–10
Segunda página, 10 resultados 1 10 Registros 11–20
Tercera página, 25 resultados 2 25 Registros 51–75
⚠ Nota sobre el rendimiento: Se recomienda no superar 50 filas por página para garantizar tiempos de respuesta óptimos.

12. Códigos de Estado HTTP

La API utiliza los siguientes códigos de estado HTTP estándar en sus respuestas:

Código Nombre Descripción Cuándo ocurre
200 OK Solicitud procesada correctamente. En todos los endpoints cuando la operación es exitosa.
400 Bad Request La solicitud contiene datos inválidos o mal formados. Body JSON mal formado o tipos de datos incorrectos.
404 Not Found El recurso solicitado no existe. ID o ISBN que no corresponde a ningún documento; boletín no disponible para el mes solicitado.
429 Too Many Requests Se superó el límite de peticiones permitidas. Más de 100 peticiones por minuto desde la misma IP.
500 Internal Server Error Error interno del servidor. Fallo al conectar con fuentes de datos externas o error inesperado.

13. Ejemplos de Integración

A continuación se presentan ejemplos funcionales para integrar la API en los lenguajes de programación más comunes. Reemplace BASE_URL con la URL base real de la API.

13.1 Boletines Judiciales

# Boletín del mes actual
curl -X GET "https://api.poderjudicial.gob.do/Juristeca/api/v1/boletines"

# Boletín de un mes específico
curl -X GET "https://api.poderjudicial.gob.do/Juristeca/api/v1/boletines?date=2025-03-01"
const BASE_URL = 'https://api.poderjudicial.gob.do/Juristeca';

async function obtenerBoletin(fecha = null) {
  const url = new URL(`${BASE_URL}/api/v1/boletines`);
                        if (fecha) url.searchParams.set('date', fecha);

                        const response = await fetch(url.toString());

                        if (!response.ok) {
                        const error = await response.json();
                        throw new Error(error.message ?? `HTTP ${response.status}`);
  }

                        return response.json();
}

// Uso
obtenerBoletin()
  .then(data => {
    console.log('PDF:', data.pdf);
    console.log('Portada:', data.cover);
  })
  .catch(console.error);

obtenerBoletin('2025-03-01').then(console.log).catch(console.error);
import requests

BASE_URL = "https://api.poderjudicial.gob.do/Juristeca"

def obtener_boletin(fecha=None):
    params = {}
                        if fecha:
        params["date"] = fecha

    response = requests.get(f"{BASE_URL}/api/v1/boletines", params=params)
    response.raise_for_status()
                        return response.json()

# Uso
boletin = obtener_boletin()
print("PDF:", boletin["pdf"])
print("Portada:", boletin["cover"])

boletin_marzo = obtener_boletin("2025-03-01")
print(boletin_marzo)
using System.Net.Http.Json;

const string BASE_URL = "https://api.poderjudicial.gob.do/Juristeca";

async Task<BoletinDto?> ObtenerBoletin(DateTime? fecha = null)
{
                        using var client = new HttpClient();
                        var url = $"{BASE_URL}/api/v1/boletines";
                        if (fecha.HasValue)
        url += $"?date={fecha.Value:yyyy-MM-dd}";

                        var response = await client.GetAsync(url);
    response.EnsureSuccessStatusCode();
                        return await response.Content.ReadFromJsonAsync<BoletinDto>();
}

// Modelo
record BoletinDto(string? Pdf, string? Cover);

// Uso
var boletin = await ObtenerBoletin();
Console.WriteLine($"PDF: {boletin?.Pdf}");

13.2 Búsqueda de Jurisprudencia

# Búsqueda por términos
curl -X POST "https://api.poderjudicial.gob.do/Juristeca/api/v1/jurisprudencia/search" \
  -H "Content-Type: application/json" \
  -d '{
    "searchTokens": ["desahucio", "arrendamiento"],
    "sort": "score desc",
    "page": 0,
    "rows": 10
  }'

# Obtener documento por ID
curl -X GET "https://api.poderjudicial.gob.do/Juristeca/api/v1/jurisprudencia/10452"
const BASE_URL = 'https://api.poderjudicial.gob.do/Juristeca';

async function buscarJurisprudencia({ terminos = [], pagina = 0, filas = 10, orden = 'score desc' } = {}) {
                        const response = await fetch(`${BASE_URL}/api/v1/jurisprudencia/search`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      searchTokens: terminos,
      sort: orden,
      page: pagina,
      rows: filas
    })
  });

                        if (!response.ok) throw new Error(`HTTP ${response.status}`);
                        return response.json();
}

async function obtenerJurisprudencia(id) {
                        const response = await fetch(`${BASE_URL}/api/v1/jurisprudencia/${id}`);
                        if (!response.ok) throw new Error(`HTTP ${response.status}`);
                        return response.json();
}

// Uso
buscarJurisprudencia({ terminos: ['desahucio'], pagina: 0, filas: 5 })
  .then(data => data.documentsJurisprudencia.forEach(d => console.log(d.title)));

obtenerJurisprudencia(10452).then(console.log);
import requests

BASE_URL = "https://api.poderjudicial.gob.do/Juristeca"

def buscar_jurisprudencia(terminos=None, pagina=0, filas=10, orden="score desc"):
    payload = {
                        "searchTokens": terminos or [],
                        "sort": orden,
                        "page": pagina,
                        "rows": filas
    }
    response = requests.post(
                        f"{BASE_URL}/api/v1/jurisprudencia/search",
        json=payload
    )
    response.raise_for_status()
                        return response.json()

def obtener_jurisprudencia(id_doc):
    response = requests.get(f"{BASE_URL}/api/v1/jurisprudencia/{id_doc}")
    response.raise_for_status()
                        return response.json()

# Búsqueda
resultados = buscar_jurisprudencia(["desahucio", "arrendamiento"])
for doc in resultados["documentsJurisprudencia"]:
    print(doc["title"], "-", doc.get("tribunal"))

# Por ID
documento = obtener_jurisprudencia(10452)
print(documento)
using System.Net.Http.Json;

const string BASE_URL = "https://api.poderjudicial.gob.do/Juristeca";
using var client = new HttpClient();

// Búsqueda
var request = new {
    searchTokens = new[] { "desahucio", "arrendamiento" },
    sort = "score desc",
    page = 0,
    rows = 10
};

var searchResp = await client.PostAsJsonAsync(
                        $"{BASE_URL}/api/v1/jurisprudencia/search", request);
searchResp.EnsureSuccessStatusCode();

var resultados = await searchResp.Content
    .ReadFromJsonAsync<JurisprudenciaDto>();

foreach (var doc in resultados?.DocumentsJurisprudencia ?? [])
    Console.WriteLine($"{doc.Title} - {doc.Tribunal}");

// Por ID
var getResp = await client.GetAsync($"{BASE_URL}/api/v1/jurisprudencia/10452");
getResp.EnsureSuccessStatusCode();

13.3 Búsqueda de Legislación

curl -X POST "https://api.poderjudicial.gob.do/Juristeca/api/v1/legislacion/search" \
  -H "Content-Type: application/json" \
  -d '{
    "searchTokens": ["ley", "notariado"],
    "sort": "score desc",
    "page": 0,
    "rows": 10
  }'

# Por ID
curl -X GET "https://api.poderjudicial.gob.do/Juristeca/api/v1/legislacion/3301"
async function buscarLegislacion(terminos, pagina = 0, filas = 10) {
                        const response = await fetch(`${BASE_URL}/api/v1/legislacion/search`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ searchTokens: terminos, sort: 'score desc', page: pagina, rows: filas })
  });
                        if (!response.ok) throw new Error(`HTTP ${response.status}`);
                        return response.json();
}

buscarLegislacion(['ley', 'notariado'])
  .then(data => data.documentsLegislacion.forEach(l => console.log(l.numero, l.title)));
def buscar_legislacion(terminos, pagina=0, filas=10):
    response = requests.post(
                        f"{BASE_URL}/api/v1/legislacion/search",
        json={"searchTokens": terminos, "sort": "score desc",
                        "page": pagina, "rows": filas}
    )
    response.raise_for_status()
                        return response.json()

leyes = buscar_legislacion(["ley", "notariado"])
for ley in leyes["documentsLegislacion"]:
    print(ley["numero"], "-", ley["title"])

13.4 Búsqueda de Doctrina

curl -X POST "https://api.poderjudicial.gob.do/Juristeca/api/v1/doctrina/search" \
  -H "Content-Type: application/json" \
  -d '{
    "searchTokens": ["derecho penal"],
    "sort": "score desc",
    "page": 0,
    "rows": 10
  }'

# Por ISBN
curl -X GET "https://api.poderjudicial.gob.do/Juristeca/api/v1/doctrina/978-9945-444-00-1"
async function buscarDoctrina(terminos, pagina = 0, filas = 10) {
                        const response = await fetch(`${BASE_URL}/api/v1/doctrina/search`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ searchTokens: terminos, sort: 'score desc', page: pagina, rows: filas })
  });
                        if (!response.ok) throw new Error(`HTTP ${response.status}`);
                        return response.json();
}

buscarDoctrina(['derecho penal'])
  .then(data => data.doctrinaDocuments.forEach(d => {
                        const autores = d.authors.map(a => a.fullName).join(', ');
    console.log(`${d.title} — ${autores}`);
  }));
def buscar_doctrina(terminos, pagina=0, filas=10):
    response = requests.post(
                        f"{BASE_URL}/api/v1/doctrina/search",
        json={"searchTokens": terminos, "sort": "score desc",
                        "page": pagina, "rows": filas}
    )
    response.raise_for_status()
                        return response.json()

def obtener_doctrina_por_isbn(isbn):
    response = requests.get(f"{BASE_URL}/api/v1/doctrina/{isbn}")
    response.raise_for_status()
                        return response.json()

libros = buscar_doctrina(["derecho penal"])
for libro in libros["doctrinaDocuments"]:
    autores = ", ".join(a["fullName"] for a in libro["authors"])
    print(f'{libro["title"]} — {autores}')

14. Manejo de Errores

Esta sección describe las causas y soluciones para cada tipo de error que puede retornar la API, junto con estrategias para un manejo robusto en sus aplicaciones.

400 — Bad Request

Solicitud Malformada

Causa: El cuerpo JSON de la solicitud POST tiene sintaxis incorrecta, o se proporcionó un tipo de dato incompatible (ej. texto donde se esperaba un número).

Solución: Verifique que el Content-Type sea application/json y que el JSON esté bien formado.

// Incorrecto: rows como string
{ "searchTokens": ["civil"], "rows": "diez" }

// Correcto: rows como integer
{ "searchTokens": ["civil"], "rows": 10 }

404 — Not Found

Recurso No Encontrado

Causa: El ID, ISBN o fecha proporcionados no corresponden a ningún documento en el sistema.

Solución: Verifique el identificador. Utilice el endpoint de búsqueda para encontrar el ID o ISBN correcto antes de consultarlo directamente.

{
                    "status": 404,
                    "message": "No existe documento jurisprudencia con id '99999'"
}

429 — Too Many Requests

Límite de Peticiones Excedido

Causa: Su IP ha enviado más de 100 peticiones en un período de 1 minuto.

Solución: Espere al menos 1 minuto antes de reintentar. Implemente retroceso exponencial en su código.

{
                    "error": "Ha superado el límite de peticiones permitidas."
}

Ejemplo de retroceso exponencial en JavaScript:

async function fetchConReintento(url, opciones, maxIntentos = 3) {
                    for (let intento = 1; intento <= maxIntentos; intento++) {
                    const response = await fetch(url, opciones);
                    if (response.status !== 429) return response;
                    const espera = Math.pow(2, intento) * 1000;
    console.warn(`Rate limit. Reintentando en ${espera}ms...`);
                    await new Promise(r => setTimeout(r, espera));
  }
                    throw new Error('Máximo de reintentos alcanzado');
}

500 — Internal Server Error

Error Interno del Servidor

Causa: El servidor experimentó un error inesperado, posiblemente al comunicarse con las fuentes de datos externas (Apitol, CloudLibrary, Juristeca).

Solución: Reintente la solicitud pasados unos segundos. Si el error persiste, contacte al soporte técnico del Poder Judicial indicando el endpoint utilizado, los parámetros enviados y la hora de la solicitud.

Buenas Prácticas de Manejo de Errores

  • Siempre valide el código de estado HTTP antes de procesar la respuesta.
  • Lea el cuerpo del mensaje de error para presentar información útil al usuario.
  • Implemente lógica de reintento exclusivamente para errores 429 y 500 (no para 400/404).
  • Registre los errores con contexto (URL, parámetros, timestamp) para facilitar la depuración.
  • Informe al usuario final con mensajes claros y en español, sin exponer detalles técnicos.
  • Implemente cache para reducir el número de peticiones y evitar el error 429.

Anexo: Glosario de Términos

Término Definición
API Application Programming Interface. Interfaz que permite la comunicación entre sistemas de software a través de un protocolo definido.
REST Representational State Transfer. Estilo arquitectónico para servicios web que utiliza los métodos HTTP estándar.
JSON JavaScript Object Notation. Formato ligero de intercambio de datos, legible por humanos y fácil de procesar por máquinas.
Endpoint Punto de acceso específico de una API, identificado por una URL y un método HTTP.
Rate Limiting Mecanismo de control que limita la cantidad de peticiones que un cliente puede realizar en un período de tiempo determinado.
HTTPS Hypertext Transfer Protocol Secure. Versión cifrada del protocolo HTTP que garantiza la seguridad de las comunicaciones mediante TLS.
Query Parameter Parámetro enviado en la URL después del símbolo ?, usado principalmente en peticiones GET.
Path Parameter Parámetro integrado directamente en la ruta de la URL, como el {id} en /jurisprudencia/{id}.
Request Body Cuerpo de la solicitud HTTP, utilizado en peticiones POST para enviar datos estructurados en formato JSON.
Paginación Técnica para dividir grandes conjuntos de resultados en páginas, controlada mediante los parámetros page y rows.
ISBN International Standard Book Number. Código numérico único que identifica un libro de forma internacional.
Retroceso Exponencial Estrategia de reintento donde el tiempo de espera entre intentos aumenta exponencialmente para evitar sobrecargar el servidor.

Preguntas Frecuentes

Una API (Interfaz de Programación de Aplicaciones) es un puente de comunicación que permite que tu aplicación solicite y reciba datos específicos de nuestros sistemas de justicia de forma segura y estandarizada.

Puedes encontrar la documentación completa en la página de cada una de las APIs listadas en la sección de APIs Judiciales. Incluye ejemplos de código y guías detalladas para ayudarte a integrarlas de forma rápida, ya que nuestras APIs son gratuitas y abiertas.

Como nuestras APIs son abiertas, puedes empezar a usarlas de inmediato. Solo tienes que ir a la sección de APIs Judiciales, seleccionar la que necesites y seguir la documentación para empezar a hacer tus primeras consultas. No necesitas registrarte ni obtener una clave API.