API InformeLegal
Integrá la gestión de expedientes a tus sistemas. REST + JSON, claves por ambiente, idempotencia y webhooks firmados.
Scoring de expedientes por API
Contactabilidad, situación legal y financiera de la persona principal, con historial inmutable, explicación de cada factor y variables propias de tu negocio. Conocé el módulo completo y después integralo con los ejemplos de esta página.
il_test_ y il_live_. Las claves de sandbox no generan cargos.Idempotency-Key en cada POST. Cacheamos la respuesta 7 días.X-InformeLegal-Signature con reintentos exponenciales.- 1
Creá tu cuenta y accedé al portal.
- 2
Generá una clave
il_test_...desdeClaves API. - 3
Probá los endpoints en el
Playgroundincluido en el portal.
/api/public/v1 · agrupadas igual que en Swagger.Idempotency-Key · los listados paginan con nextCursor · cada fila indica el scope que la API Key debe tener habilitado.Expedientes6 endpoints
Swagger- POST
/api /public /v1 /cases Crear expediente (con partes, identificaciones y contactos)
cases:create - GET
/api /public /v1 /cases Listar expedientes (paginado por cursor; filtro ?externalReference=CRM-2026-0001)
cases:read - GET
/api /public /v1 /cases /{reference} Detalle completo; include=parties,filings,objects,caseTags,relatedCases,scoring,scoringRuns
cases:read - PATCH
/api /public /v1 /cases /{reference} Actualización parcial: solo se modifican los campos enviados
cases:update - GET
/api /public /v1 /cases /by-external-reference /{id} Detalle por referencia externa (?system=CRM)
cases:read - PATCH
/api /public /v1 /cases /by-external-reference /{id} Actualización parcial por referencia externa
cases:update
Comunicaciones6 endpoints
Swagger- POST
/api /public /v1 /cases /{reference} /communications Enviar comunicación (email) o documentar un envío externo con external=true
case_communications:create Ver ejemplo - GET
/api /public /v1 /cases /{reference} /communications Listar comunicaciones del expediente
case_communications:read - GET
/api /public /v1 /cases /{reference} /communications /{id} Detalle: destinatarios, eventos y externalLog
case_communications:read - POST
/api /public /v1 /cases /{reference} /communications /{id} /cancel Cancelar una comunicación pendiente de envío
case_communications:cancel - POST
/api /public /v1 /cases /{reference} /communications /{id} /status Actualizar estado y eventos (webhooks) — todos los canales
case_communications:update Ver ejemplo - PATCH
/api /public /v1 /cases /{reference} /communications /{id} /status Alias del anterior para integraciones que prefieren PATCH
case_communications:update Ver ejemplo
Scoring5 endpoints
Swagger- POST
/api /public /v1 /cases /{reference} /scoring Solicitar una ejecución de scoring (asincrónica, responde 202)
scoring:execute - GET
/api /public /v1 /cases /{reference} /scoring Último scoring (?runId=... una corrida puntual · ?history=true historial)
scoring:read - GET
/api /public /v1 /scoring /requests /{id} Estado de una solicitud de scoring (polling cada 3–5 s)
scoring:read - GET
/api /public /v1 /cases /{reference} /scoring /variables Listar las variables externas cargadas en el expediente
scoring:read - POST
/api /public /v1 /cases /{reference} /scoring /variables Cargar variables externas del cliente (namespace client.*)
scoring:variables:write
Movimientos2 endpoints
Swagger- GET
/api /public /v1 /cases /{reference} /movements Listar movimientos del expediente
case_movements:read - POST
/api /public /v1 /cases /{reference} /movements Agregar movimiento (nota, intimación, etc.)
case_movements:create
Documentos2 endpoints
Swagger- GET
/api /public /v1 /cases /{reference} /documents Listar documentos del expediente
documents:read - POST
/api /public /v1 /cases /{reference} /documents Subir documento (URL firmada + confirmación con sha256)
documents:create
Identificaciones1 endpoint
Swagger- POST
/api /public /v1 /identifiers /validate Validar y clasificar una identificación por país (CUIT/CUIL, DNI, etc.)
identifiers:validate
Autologin4 endpoints
Swagger- POST
/api /public /v1 /users /{user_id} /autologin Crear token de un solo uso (USER_ID acepta UUID o email)
autologin:create Ver ejemplo - GET
/api /public /v1 /users /{user_id} /autologin /{token_id} Consultar el estado de un token emitido
autologin:read Ver ejemplo - POST
/api /public /v1 /users /{user_id} /autologin /{token_id} /revoke Revocar un token puntual
autologin:revoke Ver ejemplo - POST
/api /public /v1 /users /{user_id} /autologin /revoke-all Revocar todos los tokens activos del usuario
autologin:revoke Ver ejemplo
external: true)- InformeLegal no envía ninguna comunicación.
- No se valida remitente, canal ni contenido: se acepta cualquier canal (
email,sms,whatsapp,postal,phone,other). - La comunicación se guarda directamente en estado
sentjunto con su log de trazabilidad. - El objeto
externalLogqueda disponible en el detalle y el listado de comunicaciones (API y portal).
curl -X POST https://informelegal.org/api/public/v1/cases/AR-2026-00001234/communications \
-H "Authorization: Bearer $ILK_SECRET" \
-H "Content-Type: application/json" \
-d '{
"external": true,
"channel": "whatsapp",
"subject": "Intimación de pago",
"contentText": "Notificación enviada desde el CRM propio.",
"recipients": [{ "destination": "+5491122334455", "recipientType": "to", "role": "TITULAR" }],
"externalReference": "CRM-2026-0007",
"externalLog": {
"system": "CRM Propio",
"providerName": "Twilio",
"providerMessageId": "SM1234567890",
"status": "delivered",
"sentAt": "2026-08-18T14:05:00Z",
"deliveredAt": "2026-08-18T14:05:12Z",
"operator": "mlopez",
"cost": 0.04,
"currency": "USD",
"evidenceUrl": "https://crm.example.com/evidencias/SM1234567890.pdf"
}
}'POST (o PATCH) /api/public/v1/cases/{reference}/communications/{id}/status · scope case_communications:update · aplica a todos los canales.- Identificá cada destinatario por
recipientId,destinationoexternalId. - Los eventos quedan auditados en el historial del destinatario y en el log técnico de intentos de entrega.
- Si no enviás
status, InformeLegal lo deriva (sent,partialofailed) y recalcula los contadores. - Se emite el webhook saliente correspondiente:
communication.sent,communication.failedocommunication.cancelled.
Estados de comunicación
draft · scheduled · queued · sending · sent · partial · delivered · failed · cancelled
Estados de destinatario
pending · queued · sending · sent · delivered · read · failed · bounced · rejected · blocked · opted_out · cancelled
Eventos (webhooks)
queued · sending · sent · accepted · delivered · opened · clicked · read · deferred · failed · bounced · rejected · complained · unsubscribed · blocked · cancelled
Normalización: accepted→sent; opened/clicked→read; bounced/rejected→failed; complained/unsubscribed→opted_out; deferred→sending.
curl -X POST https://informelegal.org/api/public/v1/cases/AR-2026-00001234/communications/{communicationId}/status \
-H "Authorization: Bearer $ILK_SECRET" \
-H "Content-Type: application/json" \
-d '{
"externalLog": { "providerName": "Twilio", "system": "CRM Propio" },
"events": [
{ "destination": "+5491122334455", "event": "delivered", "occurredAt": "2026-08-21T13:05:00Z", "providerMessageId": "SM1234567890" },
{ "destination": "deudor@example.com", "event": "bounced", "errorCode": "550", "errorMessage": "mailbox not found" }
]
}'curl -X POST https://informelegal.org/api/public/v1/cases -H "Authorization: Bearer il_test_XXXXXXXXXXXX" -H "Content-Type: application/json" -H "Idempotency-Key: 8a1b2c3d-..." -d '{
"externalReference": { "system": "CRM", "id": "2026-0001" },
"country": "AR",
"caseType": "COBRANZA",
"category": "Deuda comercial",
"subcategory": "Factura impaga",
"campaign": "Recupero Q3 2026",
"openedAt": "2026-07-20T10:00:00.000Z",
"status": "INICIADO",
"currency": "ARS",
"originalAmount": 125000,
"currentBalance": 148750,
"feesAmount": 12500,
"expensesAmount": 3500,
"interestAmount": 18750,
"taxAmount": 0,
"product": "Cuenta corriente",
"branch": "Casa central",
"origin": "Sistema externo",
"sourceChannel": "API",
"subject": "Cobranza extrajudicial de factura impaga",
"description": "Factura 0001-00001234 vencida, enviada desde el CRM.",
"priority": "normal",
"riskLevel": "medio",
"confidentiality": "normal",
"dueDate": "2026-07-27T10:00:00.000Z",
"prescriptionDate": "2027-07-20T10:00:00.000Z",
"publicReportEnabled": true,
"notifyCaseCreated": true,
"customFields": { "asignacion": "Equipo Recupero A" },
"internalNotes": "Caso creado por integración API en ambiente sandbox.",
"parties": [
{
"role": "TITULAR",
"isPrimary": true,
"person": {
"personType": "INDIVIDUAL",
"country": "AR",
"firstName": "Juan",
"lastName": "Pérez",
"fullName": "Juan Pérez",
"identifications": [
{ "type": "CUIT", "number": "20-31763804-4", "isPrimary": true }
],
"contacts": [
{ "type": "EMAIL", "value": "juan.perez@example.com" },
{ "type": "PHONE", "value": "+5491155550101" }
]
}
},
{
"role": "GARANTE",
"person": {
"personType": "INDIVIDUAL",
"country": "AR",
"fullName": "María García",
"identifications": [
{ "type": "CUIT", "value": "27-30123456-8" }
],
"emails": ["maria.garcia@example.com"],
"phones": ["+5491155550102"]
}
}
],
"tags": ["sandbox", "api", "cobranza"]
}'La respuesta incluye publicCaseUrl: una URL pública de solo lectura del expediente, válida por 60 minutos, lista para compartir o embeber en un iframe.
{
"success": true,
"data": {
"caseId": "57464021-88d1-4a88-89aa-f25dcd8a1b2c",
"caseNumber": "EXP-2026-000123",
"caseReference": "csr_XXXXXXXXXXXX",
"internalNumber": null,
"externalNumber": null,
"status": "INICIADO",
"createdAt": "2026-07-20T10:00:01.123Z",
"campaign": "Recupero Q3 2026",
"campaignPublicUrl": "https://informelegal.org/campana/a3261a57-...",
"publicCaseUrl": "https://informelegal.org/expediente-publico/AbC123...",
"publicCaseToken": "AbC123...",
"publicCaseExpiresAt": "2026-07-20T11:00:01.123Z",
"parties": [ { "partyId": "...", "role": "TITULAR", "personId": "...", "resolution": "NEW_PERSON" } ]
}
}autologin:create, que se otorga por separado del resto de los permisos de la API Key.- En la URL,
USER_IDacepta tanto el UUID del usuario como su email (por ejemplousuario@empresa.com). - Solo se resuelven usuarios que pertenecen a la organización de la API Key; en caso contrario se devuelve
403 AUTOLOGIN_USER_NOT_ALLOWEDo404 AUTOLOGIN_USER_NOT_FOUND. - El token es una credencial: tratalo como un secreto, no lo registres en logs ni lo envíes por canales inseguros.
- El valor completo se devuelve solo al crearlo; la base conserva únicamente su hash.
- Es de un solo uso y se invalida en el momento del canje.
- Vigencia mínima 60s, por defecto 600s y máximo 3600s (1 hora).
- Portales permitidos:
user_portal,company_portal,legal_firm_portal. El portal administrador no está habilitado. redirect_pathdebe ser una ruta interna relativa dentro de la allowlist de la API Key (sin dominios externos ni..).- Con
invalidate_previous: true(default) los tokens activos previos del mismo usuario y portal quedan comoreplaced. - La sesión creada usa exclusivamente los roles y permisos actuales del usuario: nunca hereda permisos de la API Key.
- Se aplica idempotencia por
Idempotency-Keyy límites de emisión por API Key (respuesta429). - Endpoints complementarios: consulta de estado, revocación de un token y
revoke-all.
curl --request POST \
--url https://www.informelegal.org/api/public/v1/users/USER_ID/autologin \
--header 'Authorization: Bearer API_KEY' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: autologin-user-123-001' \
--data '{
"portal": "user_portal",
"expires_in_seconds": 600,
"redirect_path": "/expedientes",
"invalidate_previous": true,
"external_reference": "CRM-LOGIN-001"
}'- Se configuran en el portal, en Variables personalizadas, indicando entidad, código, etiqueta y tipo (texto, texto largo, número, fecha, sí/no o lista de opciones).
- Se envían y se devuelven en el objeto opcional
customFields, donde cada clave es elcódigode la variable. - Disponibles en expedientes (
POST/GET /v1/cases), partes, movimientos y comunicaciones. - Todas son opcionales. Un código inexistente devuelve
422 UNKNOWN_CUSTOM_FIELDy un valor con tipo inválido422 INVALID_CUSTOM_FIELD.
"customFields": { "asignacion": "Equipo Recupero A", "importancia": "Alta" }Parámetros de URL del portal
Se pueden agregar como query string a cualquier página del portal (empresas, estudios o usuarios).
| Parámetro | Valores | Comportamiento |
|---|---|---|
hideMenu | true / false | Colapsa el menú lateral a solo íconos (true) o lo abre (false). El usuario puede volver a expandirlo desde el botón del header. Si no se envía, se respeta la última preferencia guardada. |
deleteMenu | true / false | Con true elimina por completo la barra lateral y sus botones: no puede reabrirse y se ignora hideMenu. Con false o ausente, manda hideMenu. |
readonly | true / false | Aplica a la ficha de expediente (/panel/expedientes/{id} y /expedientes/{id}). Con true la ficha se muestra en modo solo lectura: se ocultan los botones de edición, alta y borrado (movimientos, documentos, partes, campos personalizados, datos financieros). Combinado con deleteMenu=true también se oculta el enlace de volver, ideal para embeber la ficha. |
Ejemplo: https://www.informelegal.org/panel/expedientes?deleteMenu=true
Autorización de dominios para iframes
Por defecto las páginas solo pueden embeberse en el propio dominio (frame-ancestors 'self'). Para embeberlas en tu sitio, tu webmaster debe solicitarnos el alta del dominio de origen. Datos a enviar:
- Dominio exacto desde el que se va a embeber (por ejemplo
https://app.tuempresa.com). Se admiten comodines de subdominio:*.tuempresa.com. - Rutas a habilitar: puntuales (
/expediente-publico/*,/informe-legal/*,/panel/*) o todo el sitio (/*). - Organización asociada (opcional) y ambiente (sandbox o producción).
Una vez autorizado, el servidor deja de enviar X-Frame-Options en esas rutas y publica Content-Security-Policy: frame-ancestors 'self' https://tu-dominio. Los cambios se propagan en menos de 60 segundos.
Nunca se habilitan para embebido las rutas de API (/api/*), autenticación (/auth) ni el portal administrador (/admin).
Ejemplos de integración
<!-- Portal embebido sin menú lateral -->
<iframe
src="https://www.informelegal.org/panel/expedientes?deleteMenu=true"
width="100%"
height="800"
style="border:0"
referrerpolicy="strict-origin-when-cross-origin"
allow="clipboard-write"
title="InformeLegal"
></iframe><!-- Expediente público (token temporal de 60 minutos) -->
<iframe
src="https://www.informelegal.org/expediente-publico/AbC123..."
width="100%"
height="900"
style="border:0"
title="Expediente público"
></iframe>Para que el usuario quede logueado dentro del iframe sin tipear su contraseña, combiná el endpoint de autologin con redirect_path y agregale ?deleteMenu=true.
Recomendaciones para el webmaster
- Servir tu página siempre por HTTPS: el navegador bloquea contenido mixto.
- No usar
sandboxsinallow-scripts allow-same-origin allow-forms allow-popups. - Evitar bloqueos de cookies de terceros si embebés páginas con sesión (usá autologin en cada carga).
- Altura mínima sugerida: 800 px, o ajustar dinámicamente según tu layout.