Matching
Listes de suivi
Un comptable qui suit trois mille clients ne devrait pas avoir à chercher. Placez les entreprises une fois sur une liste de suivi : elles sont évaluées aussitôt, puis réévaluées chaque fois qu’une mesure change, avec un événement pour chaque résultat qui apparaît, change ou disparaît.
À partir de BusinessLes listes de suivi demandent la fonction watchlists. Jusqu’à 50 listes par compte ; le nombre d’entreprises sur l’ensemble des listes dépend de la formule (5 000 sur Business, illimité sur Enterprise).
Créer une liste de suivi
curl -X POST "https://api.subsido.be/v1/watchlists" \ -H "Authorization: Bearer sb_live_..." \ -H "Content-Type: application/json" \ -d '{"name": "Clients Gent", "language": "nl", "options": {"statuses": ["open", "continuous", "forthcoming"]}}'| Propriété | Signification |
|---|---|
| name | 1 à 120 caractères. |
| options | Les mêmes options de matching que POST /v1/match : statuses, instrument_types, include_not_eligible, include_unrelated. Elles s’appliquent à chaque entreprise de la liste. |
| language | nl, fr ou en (par défaut) : la langue des libellés et des questions enregistrés. |
201 avec la liste : { id, name, options, language, companies, matches, created_at, updated_at, last_evaluated_at }, où id a la forme wl_…, companies compte les entreprises de la liste et matches les résultats actuels qui ne sont pas not_eligible.
| Route | Ce qu’elle fait |
|---|---|
| GET /v1/watchlists | Toutes les listes du compte, en une seule page. |
| GET /v1/watchlists/{id} | Une liste. |
| PATCH /v1/watchlists/{id} | Modifier le nom, les options ou la langue ; n’envoyez que ce qui change. |
| DELETE /v1/watchlists/{id} | La supprimer, avec ses entreprises et leurs résultats. |
| POST /v1/watchlists/{id}/companies | Ajouter ou remplacer des entreprises, et les évaluer aussitôt. |
| GET /v1/watchlists/{id}/companies | Les entreprises de la liste, paginées avec limit et cursor. |
| DELETE /v1/watchlists/{id}/companies/{reference} | Retirer une entreprise (encodez la référence pour l’URL). |
| GET /v1/watchlists/{id}/matches | Les résultats actuels. |
Ajouter des entreprises
curl -X POST "https://api.subsido.be/v1/watchlists/wl_06f8r9t2b4c6d8e0f2g4h6j8km/companies" \ -H "Authorization: Bearer sb_live_..." \ -H "Content-Type: application/json" \ -d '{"companies": [ {"reference": "client-0042", "company": {"postcode": "9000", "employees": 12, "turnover_eur": 1500000, "legal_form": "bv", "nace": ["62.010"]}}, {"reference": "client-0043", "company": {"postcode": "98200", "legal_form": "eenmanszaak"}, "project": {"topics": ["energy_efficiency"]}} ]}'- 1 à 1 000 entreprises par requête. Chacune porte votre propre
reference(1 à 200 caractères), etcompanyetprojectacceptent exactement les propriétés d’une requête de matching. - Une référence déjà présente sur la liste est remplacée, et n’est pas comptée une seconde fois dans le plafond d’entreprises de votre formule.
- Une entreprise aux informations invalides, à la référence en double ou vide est refusée isolément ; les autres sont acceptées.
- Chaque entreprise acceptée est évaluée avant la fin de l’appel, sur les mêmes mesures que
/v1/match, et compte pour une évaluation de matching. La requête entière est refusée avecmatch_quota_exceededsi les entreprises acceptées vous faisaient dépasser votre quota, et avecplan_requiredsi elles faisaient dépasser au compte son plafond d’entreprises.
{
"watchlist_id": "wl_06f8r9t2b4c6d8e0f2g4h6j8km",
"added": 1,
"replaced": 0,
"rejected": [
{
"reference": "client-0043",
"error": {
"code": "invalid_body",
"message": "company.postcode: company.postcode is not a Belgian postcode",
"details": {
"field": "company.postcode"
}
}
}
],
"matches": 7,
"meta": {
"request_id": "req_0192d3a4b5c67d8e9f0a1b2c3d4e5f63",
"warnings": []
}
}matches compte les résultats des entreprises acceptées qui ne sont pas not_eligible. La deuxième entreprise a été refusée pour un code postal à cinq chiffres ; la première a été ajoutée et évaluée.
Lire les résultats
curl "https://api.subsido.be/v1/watchlists/wl_06f8r9t2b4c6d8e0f2g4h6j8km/matches?company=client-0042" \ -H "Authorization: Bearer sb_live_..."| Paramètre | Signification |
|---|---|
| company | La référence d’une entreprise. Sans ce paramètre, les résultats de toutes les entreprises. |
| include_not_eligible | Aussi les résultats not_eligible, si les options de la liste les conservent. Par défaut false. |
| limit | Nombre de lignes, de 1 à 5 000 (500 par défaut). Cette liste n’est pas paginée. |
La réponse est { data, meta, disclaimer }. Chaque ligne est { company_reference, subsidy_id, match_status, score, result, subsidy_version, first_matched_at, updated_at }, où result est le résultat tel que /v1/match le calcule (statut, confiance, pertinence, raisons, inconnues, estimation), sans le résumé de la mesure : lisez celle-ci avec GET /v1/subsidies/{id}. subsidy_version est la version sur laquelle l’évaluation a porté.
Réévaluation et événements
Nous réévaluons une liste dès qu’une mesure susceptible de correspondre ou l’une de ses entreprises a changé depuis la dernière évaluation (last_evaluated_at). Cette réévaluation en arrière-plan est comprise dans la formule et n’est jamais comptée comme évaluation de matching. Chaque différence devient un événement :
| Événement | Quand |
|---|---|
| match.created | Une mesure commence à correspondre à une entreprise (y compris lors de la première évaluation, à l’ajout des entreprises). |
| match.status_changed | Le statut d’un résultat change, par exemple de possibly_eligible à likely_eligible. previous_status indique l’ancien statut. |
| match.removed | Une mesure ne correspond plus : elle a fermé, ses règles ont changé, ou les informations de l’entreprise. |
Les événements de matching appartiennent au propriétaire de la liste. Ils ne parviennent qu’aux webhooks de ce compte (filtrez-les avec watchlists ou event_types) et n’apparaissent jamais dans le flux de modifications public.
{
"id": "chg_06f8s2m4d2a9b1c7e3g5h8j0kn",
"event": "match.created",
"created_at": "2026-09-27T07:00:03+02:00",
"data": {
"subject": "match",
"id": "wl_06f8r9t2b4c6d8e0f2g4h6j8km:client-0042:federal:investeringsaftrek",
"version": null,
"categories": [
"match.created"
],
"diff": {},
"summary": {
"watchlist_id": "wl_06f8r9t2b4c6d8e0f2g4h6j8km",
"company_reference": "client-0042",
"subsidy_id": "federal:investeringsaftrek",
"match_status": "likely_eligible",
"previous_status": null,
"subsidy": {
"title": {
"nl": "Investeringsaftrek",
"fr": "Déduction pour investissement",
"en": "Investment deduction",
"de": null
},
"status": "continuous",
"instrument_type": "tax_deduction",
"issuer": "FOD Financiën",
"closes_at": null,
"regions": [],
"topics": [
"investment",
"digitalisation"
],
"url": "https://financien.belgium.be/nl/ondernemingen/vennootschapsbelasting/belastingvoordelen/investeringsaftrek",
"source_id": "curated_federal"
}
}
}
}Ce que nous conservons
Des faits, pas des personnes
