Gestione degli appalti
API end-to-end per la presentazione e il ritiro delle offerte su 5 portali di appalti pubblici. Cifratura, upload di file e logging step-by-step — il tutto tramite un'unica REST API. Attualmente in fase di beta testing — per richiedere l'accesso contattateci.
Portali supportati
/api/v2/procurement/portalsNEN (nen.nipez.cz), E-ZAK (URL istanza), TenderArena, Eveza (URL istanza), E-zakazky.cz (URL istanza). I portali E-ZAK, Eveza ed E-zakazky richiedono portalUrl — URL della specifica istanza.
Presentazione dell'offerta
/api/v2/procurement/bidsParametri body
| Parametro | Tipo | Descrizione |
|---|---|---|
| portal* | string | NEN | EZAK | TENDERARENA | EVEZA | EZAKAZKY |
| tenderId* | string | ID della gara sul portale |
| credentialId | string | ID dell'accesso salvato (o credentials) |
| credentials | object | Oggetto con i campi username, password e (facoltativamente) portalUrl — alternativa a credentialId |
| files | array | Array di oggetti (name, url, size) — file dell'offerta |
| criteria | array | Array di oggetti (name, value) — criteri di valutazione |
| tenderTitle | string | Nome della gara (per la panoramica) |
| dryRun | boolean | true = test senza invio definitivo |
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": "offerta.pdf", "url": "https://..."}],
"criteria": [{"name": "Prezzo dell'offerta", "value": "1500000"}]
}'{
"jobId": "clx1abc...",
"status": "PENDING",
"message": "Job created — will be processed by cron"
}Stato del job
/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}
]
}Elenco delle offerte
/api/v2/procurement/bidsRitiro dell'offerta
/api/v2/procurement/bids/:jobIdParametri body
| Parametro | Tipo | Descrizione |
|---|---|---|
| reason | string | Motivo del ritiro (facoltativo) |
Analisi AI
/api/v2/procurement/analyze| Parametro | Tipo | Descrizione |
|---|---|---|
| tenderId* | string | ID della gara nel database RWX |
Restituisce un JSON strutturato con oltre 50 campi: denominazione, importo, criteri, qualificazione, rischi, raccomandazioni AI, stima della probabilità di aggiudicazione.
Accessi ai portali
Gli accessi ai portali vengono gestiti nella dashboard su /dashboard/procurement/credentials. Le password sono cifrate con AES-256-GCM e non vengono mai memorizzate in chiaro.
Costi in crediti
| Parametro | Tipo | Descrizione |
|---|---|---|
| Presentazione dell'offerta | POST bids | 50 crediti |
| Ritiro dell'offerta | DELETE bids/:id | 20 crediti |
| Analisi AI | POST analyze | 10 crediti |
| Lettura (elenco, dettaglio) | GET | 1 credito |
| Elenco dei portali | GET portals | 0 crediti |
Workflow
Procedura tipica: 1) Salvare le credenziali nella dashboard → 2) Testare il login → 3) Trovare una gara (GET tenders) → 4) Analizzare la documentazione (POST analyze) → 5) Presentare un'offerta (POST bids) → 6) Monitorare lo stato (GET bids/:jobId)