---
title: "Webhook : batch_enrichment.completed"
method: POST
path: "batch_enrichment.completed"
tags: ["Person Enrichment"]
---

# Webhook : batch_enrichment.completed

`POST batch_enrichment.completed` (webhook)

Envoyé sur votre `callbackUrl` quand un batch (POST /search/bulk) se termine. Le résultat complet est embarqué dans `results[]` (un objet par contact, forme aplatie - pas de `bestPhone`/`bestEmail`). En-tête `X-Listar-Signature: t=<ts>,v1=<hmac_sha256>`. Répondez 2xx pour acquitter.

## Payload

- BatchWebhookPayload: Corps POST sur votre callbackUrl quand un batch (POST /search/bulk) se termine. Le résultat est aplati par contact (`results[]`), pas au format `UnifiedSearchResponse` du webhook 1-contact.
  - `event` 'batch_enrichment.completed'
  - `id` string: ID du batch.
  - `status` 'completed' | 'pending_payment': `completed` → `results` rempli. `pending_payment` → données facturables trouvées mais crédit insuffisant : `results` omis, rechargez votre crédit.
  - `stats` object
    - `total` integer
    - `success` integer
    - `partial` integer
    - `notFound` integer
    - `phonesFound` integer
    - `emailsFound` integer
  - `pricing` object
    - `priceInCents` integer
    - `paidWithCredit` boolean
  - `results` BatchContactResult[]: Un objet par contact soumis. Présent uniquement si `status:"completed"`.
    - `ref` string: Votre identifiant, ré-échoué tel quel.
    - `input` object: Les champs du contact tels que soumis.
    - `status` 'success' | 'partial' | 'not_found' | 'pending' | 'excluded': `excluded` : la personne a exercé ses droits RGPD (effacement ou opposition). Rien n’est livré ni facturé.
    - `phone` string, nullable
    - `phoneStatus` 'verified' | 'not_verified', nullable
    - `phoneUsage` 'professional' | 'personal', nullable: Usage probable du téléphone : ligne professionnelle ou personnelle. Absent quand les indices manquent ou se contredisent.
    - `phoneUsageConfidence` 'high' | 'medium' | 'low', nullable: Confiance dans `phoneUsage`. `low` = verdict probable (un seul indice modéré, ou compte WhatsApp Business sans autre indice).
    - `proEmail` string, nullable
    - `proEmailStatus` 'verified' | 'not_verified', nullable
    - `proEmailDomainUncorroborated` boolean, nullable: Domaine de l'email pro non corroboré par la société demandée ni par son domaine officiel. L'adresse est livrée telle quelle : à vérifier avant prospection.
    - `persoEmail` string, nullable
    - `persoEmailStatus` 'verified' | 'not_verified', nullable
  - `submittedAt` string, date-time
  - `completedAt` string, date-time

## Acknowledgement `200`

Acquittement.

---

[API](https://skmtc.dev/listar/apis/listar-api.md) · [All operations](https://skmtc.dev/listar/apis/listar-api/llms.txt) · [OpenAPI document](https://skmtc.dev/listar/apis/listar-api/revisions/d8b4a5e9acc8?raw)
