Groupe d’entreprises (company_group)

Un company_group est un regroupement logique de companies. Il permet d'appliquer des politiques communes — limite de crédit partagée, règle de conformité, segment tarifaire — à un ensemble d’entreprises sans dupliquer la configuration sur chaque company.

Rôle

Le groupe n'a pas de sémantique métier figée : c'est un conteneur nommé dont l'usage est défini par vos processus. Exemples courants :

  • Grands comptes — companies bénéficiant d'une limite de crédit élevée ou de conditions de paiement étendues.
  • Partenaires stratégiques — fournisseurs éligibles à des programmes de financement prioritaires.
  • Liste de surveillance — companies faisant l'objet d'un contrôle de conformité renforcé.
  • Segment tarifaire — acheteurs auxquels s'appliquent des conditions commerciales spécifiques.

La relation est de type plusieurs-à-plusieurs : une company peut appartenir à plusieurs groupes, et un groupe peut contenir un nombre illimité de companies.

Identifiant et structure

Chaque groupe porte un identifiant stable préfixé par cgp_. Sa structure est intentionnellement minimaliste — les données métier vivent sur les companies et les processus, pas sur le groupe lui-même.

JSON
"company_group":{8 items
"object":"company_group"
"id":"cgp_7fa1b2c3d4e5f6a7"
"name":"Grands comptes FR"
"description":"Acheteurs bénéficiant d'une limite de crédit supérieure à 500 k€"
"source_reference":"SEGMENT-GC-FR"
"metadata":{}0 items
"created_at":"2026-01-08T09:00:00.000Z"
"updated_at":"2026-01-08T09:00:00.000Z"
}
{
  "object": "company_group",
  "id": "cgp_7fa1b2c3d4e5f6a7",
  "name": "Grands comptes FR",
  "description": "Acheteurs bénéficiant d'une limite de crédit supérieure à 500 k€",
  "source_reference": "SEGMENT-GC-FR",
  "metadata": {},
  "created_at": "2026-01-08T09:00:00.000Z",
  "updated_at": "2026-01-08T09:00:00.000Z"
}

Champs

ChampTypeRequisDescription
idstringouiIdentifiant du groupe (préfixe cgp_).
objectstringouiToujours "company_group".
merchant_idstringouiMarchand propriétaire du groupe.
namestringouiNom libre du groupe.
descriptionstringnonDescription optionnelle.
source_referencestringnonRéférence dans votre système.
metadataobjectnonMap plate de scalaires `string | number | boolean`, selon la convention metadata de l’API.
created_atdatetimeouiDate de création.
updated_atdatetimeouiDate de dernière mise à jour.

Gestion des membres

Les appartenances se gèrent depuis les deux extrémités de la relation, selon le sens le plus pratique dans votre contexte.

Depuis le groupe

EndpointEffet
GET /v1/company-groups/:id/companiesListe paginée des companies membres (résumé : id, display_name, suspended).
POST /v1/company-groups/:id/company-linksRemplace atomiquement la liste complète des membres. Envoie { "company_ids": ["cmp_…", …] }. Les companies absentes de la liste sont retirées ; les nouvelles sont ajoutées.
DELETE /v1/company-groups/:id/company-links/:company_idRetire une company du groupe sans toucher aux autres.

Depuis la company

EndpointEffet
GET /v1/companies/:id/company-groupsListe des groupes auxquels la company appartient.
POST /v1/companies/:id/company-group-linksRemplace atomiquement l'ensemble des groupes de la company. Envoie { "company_group_ids": ["cgp_…", …] }.
DELETE /v1/companies/:id/company-group-links/:company_group_idRetire la company d'un groupe sans toucher aux autres.

Les deux opérations de remplacement (company-links) sont atomiques et différentielles : seuls les changements effectifs déclenchent des événements. Ajouter une company déjà membre ou retirer une company absente est silencieux.

HTTP
POST /v1/company-groups/cgp_7fa1/company-links
{1 item
"company_ids":[3 items
0:"cmp_3a8f"
1:"cmp_4b9e"
2:"cmp_5c0f"
]
}
{
  "company_ids": ["cmp_3a8f", "cmp_4b9e", "cmp_5c0f"]
}

Chaque changement par rapport à l’état précédent émet un événement company.assigned_to_group ou company.removed_from_group.

Pour filtrer la liste des companies par groupe lors d'un appel à GET /v1/companies, utilisez le paramètre group_id :

HTTP
GET /v1/companies?group_id=cgp_7fa1

Suppression

Un groupe ne peut être supprimé que s'il ne contient plus aucune company. Toute tentative de suppression avec des membres retourne une erreur 409 :

HTTP
DELETE /v1/company-groups/cgp_7fa1
409 Conflict
{1 item
"error":{1 item
"message":"Cannot delete a group that still has companies assigned to it"
}
}
{
  "error": {
    "message": "Cannot delete a group that still has companies assigned to it"
  }
}

Pour supprimer un groupe non vide, videz-le d'abord via POST /v1/company-groups/:id/company-links avec { "company_ids": [] }, puis supprimez-le.

Dans les processus

Le node check_company_group_membership vérifie si une company appartient à un groupe donné et route le processus en conséquence :

NodeRôleEntrées / sorties clés
check_company_group_membershipVérifie l'appartenance d'une company à un groupe et route en conséquenceAccepte : company, company_group_id · Route in_group / not_in_group · Produit : is_member

Ce node est typiquement utilisé pour appliquer des règles différenciées selon le segment d'une company : approbation automatique pour les membres d'un groupe de confiance, vérification renforcée pour les companies sous surveillance, conditions de crédit spéciales pour les grands comptes.

Événements

Le groupe émet ses propres événements de cycle de vie, et chaque changement d'appartenance produit un événement sur la company concernée.

ÉvénementDéclencheur
company_group.createdLe groupe vient d'être créé.
company_group.updatedLe groupe a été mis à jour (nom, description…).
company_group.deletedLe groupe a été supprimé.
company.assigned_to_groupUne company a été ajoutée au groupe.
company.removed_from_groupUne company a été retirée du groupe.

Les événements d'appartenance (company.assigned_to_group et company.removed_from_group) ont le payload suivant :

JSON
{2 items
"company_id":"cmp_3a8f…"
"company_group_id":"cgp_7fa1…"
}
{
  "company_id": "cmp_3a8f…",
  "company_group_id": "cgp_7fa1…"
}

Lors d'un remplacement atomique portant sur plusieurs companies, un événement distinct est émis par changement effectif — pas un seul événement groupé.