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
¿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
- Conexión a Internet: Necesaria para enviar peticiones HTTP/HTTPS al servidor.
-
Cliente HTTP: Puede utilizar cualquiera de las siguientes opciones:
- Herramientas gráficas: Postman, Insomnia o similar.
- Línea de comandos:
cURLoHTTPie. - Código en cualquier lenguaje: JavaScript, Python, C#, Java, PHP, etc.
- Navegador web (solo para los endpoints GET).
- Soporte para JSON: Librería o función nativa para parsear respuestas JSON.
- 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/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
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/boletinesJurisprudencia
Decisiones judiciales: buscar por términos o recuperar por ID con metadatos completos.
api/v1/jurisprudenciaLegislación
Leyes, decretos y normativas vigentes. Incluye datos de Gaceta Oficial.
api/v1/legislacionDoctrina
Libros y publicaciones jurídicas con información de autores y editorial.
api/v1/doctrinaResumen 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).
Obtener Boletín Judicial
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.
Buscar Jurisprudencia
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. |
Obtener Jurisprudencia por 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 | Sí | 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.
Buscar Legislación
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
}
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. |
Obtener Legislación por ID
Recupera un documento legislativo específico mediante su identificador numérico.
Parámetros de Ruta
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
id |
integer | Sí | 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.
Buscar Doctrina
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. |
Obtener Doctrina por 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 | Sí | 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.
| Ejemplo | Efecto |
|---|---|
["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".
| Valor | Descripció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.
| Escenario | page | rows | Resultado |
|---|---|---|---|
| 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 |
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. |