Enrichment
SIREN Enrich (LPR)
POST
Synchronously enrich a single SIREN through the Les Pages Rouges (LPR) matching pipeline. The endpoint pulls the company’s dirigeants from Pappers, searches LPR for each person, scores every candidate against the Pappers record, aggregates the strongest signals into a golden record per person, and returns the enriched rows in one response.
The response embeds a confidence score (0–180+) and a tier statut (
The resulting score is mapped to a
Each row in
Certain / Probable / À vérifier) per row, plus a lpr_debug.breakdown that explains which signals fired (DOB, address, name, postal, city, combo).
Choosing between
Use this endpoint for new integrations — the transparent score lets you gate on
/siren-enrich and /enrich-single:Both endpoints take a SIREN and return contact info for its dirigeants. They use different matching engines and have different trade-offs./siren-enrich (this endpoint) | /enrich-single | |
|---|---|---|
| Matching engine | Les Pages Rouges (LPR) + Pappers pipeline | Legacy enrichment engine |
| Per-row confidence score | ✅ score + statut (Certain / Probable / À vérifier) | ❌ not exposed |
| DOB-mismatch elimination | ✅ candidates with divergent DOBs are dropped | ❌ no |
| Siege address fallback | ✅ falls back to company siege when personal address is null | ❌ no |
status_filter (current / former) | ⚠️ accepted but not honored | ✅ supported |
| Audit/debug data per row | ✅ lpr_debug.breakdown | ❌ no |
Certain / Probable matches and skip paying for low-confidence ones (contacts are only charged when score > 40).
Use /enrich-single when you specifically need status_filter.Request Body
Confidence Scoring
Each candidate document is scored independently, then the best one per person becomes the golden record. Signal weights:| Signal | Weight | Notes |
|---|---|---|
| Date of birth match | +70 | A divergent DOB eliminates the candidate entirely. |
| Address match | +40 | Falls back to the company siege when the personal address is null. |
| Name match | +20 | Punctuation-tolerant token comparison (handles "Patrick, Jean-louis Belmon"). |
| Postal code match | +20 | |
| City match | +20 | Token-subset comparison — accepts LIMOGES CEDEX ≈ LIMOGES. |
| Birth city match | +5 | |
| Name + Postal + City combo | +20 | Bonus when all three location-anchored signals fire together. |
statut:
| Score | statut | Meaning |
|---|---|---|
≥ 60 | Certain | High confidence — contact data returned. |
40 – 59 | Probable | Medium confidence — contact data returned. |
< 40 | À vérifier | Low confidence — telephone_mobile, telephone_autre and emails are returned empty to avoid charging for weak matches. |
Credit Cost
Dynamic — calculated after the pipeline runs and only deducted if your balance covers it:- 1 credit per dirigeant returned (Pappers lookup)
- 10 credits per person with email found, only for rows with
score > 40 - 100 credits per person with phone found (
telephone_mobileortelephone_autre), only for rows withscore > 40
insufficient credits).
Response Fields
The top-level payload:| Field | Type | Description |
|---|---|---|
siren_origine | string | The SIREN you queried. |
denomination_origine | string | Company name from Pappers. |
code_naf_origine | string | NAF/APE activity code from Pappers. |
total_records | integer | Number of resultats returned (post-filter). |
resultats | array | One row per dirigeant; see below. |
credits_used.total | integer | Total credits deducted for this request. |
resultats:
| Field | Type | Description |
|---|---|---|
nom_complet | string | Display name from Pappers. |
qualite | string | Role label (e.g. Gérant). |
departement | string | French department code derived from input postal code. |
date_naissance | string | Formatted DOB from Pappers (YYYY-MM-DD). |
adresse_input / code_postal_input / ville_input | string | Address actually fed into the matcher (personal address, with siege fallback for EI rows). |
ville_naissance | string | Birth city from Pappers. |
score | integer | Confidence score (see table above). |
statut | string | Certain / Probable / À vérifier. |
telephone_mobile / telephone_autre | string[] | Phone numbers from the golden record. Empty for À vérifier rows. |
emails | string[] | Email addresses from the golden record. Empty for À vérifier rows. |
adresse_trouvee / code_postal_trouve / ville_trouvee | string | Address actually matched on the LPR side. |
hlr_mobile / hlr_status | string | Reserved for HLR enrichment (not populated by this endpoint). |
lpr_debug.breakdown | object | Per-signal score contributions (e.g. {"name": 20, "postal": 20, "combo_name_postal_city": 20}). Useful for debugging why a row landed at a given tier. |

