Automatización de Contratación
API integral para enviar y retirar ofertas en 5 portales de licitación pública. Cifrado, carga de archivos y registro paso a paso — todo a través de una única API REST. Actualmente en beta — para solicitar acceso, contáctenos.
Portales compatibles
/api/v2/procurement/portalsNEN (nen.nipez.cz), E-ZAK (URL de instancia), TenderArena, Eveza (URL de instancia), E-zakazky.cz (URL de instancia). E-ZAK, Eveza y E-zakazky requieren portalUrl — la URL de la instancia específica.
Envío de una oferta
/api/v2/procurement/bidsParámetros del cuerpo
| Parámetro | Tipo | Descripción |
|---|---|---|
| portal* | string | NEN | EZAK | TENDERARENA | EVEZA | EZAKAZKY |
| tenderId* | string | ID de la licitación en el portal |
| credentialId | string | ID de credencial almacenada (o proporcionar credenciales) |
| credentials | object | {username, password, portalUrl?} — alternativa a credentialId |
| files | array | [{name, url, size}] — archivos de la oferta |
| criteria | array | [{name, value}] — criterios de evaluación |
| tenderTitle | string | Título de la licitación (para resumen) |
| dryRun | boolean | true = prueba sin envío final |
curl -X POST https://veritra.io/api/v2/procurement/bids \
-H "X-API-Key: mrw_procurement_..." \
-H "Content-Type: application/json" \
-d '{
"portal": "NEN",
"tenderId": "N006-24-V00012345",
"credentialId": "clx1abc...",
"files": [{"name": "oferta.pdf", "url": "https://..."}],
"criteria": [{"name": "Precio de la oferta", "value": "1500000"}]
}'{
"jobId": "clx1abc...",
"status": "PENDING",
"message": "Job created — will be processed by cron"
}Estado del trabajo
/api/v2/procurement/bids/:jobId{
"id": "clx1abc...",
"type": "SUBMIT_BID",
"status": "COMPLETED",
"portal": "NEN",
"steps": [
{"step": 1, "action": "login", "status": "ok", "durationMs": 1240},
{"step": 2, "action": "load_tender", "status": "ok", "durationMs": 890},
{"step": 3, "action": "encrypt", "status": "ok", "durationMs": 320},
{"step": 4, "action": "upload_file", "status": "ok", "durationMs": 2100},
{"step": 5, "action": "submit", "status": "ok", "durationMs": 1560}
]
}Lista de ofertas
/api/v2/procurement/bidsRetirada de una oferta
/api/v2/procurement/bids/:jobIdParámetros del cuerpo
| Parámetro | Tipo | Descripción |
|---|---|---|
| reason | string | Motivo de la retirada (opcional) |
Análisis de IA
/api/v2/procurement/analyze| Parámetro | Tipo | Descripción |
|---|---|---|
| tenderId* | string | ID de licitación en la base de datos RWX |
Devuelve un JSON estructurado con más de 50 campos: título, valor, criterios, requisitos, riesgos, recomendaciones de IA y estimación de probabilidad de éxito.
Credenciales del portal
Gestione las credenciales del portal en el panel de control en /dashboard/procurement/credentials. Las contraseñas se cifran con AES-256-GCM y nunca se almacenan en texto plano.
Coste en créditos
| Parámetro | Tipo | Descripción |
|---|---|---|
| Enviar oferta | POST bids | 50 créditos |
| Retirar oferta | DELETE bids/:id | 20 créditos |
| Análisis de IA | POST analyze | 10 créditos |
| Lectura (listado, detalle) | GET | 1 crédito |
| Listar portales | GET portals | 0 créditos |
Flujo de trabajo
Flujo típico: 1) Guardar credenciales en el panel de control → 2) Probar inicio de sesión → 3) Buscar una licitación (GET tenders) → 4) Analizar la documentación (POST analyze) → 5) Enviar una oferta (POST bids) → 6) Supervisar el estado (GET bids/:jobId)