Aanbestedingsmonitor
Automatische levering van nieuwe aanbestedingen die overeenkomen met uw filters — regio, branchetags, trefwoorden, waardebereik. Pull API + e-maildigest + webhook.
Concepten
Vier begrippen die u in alle eindpunten tegenkomt:
- Tender — een enkele aanbesteding van een portaal (NEN, VVZ, E-ZAK, TenderArena, enz.). Geïdentificeerd door een numeriek ID.
- Filter — een opgeslagen set criteria (regio, sector, trefwoorden, waarde). Wanneer een nieuwe aanbesteding aan de criteria voldoet, wordt een treffer gegenereerd.
- Match — een nieuwe aanbesteding die binnen uw filter valt. Vertegenwoordigt de koppeling (aanbesteding × filter) + tijdstempel + uw status (gemarkeerd / uitgesloten / bekeken).
- Taxonomy — gecontroleerde vocabulaires voor regio's (NUTS), sectoren (sectortags) en CPV-codes die worden gebruikt om aanbestedingen te classificeren.
Snel starten
Filters kunnen op twee manieren worden ingesteld — het resultaat is identiek en een filter kan op elk moment via beide wegen worden bewerkt.
curl -H "X-Api-Key: mrw_live_…" \ "https://veritra.io/api/v2/leads/tenders/search?qText=rekonstrukce%20mostu&limit=5"
Bovenstaande is een ad-hoczoekactie. Voor continue monitoring (nieuwe aanbestedingen die aan uw criteria voldoen) gebruikt u filters + webhook/e-maildigest — zie hieronder.
Aanbesteding zoeken (ad hoc)
Voor eenmalige zoekopdrachten door alle actieve aanbestedingen. Maakt geen gebruik van een opgeslagen filter — parameters worden rechtstreeks in de querystring meegegeven.
/api/v2/leads/tenders/searchQueryparameters
| Parameter | Type | Beschrijving |
|---|---|---|
| qText* | string | Zoektekst (volledige tekst in titel + beschrijving). |
| regions | string | NUTS-bladcodes CSV (CZ010,CZ020). |
| cpvPrefixes | string | CPV-prefixen CSV (45,452). |
| industryTags | string | Industrietag-ID's CSV (con_buildings,it_development). |
| minValue | number | Min. geschatte waarde (CZK). Tenders zonder waarde passeren het filter. |
| maxValue | number | Max. geschatte waarde (CZK). Tenders zonder waarde passeren het filter. |
| deadlineFrom | string (YYYY-MM-DD) | Indieningstermijn >= YYYY-MM-DD. |
| deadlineTo | string (YYYY-MM-DD) | Indieningstermijn <= YYYY-MM-DD. |
| sort | "newest" | "deadline" | "value" | Sorteren: nieuwste (standaard), deadline (oplopend), waarde (aflopend). |
| limit | number | Aantal resultaten, max. 1000 (standaard: 50). Voor >1k resultaten gebruikt u nextCursor-paginering of /matches/export. |
| cursor | string | Keyset-cursor van vorige pagina (pagination.nextCursor). |
Voorbeeld
curl -H "X-Api-Key: mrw_live_…" \ "https://veritra.io/api/v2/leads/tenders/search?qText=rekonstrukce®ions=CZ010,CZ020&minValue=500000&limit=10"
/api/v2/leads/tenders/:idRespons: { data: { id, title, description, estimatedValue, deadlineAt, contractingAuthority, documents[], starred, excluded } }.
/api/v2/leads/tenders/:id/emailDe body mag recipientEmail bevatten om door te sturen naar een ander e-mailadres. Standaard is user.email.
/api/v2/leads/documents/previewQuery: ?url=:original&kind=docx|xlsx. Toegestane hosts: NEN, E-ZAK, Tender Arena, Gemin, ProfilZadavatele.
GET /api/v2/leads/documents/preview?url=https://nen.nipez.cz/…/Vyzva.docx&kind=docx → 302 Location: https://rwx-storage…/Tendero/doc-cache-v8/<hash>.html (signed, TTL 10 min)
Catalogus & automatisch aanvullen (openbaar, geen sleutel vereist)
Voor UI-dropdowns en het aanmaken van filters. Servercache van 1 uur. Openbaar, geen authenticatie vereist.
/api/v2/leads/zadavatele?q=praha/api/v2/leads/countries/api/v2/leads/regions?country=CZ/api/v2/leads/regions/catalog?country=CZ&locale=cs/api/v2/leads/taxonomy/industry/api/v2/leads/taxonomy/cpvFiltervelden en toegestane waarden
Een filter bestaat uit de onderstaande velden. Alle zijn optioneel, behalve `name`. Een leeg veld betekent geen beperking op die dimensie.
regions string[]
NUTS-regio's voor het opgegeven land (?country=CZ) met gelokaliseerde labels.
CZČeská republikaSKSlovenskoPLPolskoDENěmeckoATRakouskoFRFrancieESŠpanělskoITItálieNLNizozemskoBEBelgiePTPortugalskoSEŠvédskoFIFinskoDKDánskoNONorskoIEIrskoGRŘeckoRORumunskoBGBulharskoHUMaďarskoHRChorvatskoSISlovinskoLTLitvaLVLotyšskoEEEstonskoLULucemburskoCYKyprMTMaltaCHŠvýcarskoISIslandMKSeverní MakedonieGBVelká BritánieJPJaponskoGebruik het volgende om de volledige NUTS-boom voor een specifiek land op te halen:
GET /api/v2/leads/regions/catalog?country=CZ&locale=cs GET /api/v2/leads/regions/catalog?country=DE&locale=de GET /api/v2/leads/regions/catalog?country=FR&locale=en
Voorbeeld: NUTS-3-codes voor CZ (regio's) — uitvouwen ▸
CZ010Hlavní město PrahaCZ020Středočeský krajCZ031Jihočeský krajCZ032Plzeňský krajCZ041Karlovarský krajCZ042Ústecký krajCZ051Liberecký krajCZ052Královéhradecký krajCZ053Pardubický krajCZ063Kraj VysočinaCZ064Jihomoravský krajCZ071Olomoucký krajCZ072Zlínský krajCZ080Moravskoslezský krajindustryTags string[] Aanbevolen
Brancheclassificatie met meerdere tags. Een aanbesteding kan meerdere tags hebben (bijv. 'stav_pozemni' + 'stav_remesla' voor een renovatie). Het filter matcht een aanbesteding als ten minste één van de gevraagde tags is ingesteld (JSON_OVERLAPS).
Waarom de voorkeur geven aan industryTags boven CPV: Onze industryTags combineren LLM-classificatie van de aanbestedingstitel/-beschrijving met CPV-koppeling en regex-hints — ze vangen relevante aanbestedingen ook wanneer de aanbestedende dienst CPV-codes onzorgvuldig heeft toegewezen. Een puur CPV-filter is exact maar afhankelijk van de discipline van de aanbestedende dienst, die in CZ beperkt is.
con_buildingsPozemní stavby a rekonstrukce budovcon_civilInženýrské stavby (silnice, mosty, voda)con_tradesStavební řemesla a dílčí prácecon_energy_efficiencyEnergetické úspory a OZEcon_materialsStavební materiáldes_documentationProjektová dokumentace a studiedes_supervision_ohsTechnický dozor a BOZPdes_surveyingGeodézie a pozemkové úpravyit_developmentVývoj SW a integraceit_licensingSW licence a předplatnéit_hardwareHW a infrastrukturait_cybersecurityKybernetická bezpečnostit_data_aiData, analytika, AI/MLtelecom_internetTelekomunikace, internet, mobilníprof_marketingMarketing, PR, reklamaprof_legalPrávní službyprof_accountingÚčetnictví, dotace, auditprof_hrHR, náborprof_translationPřeklady a tlumočeníprof_insurancePojištění a finančníops_cleaningÚklidové službyops_securityOstraha a recepčníops_maintenanceÚdržba a servis zařízeníops_wasteOdpadové hospodářstvíops_facilitySpráva nemovitostícat_cateringStravování, cateringcat_accommodationUbytování a konferencecat_foodPotraviny a nápojetrans_transportPřeprava cestujících a nákladutrans_vehiclesVozidla, díly, leasinghealth_pharmaLéčiva a farmahealth_devicesZdravotnické přístroje a materiálhealth_careZdravotní a sociální péčegoods_furnitureNábytek a vybavení interiérůgoods_clothingOděvy, OOPP, uniformygoods_electricalElektromateriálgoods_machineryPrůmyslové strojeenergy_fuelsPohonné hmoty a palivaenergy_power_heatElektřina a teploenergy_waterVodárenstvínat_forestryLesní hospodářstvínat_greeneryÚdržba zeleně a zahradnictvínat_agricultureZemědělstvídefense_safetyHasiči, vojsko, obranasci_labLaboratorní a měřicí vybavenísci_researchVýzkum a vývojedu_trainingVzdělávání a školenículture_mediaKultura, knihy, médiacategories string[] Minder nauwkeurig
CPV-prefixen (Common Procurement Vocabulary) van willekeurige lengte — gematcht via `LIKE 'prefix%'`. '45' dekt alle bouwdivisies, '4523' alleen civiele techniek, '45316110' alleen straatverlichting.
03Landbouw, bosbouw, visserij09Brandstoffen en energie15Voedsel en dranken18Kleding, schoeisel, PBM22Drukwerk, boeken30Kantoormachines, IT-apparatuur31Elektrische machines, kabels, verlichting32Radio, tv, telecommunicatie33Medische apparatuur, farmaceutica34Voertuigen, transport35Beveiliging, brandweer- en militaire uitrusting38Laboratorium- en meetinstrumenten39Meubilair, interieurinrichting42Industriële machines44Bouwmaterialen en -constructies45Bouwwerken48Software en licenties50Reparatie en onderhoud55Catering, accommodatie60Transport (vervoer)64Post- en telecomdiensten65Openbare nutsvoorzieningen (elektriciteit, water)66Financiële diensten en verzekeringen70Vastgoed en facilitair beheer71Architectuur-, ontwerp- en ingenieursdiensten72IT-diensten (ontwikkeling, integratie, ondersteuning)73Onderzoek en ontwikkeling75Openbaar bestuur, defensie77Landbouw-, bosbouw- en tuinbouwdiensten79Zakelijke diensten (juridisch, boekhouding, HR, marketing)80Onderwijs en opleiding85Gezondheidszorg en maatschappelijke dienstverlening90Afval, milieu, reiniging92Cultuur, sport, recreatie98Overige diensten voor het publiekDe volledige catalogus (9.454 codes) is beschikbaar op /docs/leads/cpv — doorzoekbaar en gegroepeerd per divisie.
keywords string[]
LIKE-overeenkomst in tendertitel en -beschrijving. Hoofdletterongevoelig. OR tussen items. Handig als vangnet als industryTags/CPV niet alles detecteren (bijv. een specifiek tendertype dat alleen in de tekst verschijnt).
"keywords": ["reconstructie", "verlichting", "kleuterschool"]
minValue / maxValue number | null
Geschatte tenderwaardebereik in CZK. U kunt alleen minValue, alleen maxValue of beide instellen.
emailDigest boolean
Indien ingeschakeld, ontvangt u dagelijks één e-mail (05:00 UTC) met een samenvatting van nieuwe overeenkomsten voor dit filter. Standaard ingeschakeld. Uitschakelen via filterbewerking. Webhooks worden afzonderlijk geconfigureerd op accountniveau (zie hieronder).
name string · active boolean
`name` — max. 120 tekens, verplicht. `active` — indien false wordt het filter uitgesloten van de cron (geen nieuwe overeenkomsten, geen digest, geen webhook). Gebruik dit om te pauzeren zonder te verwijderen.
Filterlogica
Velden worden als volgt gecombineerd:
OVEREENKOMST = (authority.NUTS3 ∈ expand(regions))
AND (minValue ≤ estimatedValue ≤ maxValue OF estimatedValue is null of 0)
AND (industry_or_cpv OF keyword_match)
# expand(regions): NUTS-codes worden uitgebreid naar NUTS 3-bladeren
# (CZ → 14 regio's, CZ01 → CZ010, CZ010 → CZ010).
industry_or_cpv:
if industryTags ingesteld → JSON_OVERLAPS(industryTags, tender.industryTags)
elif categories ingesteld → tender.cpvCode LIKE ANY (categories + "%")
else → false (geen industriefilter toegepast)
keyword_match:
if keywords ingesteld → tender.title of description LIKE ANY (%kw%)
else → false
# Als u geen industryTags / categories / keywords instelt,
# worden alle tenders geretourneerd die overeenkomen met regio's en waardebereik.industryTags heeft voorrang op categories — als u beide instelt, wordt alleen industryTags gebruikt (categories wordt genegeerd). keywords werken onafhankelijk (ze worden met OR gecombineerd met industry_or_cpv).
Filterbeheer-endpoints
Gebruik de beheersleutel (mrw_live_…) om filters te beheren. Dit heeft afzonderlijke snelheidslimieten en verbruikt geen LEADS-credits, zodat filterbeheer geen invloed heeft op het dagelijks ophalen van leads.
/api/v2/leads/filters/api/v2/leads/filters/api/v2/leads/filters/:id/api/v2/leads/filters/:id/api/v2/leads/filters/:id/api/v2/leads/filters/:id/matches/export?format=csv|xlsx|json&view=all|starred|excludedBodyparameters (POST / PUT) — gedeeld
| Parameter | Type | Beschrijving |
|---|---|---|
| name* | string | Filternaam (max. 120 tekens) |
| regions | string[] | NUTS-codes (bijv. `CZ010`). Combineer elk niveau. Lege array = alle regio's. |
| industryTags | string[] | Aanbevolen aanpak. Tag-ID's uit onze taxonomie (bijv. 'stav_pozemni', 'it_vyvoj'). Meerdere tags — OR tussen items. |
| categories | string[] | CPV-prefixen van willekeurige lengte (bijv. '45', '4523', '45316110'). Minder nauwkeurig dan industryTags. |
| keywords | string[] | Trefwoorden — LIKE-overeenkomst in tendertitel en -beschrijving (OR tussen items). |
| minValue | number | null | Min. geschatte waarde (CZK). Tenders zonder waarde passeren het filter. |
| maxValue | number | null | Max. geschatte waarde (CZK). Tenders zonder waarde passeren het filter. |
| emailDigest | boolean | Dagelijkse e-maildigest (standaard ingeschakeld) |
| active | boolean | Actief filter (standaard ingeschakeld) |
Webhooks worden niet langer per filter geconfigureerd — zie de Webhook sectie hieronder (endpoints op accountniveau). Het webhookUrl veld wordt geweigerd met HTTP 410 om veiligheidsredenen.
Voorbeelden
Bouw in Praag boven 500k CZK
curl -X POST -H "X-Api-Key: mrw_live_…" \
-H "Content-Type: application/json" \
-d '{
"name": "Bouw in Praag 500k+",
"regions": ["CZ010"],
"industryTags": ["con_buildings", "con_trades"],
"minValue": 500000
}' \
https://veritra.io/api/v2/leads/filtersIT-ontwikkeling en SW-licenties (alle regio's)
curl -X POST -H "X-Api-Key: mrw_live_…" \
-H "Content-Type: application/json" \
-d '{
"name": "IT-ontwikkeling + SW-licenties",
"industryTags": ["it_development", "it_licensing", "it_data_ai"],
"keywords": ["informatiesysteem", "module"]
}' \
https://veritra.io/api/v2/leads/filtersOpenbare verlichting (CZ) — combinatie van tags en trefwoorden
curl -X POST -H "X-Api-Key: mrw_live_…" \
-H "Content-Type: application/json" \
-d '{
"name": "Openbare verlichting (CZ)",
"industryTags": ["goods_electrical", "con_civil"],
"keywords": ["verlichting", "straatlantaarn", "openbare verlichting", "lampen"],
"minValue": 200000
}' \
https://veritra.io/api/v2/leads/filtersEen filter deactiveren
curl -X PATCH -H "X-Api-Key: mrw_live_…" \
-H "Content-Type: application/json" \
-d '{"active": false}' \
https://veritra.io/api/v2/leads/filters/<id>Levering — webhook vs. polling
Twee manieren om nieuwe aanbestedingen in uw ERP te ontvangen. De meeste integrators combineren beide.
Webhook (push)
Veritra stuurt binnen ~2 seconden na een overeenkomst een POST naar uw eindpunt. Gebeurtenis leads.match.created met volledige aanbestedingspayload.
Voordelen: realtime, geen polling-overhead, servergestuurde filtering.
Nadelen: vereist een publiek toegankelijk eindpunt (HTTPS), HMAC-verificatie en idempotentiebeheer.
Polling (pull)
Uw ERP roept periodiek GET /api/v2/leads/matches?since=… aan (bijv. elke 5 min). Geeft overeenkomsten terug sinds het opgegeven tijdstempel.
Voordelen: geen publiek eindpunt vereist, eenvoudige implementatie, herstart-bestendig.
Nadelen: latentie 5–10 min, beperking door rate-limit (60 req/min beheer-API), verspilde lege responsen.
Overeenkomsten ophalen
/api/v2/leads/matchesQueryparameters
| Parameter | Type | Beschrijving |
|---|---|---|
| filterId | string | Filteren op een specifiek filter |
| qText | string | Zoektekst (volledige tekst in titel + beschrijving). |
| since | string (ISO 8601 datetime) | Alleen overeenkomsten vanaf deze datum (ISO-datum/tijd) |
| delivered | boolean | false = alleen niet-afgeleverd, true = alleen afgeleverd |
| view | "starred" | "excluded" | Speciale weergave: starred (favorieten) | excluded (verborgen). |
| sort | "newest" | "deadline" | "value" | Sorteren: nieuwste (standaard), deadline (oplopend), waarde (aflopend). |
| limit | number | Aantal resultaten, max. 1000 (standaard: 50). Voor >1k resultaten gebruikt u nextCursor-paginering of /matches/export. |
| cursor | string | Keyset-cursor van vorige pagina (pagination.nextCursor). |
Geretourneerde overeenkomsten worden automatisch gemarkeerd als delivered=true. Elke aanvraag verbruikt 1 credit.
matchId-formaten
matchId heeft twee formaten op basis van herkomst:
cm…(cuid-prefix) — geretourneerd vanuit de voorberekende LeadMatch-tabel (dagelijkse cron). Stabiel over aanroepen heen, bruikbaar voor markeren-als-bekeken.live-12345Synthetische prefix voor live-gedetecteerde overeenkomsten via zoek-/browsemodus (parameter qText, view=starred/excluded). Niet aanwezig in de LeadMatch-tabel → markeren-als-bekeken heeft geen effect. tenderId is het achtervoegsel na het streepje.
Voorbeeld
curl -H "X-Api-Key: mrw_leads_…" \ "https://veritra.io/api/v2/leads/matches?delivered=false&limit=10"
Respons
{
"data": [
{
"matchId": "cm…",
"filterId": "cm…",
"filterName": "Bouw in Praag",
"matchedAt": "2026-04-03T06:00:00.000Z",
"viewedAt": null,
"delivered": true,
"tender": {
"id": 12345,
"title": "Brugreconstructie reg.nr. 123",
"estimatedValue": 12500000,
"deadlineAt": "2026-05-15T22:00:00.000Z",
"publishedAt": "2026-04-01T08:00:00.000Z",
"firstSeenAt": "2026-04-01T08:30:00.000Z",
"url": "https://nen.nipez.cz/...",
"portalType": "NEN",
"cpvCode": "45000000",
"tenderType": "OFFERS",
"contractingAuthority": {
"ico": "12345678",
"name": "Město Praha",
"region": "Praha",
"district": "Praha 1"
},
"documents": [
{ "name": "Výzva.pdf", "url": "https://nen.nipez.cz/…", "fileType": "pdf", "fileSizeBytes": 320000 }
],
"starred": false,
"excluded": false
}
}
],
"pagination": { "nextCursor": "eyJmaXJzdFNlZW5BdC…", "totalCount": 42 }
}Geef voor de volgende pagina pagination.nextCursor door als ?cursor=-parameter.
Matchacties
Ster (favoriet), uitsluiten (verbergen) en bekijken (markeren als gelezen) zijn aanbestedingsspecifieke voorkeuren opgeslagen in UserTenderPreference.
/api/v2/leads/matches/:matchIdRespons: zelfde structuur als het lijstitem van matches.
/api/v2/leads/matches/:matchId/star{ "starred": true }/api/v2/leads/matches/:matchId/exclude{ "excluded": true }/api/v2/leads/matches/:matchId/viewGeen actie voor synthetische live-:id-matches (geen rij om te markeren).
/api/v2/leads/preferences{
"data": {
"starred": [12345, 67890],
"excluded": [54321]
}
}Taxonomie
Statische referentiecatalogi voor filterwaarden. Taalafhankelijke labels.
/api/v2/leads/taxonomy/industry?locale=cs{
"data": {
"locale": "cs",
"areas": [{ "id": "construction", "icon": "🏗️", "label": "Stavebnictví" }, …],
"tags": [
{ "id": "con_buildings", "area": "construction", "label": "Pozemní stavby", "cpvPrefixes": ["452"] },
…
]
}
}/api/v2/leads/taxonomy/cpv?locale=csRespons: boomstructuur divisies → groepen → klassen → categorieën → subcategorieën.
Webhook
Webhook-eindpunten (CRUD, geheimrotatie) zijn op accountniveau — eenmalig gedocumenteerd in Account-API → Webhooks. Dit gedeelte behandelt alleen de leads-specifieke eventpayload (leads.match.created) en HMAC-verificatie.
Eventlevering
Bij een nieuwe match sturen wij een event van het type leads.match.created met een HMAC-SHA256-handtekening in de X-Signature-256 header, idempotentiesleutel in X-Idempotency-Key, en het type in X-Event-Type. Bij een fout proberen we het opnieuw met exponentiële backoff gedurende maximaal ~33 uur.
Herhaalpolicy
Als uw eindpunt een niet-2xx-respons retourneert (of niet binnen 10 s reageert), probeert Veritra het opnieuw met exponentiële backoff: 1 min, 5 min, 30 min, 2 u, 12 u, 24 u. Na 6 mislukte pogingen wordt de webhook als mislukt gemarkeerd en gemarkeerd in het dashboard. De Idempotency-key blijft gelijk bij elke poging — uw eindpunt MOET dedupliceren (anders wordt dezelfde overeenkomst 6× verwerkt).
Eindpunten beheren via API
U kunt webhookeindpunten beheren zonder het dashboard te openen. Limiet: 5 eindpunten per account.
/api/v2/account/webhooks/api/v2/account/webhooks/api/v2/account/webhooks/:id/api/v2/account/webhooks/:id/api/v2/account/webhooks/:id/api/v2/account/webhooks/:id/rotate-secret/api/v2/account/webhooks/:id/test/api/v2/account/webhooks/:id/deliveries/api/v2/account/webhooks/:id/deliveries/:deliveryId/replayHMAC-handtekeningverificatie
De server ondertekent de payload als HMAC-SHA256(secret, raw_body) en stuurt dit mee in de header X-Signature-256 in het formaat sha256=hex. Verifieer dit in constante tijd, anders is de integratie kwetsbaar voor timing-aanvallen.
// Node.js (Express)
import crypto from "node:crypto";
const WEBHOOK_SECRET = process.env.MRICKWOOD_WEBHOOK_SECRET!;
function verify(rawBody: string, sig: string | undefined): boolean {
if (!sig) return false;
const expected = "sha256=" + crypto
.createHmac("sha256", WEBHOOK_SECRET)
.update(rawBody)
.digest("hex");
// Constant-time comparison (timing-safe)
const a = Buffer.from(sig);
const b = Buffer.from(expected);
return a.length === b.length && crypto.timingSafeEqual(a, b);
}
app.post("/webhooks/veritra",
express.raw({ type: "application/json" }),
async (req, res) => {
const raw = req.body.toString("utf8");
if (!verify(raw, req.header("X-Signature-256"))) {
return res.status(401).send("Invalid signature");
}
const idempKey = req.header("X-Idempotency-Key")!;
const evt = JSON.parse(raw);
// Idempotency: store idempKey, skip if already processed
if (await alreadyProcessed(idempKey)) return res.status(200).send("ok");
await processEvent(evt);
await markProcessed(idempKey);
res.status(200).send("ok"); // Must be 2xx within 10s
},
);# Python (Flask)
import hmac, hashlib, os
from flask import Flask, request, abort
WEBHOOK_SECRET = os.environ["MRICKWOOD_WEBHOOK_SECRET"]
def verify(raw: bytes, sig: str | None) -> bool:
if not sig: return False
expected = "sha256=" + hmac.new(
WEBHOOK_SECRET.encode(), raw, hashlib.sha256
).hexdigest()
return hmac.compare_digest(sig, expected)
@app.post("/webhooks/mrickwood")
def webhook():
raw = request.get_data()
if not verify(raw, request.headers.get("X-Signature-256")):
abort(401)
# ... idempotency check + process
return "ok", 200{
"id": "evt_…",
"type": "leads.match.created",
"createdAt": "2026-04-03T06:00:00.000Z",
"data": {
"filterId": "cm…",
"filterName": "Bouw in Praag",
"matchId": "cm…",
"tender": { "id": "12345", "title": "…", "estimatedValue": 12500000 }
}
}E-maildigest
Met emailDigest: true ontvangt u dagelijks een e-mail met een samenvatting van nieuwe aanbestedingen. De digest wordt 's ochtends (05:00 UTC) verzonden naar het e-mailadres van uw account. U kunt deze uitschakelen door het filter te bewerken.
Limieten
| Parameter | Type | Beschrijving |
|---|---|---|
| Proefperiode | 500 verzoeken/maand | 7 dagen gratis. Geen creditcard of factureringsprofiel vereist. Standaard ApiKey.requestsLimit. |
| Betaald abonnement | onbeperkt | Maandelijkse limiet is opgeheven. Alleen de technische snelheidslimiet van 100/u/sleutel is van toepassing. |
| Filters | 20 | Maximaal aantal actieve filters per account. |
| Webhook-eindpunten | 5 | Maximaal aantal actieve webhook-URL's per account. |
Bij overschrijding van de maandlimiet retourneert de API 429 met een Retry-After-header. De limiet wordt op de 1e van de maand gereset.