Iniziare
veritra.io monitora gli appalti pubblici in tutta l'UE. È possibile utilizzare il servizio tramite la dashboard web oppure integrarsi tramite REST API.
Utilizzare tramite web
Per la maggior parte degli utenti. Registrazione, filtri, digest via e-mail, applicazione mobile.
Vai ↓Integrazione tramite API
Per gli sviluppatori. REST API, webhook, specifica OpenAPI, MCP per agenti AI.
Vai ↓Primi passi nella dashboard
Non è necessario installare nulla né programmare. È sufficiente un browser e un indirizzo e-mail.
1. Crea il tuo account
Vai su /register e inserisci e-mail, nome e facoltativamente la partita IVA dell'azienda. Se si inserisce la partita IVA, la ragione sociale, il codice fiscale e l'indirizzo vengono recuperati automaticamente dal registro ARES.
La password non viene impostata in questa fase — la configurerete nel passaggio successivo dopo aver cliccato sul link di verifica ricevuto via e-mail.
2. Verifica l'e-mail e imposta la password
Entro pochi secondi riceverete un'e-mail con il link di verifica. Cliccateci sopra. Si aprirà una pagina in cui potrete impostare la password (min. 8 caratteri).
Dopo aver impostato la password, sarete autenticati e potrete procedere direttamente alla dashboard.
3. Crea il tuo primo filtro gare
Nella dashboard, clicca su Gare → Nuovo filtro. Il filtro è un insieme salvato di criteri in base ai quali il sistema invia le gare:
- Regione — una o più regioni (Roma, Lombardia, …)
- Settore — categoria di gare (Edilizia, Sviluppo IT, …) o codice CPV
- Parole chiave — termini che devono essere presenti nel titolo o nella descrizione (es. "ristrutturazione ponte")
- Valore — valore stimato minimo/massimo dell'appalto
La descrizione dettagliata di tutti i parametri del filtro è nella documentazione di Veritra.
4. Attivate l'email digest
Per ogni filtro è possibile attivare un email digest giornaliero. Ogni giorno alle 7:00 riceverete un'email con le gare d'appalto aggiunte in quella giornata che corrispondono al vostro filtro.
Il digest si attiva direttamente nel dettaglio del filtro — interruttore "Email digest" nella parte superiore. È possibile avere più filtri, ciascuno con la propria impostazione digest.
REST API
Se desiderate accedere ai dati in modo programmatico — ad esempio integrarli nel vostro ERP o CRM — utilizzate il REST API. Tutti gli endpoint si trovano sotto /api/v2, autenticazione tramite chiave API. La maggior parte degli endpoint restituisce JSON in un envelope con single key 'data'; le eccezioni sono le fatture PDF (binarie), l'export dei match (CSV/XLSX, salvo si scelga format=json) e il document preview (302 redirect su signed URL).
Hello world
Una volta ottenuta la chiave, si chiama l'API nel seguente modo:
curl -H "X-Api-Key: mrw_live_…" \ "https://veritra.io/api/v2/leads/tenders/search?qText=rekonstrukce%20mostu&limit=5"
Restituisce un JSON con le gare d'appalto aperte più recenti. I parametri di ricerca completi sono nella documentazione di Veritra.
Come ottenere la chiave
La prima chiave API viene creata tramite la dashboard: registratevi sul sito, verificate l'e-mail e nella sezione Impostazioni → Integrazioni cliccate su "Genera chiave". La chiave viene visualizzata una sola volta — salvatela immediatamente (ad es. in env / secrets store). In caso di smarrimento, potrete generarne una nuova ed eliminare quella precedente.
Utilizzo con client MCP (Claude Desktop, Cursor, …)
La chiave è la stessa utilizzata per il REST API. Cambia solo il modo in cui il client la invia: il server MCP è in esecuzione su /api/mcp e la chiave viene inserita nell'header X-Api-Key dell'handshake. La configurazione completa per Claude Desktop, Cursor e client HTTP generici è nella documentazione MCP.
Autenticazione
Tutti gli endpoint /api/v2 vengono autenticati con un'unica chiave API (formato mrw_live_HEX64). La chiave può essere inviata come header X-Api-Key oppure come Bearer token:
# header X-Api-Key curl -H "X-Api-Key: mrw_live_…" https://veritra.io/api/v2/account/me # nebo Bearer (kompatibilní s OpenAPI client generators) curl -H "Authorization: Bearer mrw_live_…" https://veritra.io/api/v2/account/me
La chiave porta l'identità dell'utente. I servizi che può invocare sono determinati dall'abbonamento attivo (cfr. sezione Subscriptions). È possibile avere fino a 5 chiavi attive contemporaneamente — utile per separare gli ambienti prod / dev / per-sistema.
Response envelope
Tutti gli endpoint v2 restituiscono un JSON envelope uniforme. Singola risorsa sotto data, liste paginate sotto data + pagination, errori sotto error.
Successo
// Single resource
{ "data": { "id": "…", "field": "…" } }
// Paginated list
{
"data": [{ "…": "…" }],
"pagination": { "nextCursor": "abc123…", "totalCount": 42 }
}Errore
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Field 'url' must be a valid HTTPS URL.",
"details": { "field": "url" }
}
}Error code stabili: UNAUTHORIZED, FORBIDDEN, NOT_FOUND, VALIDATION_ERROR, CONFLICT, RATE_LIMITED, ENTITLEMENT_REQUIRED, INTERNAL. Il client deve ramificare sul code, non sul message — lo stato HTTP viene mappato automaticamente sul codice.
Limiti di frequenza (Rate limit)
| Parametro | Tipo | Descrizione |
|---|---|---|
| Account API — lettura | 60/min, 5.000/giorno | GET su /api/v2/account/* |
| Account API — scrittura | 10/min, 200/giorno | POST, PUT, PATCH, DELETE |
| API di servizio | 100/h/chiave | Quota mensile in base al servizio — vedere la documentazione del servizio |
In caso di superamento, l'API restituisce HTTP 429 e l'intestazione Retry-After (secondi).
Periodo di prova e fatturazione
Dopo la creazione dell'account si dispone di 1 giorno di prova gratuita per il Monitoraggio Gare d'Appalto — senza carta, senza profilo di fatturazione. Successivamente è necessario disporre di una carta collegata o di una fattura di acconto già pagata, altrimenti il servizio passerà in modalità SUSPENDED e le chiamate successive restituiranno 403. Nessun pacchetto a livelli — si paga per il singolo servizio, con possibilità di disdetta in qualsiasi momento.
Account API
Gestione dell'account, delle chiavi, della fatturazione e dei webhook. Tutti gli endpoint /api/v2/account/* richiedono l'autenticazione tramite chiave.
/api/v2/account/meEquivalente di /profile + /subscriptions + informazioni apiKey. Adatto al caricamento iniziale nei client UI.
{
"data": {
"account": { "email": "…", "name": "…", "company": "…", "ico": "…", "country": "CZ", "locale": "cs", "isComplete": true },
"subscriptions": [
{ "service": "LEADS", "scope": "CZ", "state": "ACTIVE", "tier": "PAID", "trialEndsAt": null, "paidUntil": "2026-06-30T22:00:00.000Z", "cancelAtPeriodEnd": false }
],
"apiKey": { "keyPrefix": "mrw_live_7fa7785c", "lastUsedAt": "…", "requestsMonth": 120, "requestsLimit": 500 }
}
}/api/v2/account/profile/api/v2/account/profilePassword e sessione
/api/v2/account/password/api/v2/account/password/api/v2/account/sessions/revokeChiavi API
La chiave autentica l'accesso all'intero API. È possibile avere fino a 5 chiavi attive. La chiave raw viene restituita solo al momento della creazione o della rotazione — in seguito è recuperabile esclusivamente creandone una nuova.
/api/v2/account/keys/api/v2/account/keys{ "label": "Production ERP" }{
"data": {
"id": "cm…",
"key": "mrw_live_<hex64>",
"keyPrefix": "mrw_live_7fa7785c",
"label": "Production ERP",
"createdAt": "…"
}
}La chiave nella response è in forma completa solo qui. Il server conserva solo l'hash SHA-256; la raw key non è recuperabile in seguito. In caso di perdita, crearne una nuova ed eliminare la vecchia.
/api/v2/account/keys/:id/api/v2/account/keys/:id/api/v2/account/keys/:id/api/v2/account/keys/:id/rotateSottoscrizione dei servizi
Attivazione del trial, panoramica dello stato, annullamento pianificato alla data paidUntil/trialEndsAt. Per le attivazioni a pagamento (con carta) utilizzare /billing/checkout.
/api/v2/account/subscriptions/api/v2/account/subscriptions{ "service": "LEADS", "scope": "CZ", "mode": "trial" }/api/v2/account/subscriptions/batch{ "service": "LEADS", "scopes": ["CZ","SK","DE"], "mode": "trial" }/api/v2/account/subscriptions/:service{ "cancelAtPeriodEnd": true }Utilizzo API
Aggregato giornaliero del numero di chiamate API della chiave negli ultimi N giorni (default 30). Per il monitoraggio del consumo del rate limit.
/api/v2/account/usage?days=30Fatturazione
/api/v2/account/billing/api/v2/account/billing/api/v2/account/billing/checkout/api/v2/account/billing/customer-portal/api/v2/account/billing/proforma{ "cycle": "MONTHLY", "currency": "CZK", "scopes": ["CZ","SK"] }/api/v2/account/billing/invoices/api/v2/account/billing/invoices/:invoiceIdEsportazione dati (GDPR)
/api/v2/account/export/api/v2/account/exportChiusura dell'account
/api/v2/account/cancel/request{ "action": "DEACTIVATE" }/api/v2/account/cancel/confirmWebhook
Webhook a livello di account — un singolo endpoint copre tutti i filtri e i servizi futuri. Ogni evento porta una firma HMAC-SHA256 in X-Signature-256, chiave di idempotenza in X-Idempotency-Key e tipo in X-Event-Type. Retry con backoff esponenziale fino a ~33 h.
Max 5 endpoint per account. Gli eventi supportati e gli schemi payload sono disponibili nella documentazione di ciascun servizio.
/api/v2/account/webhooks/api/v2/account/webhooks{
"url": "https://yourapp.cz/api/veritra-webhook",
"enabledEvents": ["leads.match.created"],
"description": "production"
}/api/v2/account/webhooks/:id/api/v2/account/webhooks/:id/api/v2/account/webhooks/:id/api/v2/account/webhooks/:id/rotate-secretNotifiche
/api/v2/account/notifications/api/v2/account/notificationsFeedback
/api/v2/feedbackSpecifiche OpenAPI 3.1
La specifica API completa e leggibile da macchina è disponibile su /openapi.json. Utilizzarla per la generazione automatica di client tipizzati in qualsiasi linguaggio (TypeScript, Python, Go, Rust, …) o per l'importazione in Postman / Insomnia / Swagger UI.
# Generate TypeScript client npx openapi-typescript https://veritra.io/openapi.json -o ./veritra-types.ts # Generate Python client (openapi-python-client) openapi-python-client generate --url https://veritra.io/openapi.json
Codici di errore
| Codice | Significato |
|---|---|
| 400 | Campo mancante, JSON non valido, formato non valido |
| 401 | X-Api-Key / Bearer assente, token scaduto o non valido |
| 402 | Nessun abbonamento attivo per il servizio richiesto |
| 403 | Il token non appartiene a questo account, oppure il servizio è in beta senza whitelist |
| 404 | Chiave / token / endpoint non trovato |
| 409 | Email già registrata / chiave già esistente / limite endpoint (5) / limite filtri (20) |
| 410 | Token o codice scaduto, oppure già utilizzato |
| 412 | Email non verificata — il passaggio 2 non è ancora stato completato |
| 429 | Rate limit (Retry-After nell'intestazione) |
| 500 | Errore del server |
Servizi API disponibili
L'Account API (sopra) è comune a tutti i servizi — onboarding, chiavi, fatturazione, webhook. I dati specifici si trovano nelle API di dominio:
Monitor gare d'appalto
Gare d'appalto da tutti i principali portali — filtri, digest giornaliero, REST API e webhook
Voci di prezzo delle opere
Prezzi delle voci di lavorazione — media, min/max dai contratti
Gestione degli appalti
Presentazione programmatica di offerte sui portali (NEN, E-ZAK, TenderArena)
MCP — per agenti AI
Connessione a Claude Desktop o a un agente LLM personalizzato tramite strumenti JSON-RPC
Domande? michal@veritra.io