Documentación · API REST v1
API de Autenflow
Integra la verificación forense de documentos en tu CRM, marketplace o flujo interno. La API procesa nóminas, vidas laborales y contratos en menos de 30 segundos por documento.
Autenticación
Todas las llamadas requieren cabecera Authorization: Bearer <tu_api_key>.
Las API keys se generan desde el panel: Cuenta → API Keys.
- Live (prefijo
vrd_live_): consume créditos reales del plan. - Test (prefijo
vrd_test_): para pruebas, no consume créditos.
Endpoint principal · Verificar un documento
/api/v1/verifySube un PDF o imagen, recibe un verification_id
Multipart con tres campos: file, document_type y opcional client_ref.
curl -X POST 'https://backend-production-173a.up.railway.app/api/v1/verify' \
-H 'Authorization: Bearer vrd_live_xxxxx' \
-F 'file=@/ruta/al/documento.pdf' \
-F 'document_type=nomina' \
-F 'client_ref=candidato-juan-perez-123'Respuesta inmediata (202):
{
"verification_id": "8c4f2e8a-...",
"status": "pending"
}nomina · contrato · vida_laboralConsultar resultado
/api/v1/verify/{verification_id}Recupera el resultado de una verificación
El procesamiento tarda 8-25 segundos. Hacé polling hasta que status === "completed" o "failed".
curl 'https://backend-production-173a.up.railway.app/api/v1/verify/8c4f2e8a-...' \
-H 'Authorization: Bearer vrd_live_xxxxx'Respuesta cuando completed (200):
{
"verification_id": "8c4f2e8a-...",
"document_type": "nomina",
"status": "completed",
"score": 91,
"verdict": "AUTENTICO",
"recommendation": "La nómina presenta evidencia positiva suficiente...",
"flags": [],
"flags_count": { "critical": 0, "high": 0, "medium": 0, "low": 0 },
"trust_signals": [
{ "code": "MATH_NOMINA_COHERENTE", "points": 15, "detail": "..." },
...
],
"extracted_data": {
"empresa": "ACME SL",
"cif": "B12345674",
"trabajador": "JUAN PEREZ",
"nif": "12345678Z",
"salario_bruto": 2200.0,
"salario_neto": 1850.0,
"irpf_pct": 12.5,
"periodo": "2026-04"
},
"document_hash": "sha256:...",
"processing_time_ms": 18432,
"created_at": "2026-05-25T10:00:00Z",
"completed_at": "2026-05-25T10:00:18Z",
"error_message": null
}Veredictos posibles
- AUTENTICO≥ 75Evidencia positiva suficiente. Proceder con normalidad.
- REVISAR50 – 74Señales mixtas o falta evidencia. Solicitar contraste antes de decidir.
- SOSPECHOSO25 – 49Múltiples indicadores de manipulación. No usar como prueba única.
- ALTO_RIESGO0 – 24Indicadores graves de falsificación. No proceder.
Descargar el informe PDF
/api/v1/verify/{verification_id}/reportPDF descargable con análisis completo
curl 'https://backend-production-173a.up.railway.app/api/v1/verify/8c4f2e8a-.../report' \
-H 'Authorization: Bearer vrd_live_xxxxx' \
-o informe.pdfListar verificaciones
/api/v1/verificationsLista paginada de tus verificaciones (filtros opcionales)
curl 'https://backend-production-173a.up.railway.app/api/v1/verifications?page=1&page_size=25&verdict=AUTENTICO' \
-H 'Authorization: Bearer vrd_live_xxxxx'Filtros: page, page_size (max 100), verdict, document_type, search (busca en client_ref).
Ejemplos rápidos por lenguaje
Python
import requests
API_KEY = "vrd_live_xxxxx"
BASE = "https://backend-production-173a.up.railway.app/api/v1"
# 1. Subir documento
with open("nomina.pdf", "rb") as f:
r = requests.post(
f"{BASE}/verify",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": f},
data={"document_type": "nomina", "client_ref": "candidato-001"},
)
verification_id = r.json()["verification_id"]
# 2. Polling hasta completed
import time
while True:
r = requests.get(
f"{BASE}/verify/{verification_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
data = r.json()
if data["status"] in ("completed", "failed"):
break
time.sleep(2)
print(f"Veredicto: {data['verdict']} (score {data['score']}/100)")Node.js (fetch)
const API_KEY = "vrd_live_xxxxx";
const BASE = "https://backend-production-173a.up.railway.app/api/v1";
// 1. Subir documento
const fd = new FormData();
fd.append("file", fileBlob, "nomina.pdf");
fd.append("document_type", "nomina");
fd.append("client_ref", "candidato-001");
let r = await fetch(`${BASE}/verify`, {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}` },
body: fd,
});
const { verification_id } = await r.json();
// 2. Polling
let data;
while (true) {
r = await fetch(`${BASE}/verify/${verification_id}`, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
data = await r.json();
if (data.status === "completed" || data.status === "failed") break;
await new Promise(r => setTimeout(r, 2000));
}
console.log(`Veredicto: ${data.verdict} (score ${data.score}/100)`);Rate limits y SLA
- Pro: 100 verificaciones/mes, sin rate limit individual.
- Business: 500 verificaciones/mes, hasta 10 calls simultáneas por API key.
- Enterprise: volumen ilimitado + SLA 99,9% + soporte 24/7. Consulta: founder@autenflow.es.
Códigos de error
| Status | Significado |
|---|---|
| 401 | API key inválida o ausente |
| 402 | Plan agotado (sin créditos) |
| 413 | Archivo > 10 MB |
| 415 | Tipo de archivo no soportado |
| 429 | Demasiadas requests simultáneas |
| 500 | Error interno (retry en 5s) |
OpenAPI / Swagger
Spec completa interactiva: https://backend-production-173a.up.railway.app/docs