Texto que contiene la referencia al órgano judicial.
Inteligencia Artificial
Extracción de datos, asistente de expedientes, generación de documentos y análisis con IA
curl https://app.getplea.com/api/ai/status
const { available, model } = await fetch('/api/ai/status').then(r => r.json());
{
"available": true,
"model": "gpt-4o",
"provider": "openai",
"features": ["document-analysis", "case-assistant", "document-generation", "data-extraction"]
}
curl -X POST https://app.getplea.com/api/ai/extract-case-from-documents \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-H "x-organization-id: ORG_ID" \
-d '{"documentIds": ["doc-uuid-1", "doc-uuid-2"]}'
const extracted = await fetch('/api/ai/extract-case-from-documents', {
method: 'POST',
headers: {
'Authorization': 'Bearer TOKEN',
'Content-Type': 'application/json',
'x-organization-id': 'ORG_ID'
},
body: JSON.stringify({ documentIds: ['doc-uuid-1', 'doc-uuid-2'] })
}).then(r => r.json());
{
"caseType": "civil",
"description": "Reclamación de cantidad por servicios profesionales impagados",
"opposingParty": "Construcciones Norte S.L.",
"judicialBody": "Juzgado de Primera Instancia",
"judicialBodyNumber": "12",
"judicialDistrict": "Madrid",
"procedureType": "Juicio ordinario",
"courtFileNumber": "0042/26",
"amount": 45000.00,
"client": {
"name": "Elena Martínez Ruiz",
"taxId": "12345678A"
},
"confidence": 0.89
}
curl -X POST https://app.getplea.com/api/ai/extract-organismo \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-H "x-organization-id: ORG_ID" \
-d '{"text": "Juzgado de Primera Instancia e Instrucción nº 3 de Alcobendas"}'
const result = await fetch('/api/ai/extract-organismo', {
method: 'POST',
headers: {
'Authorization': 'Bearer TOKEN',
'Content-Type': 'application/json',
'x-organization-id': 'ORG_ID'
},
body: JSON.stringify({
text: 'Juzgado de Primera Instancia e Instrucción nº 3 de Alcobendas'
})
}).then(r => r.json());
{
"judicialBody": "Juzgado de Primera Instancia e Instrucción",
"judicialBodyNumber": "3",
"judicialDistrict": "Alcobendas"
}
curl -X POST https://app.getplea.com/api/ai/generate-case-description \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-H "x-organization-id: ORG_ID" \
-d '{"caseId": "case-uuid-1"}'
const { description } = await fetch('/api/ai/generate-case-description', {
method: 'POST',
headers: {
'Authorization': 'Bearer TOKEN',
'Content-Type': 'application/json',
'x-organization-id': 'ORG_ID'
},
body: JSON.stringify({ caseId: 'case-uuid-1' })
}).then(r => r.json());
{
"description": "Procedimiento ordinario civil por reclamación de cantidad de 45.000€ contra Construcciones Norte S.L. por impago de servicios profesionales de consultoría prestados entre enero y septiembre de 2025. La parte actora, Dña. Elena Martínez Ruiz, reclama el importe total de las facturas emitidas más intereses de demora."
}
curl -X POST https://app.getplea.com/api/ai/analyze-document \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-H "x-organization-id: ORG_ID" \
-d '{"documentId": "doc-uuid-1", "prompt": "Extrae las cláusulas más relevantes"}'
const analysis = await fetch('/api/ai/analyze-document', {
method: 'POST',
headers: {
'Authorization': 'Bearer TOKEN',
'Content-Type': 'application/json',
'x-organization-id': 'ORG_ID'
},
body: JSON.stringify({
documentId: 'doc-uuid-1',
prompt: 'Extrae las cláusulas más relevantes'
})
}).then(r => r.json());
{
"documentId": "doc-uuid-1",
"summary": "Contrato de arrendamiento de local comercial...",
"keyPoints": [
"Duración: 5 años con prórroga automática",
"Renta mensual: 1.200€ + IVA",
"Fianza: 2 mensualidades",
"Cláusula de resolución anticipada con penalización de 3 meses"
],
"entities": {
"parties": ["Elena Martínez Ruiz", "Inmobiliaria Centro S.L."],
"dates": ["2026-01-01", "2031-01-01"],
"amounts": [1200.00, 2400.00]
}
}
curl -X POST https://app.getplea.com/api/ai/case-assistant \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-H "x-organization-id: ORG_ID" \
-d '{
"caseId": "case-uuid-1",
"message": "¿Cuáles son los plazos procesales pendientes?"
}'
const { response } = await fetch('/api/ai/case-assistant', {
method: 'POST',
headers: {
'Authorization': 'Bearer TOKEN',
'Content-Type': 'application/json',
'x-organization-id': 'ORG_ID'
},
body: JSON.stringify({
caseId: 'case-uuid-1',
message: '¿Cuáles son los plazos procesales pendientes?'
})
}).then(r => r.json());
{
"response": "Según la documentación del expediente 2026/0042, los plazos procesales pendientes son:
1. **Contestación a la demanda**: 20 días hábiles desde la notificación (vence aprox. 25 de marzo de 2026)
2. **Audiencia previa**: pendiente de señalamiento por el juzgado
Te recomiendo preparar la contestación con antelación y solicitar la documentación al cliente.",
"sources": [
{"type": "document", "name": "Demanda.pdf", "relevance": 0.95},
{"type": "task", "name": "Preparar contestación", "relevance": 0.88}
]
}
const response = await fetch('/api/ai/case-assistant-stream', {
method: 'POST',
headers: {
'Authorization': 'Bearer TOKEN',
'Content-Type': 'application/json',
'x-organization-id': 'ORG_ID'
},
body: JSON.stringify({
caseId: 'case-uuid-1',
message: '¿Cuáles son los plazos procesales pendientes?'
})
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
process.stdout.write(chunk);
}
Content-Type: text/event-stream
data: {"content": "Según la "}
data: {"content": "documentación del "}
data: {"content": "expediente 2026/0042..."}
data: {"done": true}
curl -X POST https://app.getplea.com/api/ai/generate-legal-document \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-H "x-organization-id: ORG_ID" \
-d '{
"caseId": "case-uuid-1",
"documentType": "demanda",
"instructions": "Incluir petición subsidiaria de daños y perjuicios"
}'
const response = await fetch('/api/ai/generate-legal-document', {
method: 'POST',
headers: {
'Authorization': 'Bearer TOKEN',
'Content-Type': 'application/json',
'x-organization-id': 'ORG_ID'
},
body: JSON.stringify({
caseId: 'case-uuid-1',
documentType: 'demanda',
instructions: 'Incluir petición subsidiaria de daños y perjuicios'
})
});
Content-Type: text/event-stream
data: {"content": "AL JUZGADO DE PRIMERA INSTANCIA DE MADRID
"}
data: {"content": "D./Dña. Ana López Fernández, Abogada colegiada..."}
data: {"done": true, "documentId": "doc-uuid-generated"}
curl https://app.getplea.com/api/ai-settings \
-H "Authorization: Bearer TOKEN" \
-H "x-organization-id: ORG_ID"
const settings = await fetch('/api/ai-settings', {
headers: {
'Authorization': 'Bearer TOKEN',
'x-organization-id': 'ORG_ID'
}
}).then(r => r.json());
{
"model": "gpt-4o",
"language": "es",
"customInstructions": "Siempre usar terminología jurídica española",
"maxTokens": 4096,
"temperature": 0.3
}
curl -X PUT https://app.getplea.com/api/ai-settings \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-H "x-organization-id: ORG_ID" \
-d '{"model": "gpt-4o", "customInstructions": "Usar terminología jurídica catalana cuando sea posible"}'
await fetch('/api/ai-settings', {
method: 'PUT',
headers: {
'Authorization': 'Bearer TOKEN',
'Content-Type': 'application/json',
'x-organization-id': 'ORG_ID'
},
body: JSON.stringify({
model: 'gpt-4o',
customInstructions: 'Usar terminología jurídica catalana cuando sea posible'
})
});
{
"model": "gpt-4o",
"language": "es",
"customInstructions": "Usar terminología jurídica catalana cuando sea posible",
"updatedAt": "2026-03-07T12:00:00Z"
}
curl https://app.getplea.com/api/ai-usage/summary \
-H "Authorization: Bearer TOKEN" \
-H "x-organization-id: ORG_ID"
const usage = await fetch('/api/ai-usage/summary', {
headers: {
'Authorization': 'Bearer TOKEN',
'x-organization-id': 'ORG_ID'
}
}).then(r => r.json());
{
"period": "2026-03",
"totalRequests": 342,
"totalTokens": 1250000,
"estimatedCost": 18.75,
"breakdown": {
"documentAnalysis": 120,
"caseAssistant": 180,
"documentGeneration": 42
}
}
Endpoints del motor de IA de Plea: extracción automática de datos desde documentos, asistente inteligente por expediente, generación de documentos legales y análisis de textos.
Los endpoints que terminan en -stream devuelven Server-Sent Events (SSE). Mantén la conexión abierta y procesa los eventos conforme llegan.
GET /api/ai/status
Verifica el estado del servicio de IA (no requiere autenticación).
POST /api/ai/extract-case-from-documents
Extrae datos estructurados de un expediente a partir de documentos adjuntos (demandas, sentencias, contratos).
Array de UUIDs de documentos a analizar.
POST /api/ai/extract-organismo
Extrae y normaliza datos de un órgano judicial a partir de texto libre.
POST /api/ai/generate-case-description
Genera una descripción profesional del expediente a partir de los datos disponibles.
UUID del expediente.
POST /api/ai/analyze-document
Analiza un documento y devuelve un resumen estructurado.
UUID del documento.
Instrucciones adicionales para el análisis.
POST /api/ai/case-assistant
Envía una pregunta al asistente IA de un expediente específico (respuesta completa).
UUID del expediente.
Pregunta o instrucción para la IA.
POST /api/ai/case-assistant-stream
Versión streaming (SSE) del asistente de expediente.
UUID del expediente.
Pregunta o instrucción.
POST /api/ai/generate-legal-document
Genera un documento legal completo mediante IA (SSE).
UUID del expediente.
Tipo: demanda, contestacion, recurso, escrito, contrato, carta.
Instrucciones adicionales.
GET /api/ai-settings
Obtiene la configuración de IA de la organización.
PUT /api/ai-settings
Actualiza la configuración de IA.
Modelo a usar: gpt-4o, gpt-4o-mini.
Idioma: es, en, ca.
Instrucciones personalizadas para la IA.
GET /api/ai-usage/summary
Obtiene el resumen de uso de IA (tokens, peticiones, costes estimados).
Last updated today