Aan de slag
veritra.io monitort openbare aanbestedingen in de hele EU. U kunt het gebruiken via het webdashboard of integreren via REST API.
Via web gebruiken
Voor de meeste gebruikers. Meld u aan, stel filters in, ontvang een e-maildigest en gebruik de mobiele app.
Ga naar ↓Integreren via API
Voor ontwikkelaars. REST API, webhooks, OpenAPI-specificatie, MCP voor AI-agents.
Ga naar ↓Aan de slag in het dashboard
Niets te installeren of te coderen. Een browser en een e-mailadres zijn voldoende.
1. Maak een account aan
Ga naar /register en vul uw e-mailadres, naam en optioneel een Tsjechisch bedrijfs-ID (IČO) in. Als u een IČO opgeeft, worden de bedrijfsnaam, het btw-nummer en het adres automatisch ingevuld vanuit het ARES-register.
Voer nog geen wachtwoord in — u stelt dit in de volgende stap in nadat u op de verificatielink hebt geklikt.
2. Verifieer het e-mailadres en stel een wachtwoord in
Binnen enkele seconden ontvangt u een e-mail met een verificatielink. Klik erop. U komt op een pagina terecht waar u uw wachtwoord instelt (min. 8 tekens).
Zodra het wachtwoord is ingesteld, bent u ingelogd en kunt u direct naar het dashboard gaan.
3. Maak uw eerste aanbestedingsfilter aan
Klik in het dashboard op Aanbestedingen → Nieuw filter. Een filter is een opgeslagen set criteria die het systeem gebruikt om u overeenkomende aanbestedingen te sturen:
- Regio — regio of meerdere regio's (Praag, Midden-Bohemen, …)
- Sector — aanbestedingscategorie (Gebouwen, IT-ontwikkeling, …) of CPV-code
- Trefwoorden — woorden die in de titel of omschrijving moeten voorkomen (bijv. "brugrestauratie")
- Waarde — minimale/maximale verwachte aanbestedingswaarde
Een gedetailleerde beschrijving van alle filterparameters vindt u in de Lead Watcher-documentatie.
4. Schakel de e-maildigest in
Elk filter kan een dagelijkse e-maildigest hebben. Elke dag om 7:00 ontvangt u een e-mail met aanbestedingen die die dag zijn toegevoegd en overeenkomen met uw filter.
De digest wordt in- of uitgeschakeld via de filterdetails — de schakelaar "E-maildigest" bovenaan. U kunt meerdere filters hebben, elk met een eigen digest-instelling.
REST API
Als u de gegevens programmatisch wilt gebruiken — bijvoorbeeld om ze in uw ERP of CRM te laden — gebruik dan de REST API. Alle eindpunten bevinden zich onder /api/v2, authenticatie verloopt via een API-sleutel. De meeste eindpunten retourneren JSON in een envelope met één 'data'-sleutel; uitzonderingen zijn factuur-PDF's (binair), matchexport (CSV/XLSX tenzij u format=json instelt) en documentvoorvertoning (302-redirect naar een ondertekende URL).
Hello world
Met een sleutel ziet de aanroep er als volgt uit:
curl -H "X-Api-Key: mrw_live_…" \ "https://veritra.io/api/v2/leads/tenders/search?qText=bridge%20reconstruction&limit=5"
Geeft JSON terug met de meest recente openstaande aanbestedingen. Volledige zoekparameters vindt u in de Lead Watcher-documentatie.
Hoe u een sleutel verkrijgt
Uw eerste API-sleutel wordt aangemaakt via het dashboard: registreer u op de website, verifieer uw e-mailadres en klik vervolgens in Instellingen → Integraties op "Sleutel genereren". De sleutel wordt eenmalig getoond — sla hem onmiddellijk op (bijv. in env / secrets store). Als u hem kwijtraakt, maak dan een nieuwe aan en verwijder de oude.
De sleutel gebruiken met MCP-clients (Claude Desktop, Cursor, …)
De sleutel is hetzelfde als voor de REST API. Alleen de manier waarop de client hem verzendt verschilt: de MCP-server draait op /api/mcp en de sleutel wordt meegegeven in de X-Api-Key-handshake-header. De volledige configuratie voor Claude Desktop, Cursor en generieke HTTP-clients vindt u in de MCP-documentatie.
Authenticatie
Alle /api/v2-eindpunten authenticeren met één API-sleutel (formaat mrw_live_HEX64). De sleutel kan worden meegestuurd als X-Api-Key-header of als 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
De sleutel bevat de gebruikersidentiteit. Welke services ermee kunnen worden aangeroepen, wordt bepaald door het abonnement (zie de sectie Abonnementen). U kunt maximaal 5 actieve sleutels hebben — handig om prod / dev / per systeem te scheiden.
Respons-envelop
Alle v2-eindpunten retourneren een uniforme JSON-envelop. Enkele resource onder data, gepagineerde lijsten onder data + pagination, fouten onder error.
Geslaagd
// Enkele resource
{ "data": { "id": "…", "field": "…" } }
// Gepagineerde lijst
{
"data": [{ "…": "…" }],
"pagination": { "nextCursor": "abc123…", "totalCount": 42 }
}Fout
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Field 'url' must be a valid HTTPS URL.",
"details": { "field": "url" }
}
}Stabiele foutcodes: UNAUTHORIZED, FORBIDDEN, NOT_FOUND, VALIDATION_ERROR, CONFLICT, RATE_LIMITED, ENTITLEMENT_REQUIRED, INTERNAL. Clients dienen te vertakken op code, niet op message — de HTTP-statuscode wordt automatisch aan code gekoppeld.
Snelheidslimieten
| Parameter | Type | Beschrijving |
|---|---|---|
| Account-API — lezen | 60/min, 5.000/dag | GET op /api/v2/account/* |
| Account-API — schrijven | 10/min, 200/dag | POST, PUT, PATCH, DELETE |
| Service-API's | 100/u/sleutel | Maandelijks quotum is afhankelijk van de service — zie de servicedocumentatie |
Bij overschrijding retourneert de API HTTP 429 met een Retry-After header (seconden).
Proefperiode en facturering
Na het aanmaken van een account ontvangt u een gratis proefperiode van 7 dagen van Lead Watcher — geen creditcard of factureringsprofiel vereist. Daarna heeft u een creditcard of een betaalde proforma-factuur nodig, anders wordt de service SUSPENDED en retourneren verdere aanroepen 403. Geen tierbundels — betaal per service, op elk moment opzegbaar.
Account-API
Beheer account, sleutels, facturering en webhooks. Alle /api/v2/account/*-eindpunten vereisen sleutelauthenticatie.
/api/v2/account/meEquivalent aan /profile + /subscriptions + apiKey-info. Handig voor de initiële laadbeurt in UI-clients.
{
"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/profileWachtwoord en sessie
/api/v2/account/password/api/v2/account/password/api/v2/account/sessions/revokeAPI-sleutels
De sleutel authenticeert tegen de volledige API. U kunt maximaal 5 actieve sleutels hebben. De onbewerkte sleutel wordt alleen geretourneerd bij aanmaak of rotatie — daarna alleen opvraagbaar door een nieuwe aan te maken.
/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": "…"
}
}De sleutel in de respons is hier alleen in zijn geheel beschikbaar. De server slaat alleen de SHA-256-hash op; de onbewerkte sleutel kan later niet worden opgehaald. Indien verloren, maak een nieuwe aan en verwijder de oude.
/api/v2/account/keys/:id/api/v2/account/keys/:id/api/v2/account/keys/:id/api/v2/account/keys/:id/rotateServiceabonnementen
Proefactivering, statusoverzicht, geplande annulering op paidUntil/trialEndsAt. Gebruik /billing/checkout voor activering met betaalkaart.
/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 }API-gebruik
Dagelijks aggregaat van API-sleuteloproepen voor de afgelopen N dagen (standaard 30). Voor bewaking van het verbruik van de snelheidslimiet.
/api/v2/account/usage?days=30Facturering
/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/:invoiceIdGegevensexport (AVG)
/api/v2/account/export/api/v2/account/exportAccountopzegging
/api/v2/account/cancel/request{ "action": "DEACTIVATE" }/api/v2/account/cancel/confirmWebhooks
Webhooks op accountniveau — één eindpunt dekt alle filters en toekomstige services. Elke gebeurtenis bevat een HMAC-SHA256-handtekening in X-Signature-256, een idempotentiesleutel in X-Idempotency-Key en het type in X-Event-Type. Opnieuw proberen met exponentiële terugval tot ~33 uur.
Max. 5 eindpunten per account. Ondersteunde gebeurtenissen en payload-schema's zijn per service gedocumenteerd.
/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-secretMeldingen
/api/v2/account/notifications/api/v2/account/notificationsFeedback
/api/v2/feedbackOpenAPI 3.1-specificatie
De volledige machine-leesbare API-specificatie is beschikbaar op /openapi.json. Gebruik deze om getypeerde clients te genereren in elke gewenste taal (TypeScript, Python, Go, Rust, …) of om te importeren 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
Foutcodes
| Code | Betekenis |
|---|---|
| 400 | Ontbrekend veld, ongeldige JSON, ongeldig formaat |
| 401 | Ontbrekende X-Api-Key / Bearer, verlopen / ongeldig token |
| 402 | Geen actief abonnement voor de service |
| 403 | Token behoort niet tot dit account, of service bevindt zich in bèta zonder whitelist |
| 404 | Sleutel / token / endpoint niet gevonden |
| 409 | E-mail al geregistreerd / sleutel bestaat al / endpointlimiet (5) / filterlimiet (20) |
| 410 | Token of code verlopen of al gebruikt |
| 412 | E-mail niet geverifieerd — stap 2 nog niet voltooid |
| 429 | Limiet voor aanvragen overschreden (Retry-After header) |
| 500 | Serverfout |
Beschikbare API-services
De Account API (hierboven) is gedeeld door alle services — onboarding, sleutels, facturering, webhooks. Domeinspecifieke gegevens staan in toegewijde API's:
Lead Watcher
Aanbestedingen van alle grote portalen — filters, dagelijkse digest, REST API en webhooks
Bouwprijzen
Prijspunten voor bouwonderdelen — gemiddelde, min/max uit contracten
Aanbesteding
Programmatisch indienen van biedingen bij portalen (NEN, E-ZAK, TenderArena)
MCP — voor AI-agents
Verbind Claude Desktop of uw eigen LLM-agent via JSON-RPC-tools
Vragen? michal@veritra.io