Rôle de contact (contact_role)
Un contact_role qualifie la fonction d'un contact vis-à-vis d'une company. Il indique ce que le contact est habilité à faire — représenter légalement la société, autoriser un paiement, recevoir les factures — et à quel niveau son rôle a été attesté.
Rôle
Un même contact peut détenir plusieurs rôles sur une même company — par exemple être à la fois legal_representative et beneficial_owner. Chaque rôle est un objet distinct avec son propre cycle de vie : certification progressive, fenêtre de validité, révocation.
Les rôles sont l'entrée d'interrogation clé pour la résolution de contacts dans les processus : le node resolve_contact et l'endpoint GET /v1/companies/:id/contacts/resolve filtrent sur les rôles actifs pour identifier le bon interlocuteur au bon moment.
Identifiant et structure
Chaque rôle porte un identifiant stable préfixé par ctr_. Il référence à la fois la company parente et le contact détenteur.
{
"object": "contact_role",
"id": "ctr_9b4c2a7e1f3d8c5b",
"company_id": "cmp_3a8f1d9c2b4e7f6a",
"contact_id": "ctc_d12e3f4a5b6c7d8e",
"role_type": "legal_representative",
"certification_level": "verified",
"max_power_amount": null,
"authorized_acts": null,
"valid_from": null,
"valid_until": null,
"revoked_at": null,
"source_reference": null,
"metadata": {},
"created_at": "2026-01-12T10:30:00.000Z",
"updated_at": "2026-03-01T09:00:00.000Z"
}Exemple avec un rôle proxy portant une délégation de pouvoir bornée :
{
"object": "contact_role",
"id": "ctr_1c2d3e4f5a6b7c8d",
"company_id": "cmp_3a8f1d9c2b4e7f6a",
"contact_id": "ctc_e5f6a7b8c9d0e1f2",
"role_type": "proxy",
"certification_level": "certified",
"max_power_amount": 5000000,
"authorized_acts": ["sign_invoices", "approve_payments"],
"valid_from": "2026-01-01",
"valid_until": "2026-12-31",
"revoked_at": null,
"source_reference": "PROC-2026-001",
"metadata": {},
"created_at": "2026-01-05T08:00:00.000Z",
"updated_at": "2026-01-05T08:00:00.000Z"
}Champs
| Champ | Type | Requis | Description |
|---|---|---|---|
id | string | oui | Identifiant du rôle (préfixe ctr_). |
object | string | oui | Toujours "contact_role". |
merchant_id | string | oui | Marchand dans lequel ce rôle est défini. |
company_id | string | oui | Company à laquelle ce rôle est attaché (cmp_…). |
contact_id | string | oui | Contact qui détient ce rôle (ctc_…). |
role_type | enum | oui | Type fonctionnel du rôle. |
certification_level | enum | oui | Niveau d'attestation : declarative, verified ou certified. |
max_power_amount | integer | non | Montant maximum en unités mineures que ce rôle est habilité à autoriser (principalement pour proxy). |
currency | string | non | Devise du plafond de pouvoir lorsque max_power_amount est renseigné. |
authorized_acts | array | non | Liste libre des actes autorisés dans le cadre de la délégation. |
valid_from | date | non | Date de début de validité (ISO 8601). null = valide immédiatement. |
valid_until | date | non | Date de fin de validité (ISO 8601). null = pas d'expiration. |
revoked_at | datetime | non | Horodatage de la révocation. null si le rôle est actif. |
source_reference | string | non | Référence dans votre système. |
metadata | object | non | Map plate de scalaires `string | number | boolean`, selon la convention metadata de l’API. |
created_at | datetime | oui | Date de création. |
updated_at | datetime | oui | Date de dernière mise à jour. |
Types de rôles
Les onze types de rôles se divisent en deux catégories selon qu'ils peuvent être attestés par une source tierce.
Rôles certifiables
Ces rôles peuvent atteindre le niveau certified via un registre officiel ou un document légal. Ils sont prioritaires dans les processus KYB et de conformité.
| role_type | Label | Source de certification | Description |
|---|---|---|---|
director | Director | Registre officiel | Membre du conseil d'administration ou de surveillance. Certifiable via Kbis, Companies House, Handelsregister… |
legal_representative | Legal representative | Registre officiel | Mandataire social habilité à engager la société (président, gérant, DG). Se distingue de director dans les structures à conseil de surveillance. |
beneficial_owner | Beneficial owner (UBO) | RBE / registre équivalent | Bénéficiaire effectif au sens AMLD5/6 : détenteur direct ou indirect de plus de 25 % du capital ou des droits de vote. Déclaration obligatoire au RBE en France. |
shareholder | Shareholder | Registre ou cap table | Actionnaire au-delà d'un seuil significatif (>10 % ou >25 % selon le contexte). Certifiable via registre ou cap table audité. |
proxy | Proxy | Document légal | Personne disposant d'une délégation de pouvoir formalisée (procuration notariée, délégation de signature). Peut agir dans un périmètre défini par max_power_amount. |
Rôles opérationnels
Ces rôles qualifient la fonction d'un contact pour le routing interne des notifications et des accès. Ils ne sont pas certifiables par un tiers et restent au niveau declarative.
| role_type | Label | Description |
|---|---|---|
main_contact | Main contact | Contact principal par défaut lorsque la fonction exacte n'est pas qualifiée. |
billing_contact | Billing contact | Destinataire des factures et avoirs. Utilisé pour l'envoi automatique des documents. |
payment_authorizer | Payment authorizer | Personne habilitée à approuver les paiements dans le processus de checkout. |
account_manager | Account manager | Interlocuteur commercial principal. Reçoit les relances, alertes de limite de crédit et notifications de statut. |
technical_contact | Technical contact | Référent technique pour l'intégration API/webhook. Reçoit les alertes de configuration et d'incident. |
employee | Employee | Appartenance à l'entreprise sans fonction spécifique. Permet un accès portail limité sans délégation de pouvoir. |
Niveau de certification
Le champ certification_level indique avec quelle rigueur le rôle a été attesté. Il progresse de declarative vers certified à mesure que les vérifications avancent ; il ne régresse pas.
| Niveau | Signification | Exemple |
|---|---|---|
declarative | Rôle déclaré par la company sans vérification indépendante. Valeur par défaut à la création. | Auto-déclaration lors de l'onboarding. |
verified | Rôle vérifié par croisement avec une source officielle (registre, base publique). | Vérification SIRENE via le node sirene.verify_sirene_company_director. |
certified | Rôle certifié par un tiers qualifié (document légal, provider KYB). Niveau le plus fort. Déclenche l'événement contact_role.certified. | Signature d'un document KYB par le provider, upload d'un Kbis. |
POST /v1/contact-roles/:id avec { "certification_level": "certified" }. Le passage à certified déclenche l'événement contact_role.certified, ce qui permet aux processus aval de réagir (déblocage d'une limite de crédit, envoi d'un accusé de réception…).Le node resolve_contact accepte un paramètre certification_levels pour ne retenir que les rôles atteignant un niveau minimum, et la stratégie most_certified sélectionne automatiquement le contact au niveau le plus élevé parmi les candidats.
Fenêtre de validité
Les champs valid_from et valid_until délimitent la période pendant laquelle un rôle est actif. Les deux sont optionnels et indépendants :
valid_from: null— le rôle est actif dès sa création.valid_until: null— le rôle n'a pas de date d'expiration.valid_untildoit être supérieure ou égale àvalid_fromsi les deux sont renseignées.
La résolution de contacts (node resolve_contact et endpointGET /v1/companies/:id/contacts/resolve) prend un paramètre at (date de référence, par défaut maintenant) et n'inclut que les rôles dont la fenêtre couvre cette date. Cela permet par exemple d'interroger qui était payment_authorizer à la date d'une transaction passée.
GET /v1/companies/cmp_3a8f/contacts/resolve ?role_types=payment_authorizer &at=2026-03-15T12:00:00Z
{
"object": "list",
"data": [
{
"contact": {
"id": "ctc_d12e",
"email": "marie.dupont@example.com"
},
"contact_role": {
"id": "ctr_9b4c",
"role_type": "payment_authorizer",
"certification_level": "declarative",
"valid_from": "2026-01-01",
"valid_until": "2026-12-31"
},
"matched_role_type": "payment_authorizer"
}
],
"has_more": false
}Révocation
Un rôle se révoque en passant { "revoke": true } dans la mise à jour. La plateforme horodate revoked_at et exclut immédiatement le rôle de toute résolution future.
POST /v1/contact-roles/ctr_9b4c
{
"revoke": true
}{
"id": "ctr_9b4c",
"revoked_at": "2026-06-17T10:00:00.000Z"
}Un rôle révoqué ne peut plus être mis à jour. Si le même contact doit retrouver un rôle identique, il faut créer un nouveau contact_role.
La révocation émet l'événement contact_role.revoked que vos processus peuvent écouter pour réagir (retrait d'accès portail, notification de fin de mandat…).
Dans les processus
| Node | Rôle | Entrées / sorties clés |
|---|---|---|
create_contact_role | Crée un rôle pour un contact sur une company | Accepte : company, contact, role_type, certification_level, max_power_amount, valid_from, valid_until · Produit : contact_role |
resolve_contact | Résout le meilleur contact d'une company via ses rôles actifs | Documenté dans la page Contact |
Événements
| Événement | Déclencheur |
|---|---|
contact_role.created | Le rôle vient d'être créé. |
contact_role.certified | certification_level est passé à "certified". |
contact_role.revoked | Le rôle a été révoqué. |
Contrairement à contact_role.created et contact_role.revoked qui se déclenchent à chaque opération, contact_role.certified n'est émis qu'une seule fois — lors du premier passage à certified. Les mises à jour ultérieures à ce niveau ne le redéclenchent pas.
Chaque événement inclut l'objet contact_role complet. La configuration des webhooks est décrite dans Recevoir des webhooks.