Create Public Contract Award signal
Identify companies scaling after winning French public contracts — those with immediate budget and operational expansion needs. The winning vendor (titulaire) becomes your lead. Input: your webhook URL (webhookUrl), daily lead cap (dailyLeadLimit), and filters on the winning company: contract keywords/exclusions (keywords, keywordsExclude), procurement classification (cpvCodes), contract value range (minContractValue, maxContractValue), company size (titulaireCategories: PME/ETI/GE), and geography for both winner (titulaireRegions, titulaireDepartements) and buyer (acheteurRegions, acheteurDepartements). Optionally enable enrichment (getEmails, getPhones, getSireneData) and person-level targeting via targetPersonas (role titles like "CEO", "CFO"). Output: an immediate HTTP 201 response with your signal ID and configuration. Matching leads are then delivered to your webhookUrl as they are detected — each payload includes the contract details, the winning company, and any matched decision-makers — filtered by your geography and size configuration and capped at your daily limit. Duplicate awards are not re-sent.
Use cases:
- Winner outreach — companies that just won a public contract have new budget and delivery needs; pitch enabling services.
- Subcontracting — offer to subcontract on the awarded work.
Request
- Base URL: https://api.rodz.io (the document declares no server; this is the origin it was published from)
- URL: https://api.rodz.io/api/v1/signals/public-contract-award
- Auth: HTTP bearer
Request body
Example request
{
"config": {
"acheteurDepartements": [],
"acheteurRegions": [],
"cpvCodes": [],
"customPersonaTitles": [],
"detectTechnologies": false,
"excludedTitles": [],
"getEmails": true,
"getHomepageContent": false,
"getPhones": false,
"getSireneData": true,
"keywords": [],
"keywordsExclude": [],
"minContractValue": 50000,
"targetPersonas": [
"CEO",
"CFO",
"Operations Director"
],
"titulaireCategories": [
"PME",
"ETI"
],
"titulaireDepartements": [],
"titulaireRegions": []
},
"dailyLeadLimit": 50,
"name": "B2B services prospecting — French SMEs winning €50k+ contracts",
"status": "active",
"webhookUrl": "https://your-server.com/webhooks/rodz"
}Response
Signal created
Example response
{
"applied": {
"allowUnknownCompanySize": false,
"maxJobAgeDays": 180
},
"config": {
"companySizeFilters": [
"201-500",
"501-1000"
],
"getEmails": true,
"jobTitles": [
"CTO"
],
"locations": [
"France"
],
"maxJobAgeDays": 90
},
"createdAt": "2026-01-15T10:30:00Z",
"dailyLeadLimit": 50,
"duplicateHandling": "refuse",
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"lastLeadAt": "2026-03-15T14:22:00Z",
"leadsToday": 3,
"leadsTotal": 127,
"name": "CTOs changing jobs in France",
"signalTypeId": "job_changes",
"status": "active",
"updatedAt": "2026-03-16T08:00:00Z",
"warnings": [
{
"code": "VALUE_BELOW_MINIMUM",
"field": "maxJobAgeDays",
"message": "`maxJobAgeDays` is 90; this signal applies 180. Job changes are delivered up to 180 days after the start date, and a shorter window is raised to that minimum.",
"severity": "info",
"values": [
"90"
]
}
],
"webhookUrl": "https://your-server.com/webhooks/rodz"
}Changes
No recorded changes to this operation across all 1 revision of this API.