Dossier d’onboarding (onboarding_case)

Un onboarding_case représente le dossier d'entrée en relation avec une entreprise. Il pilote un processus d'orchestration qui collecte les données, exécute les vérifications de conformité, et rend une décision d'approbation ou de rejet. Il fournit également une URL vers un parcours utilisateur que le sujet complète lui-même.

Rôle

Le dossier d'onboarding est l'objet central des flux KYC et KYB. Il porte deux dimensions distinctes : le cycle de vie du dossier (est-il encore actif ?) et la décision finale (le sujet est-il approuvé ?). Cette séparation permet de distinguer un dossier clôturé avec un refus d'un dossier annulé avant toute décision.

À la création, un processus d'orchestration est lancé automatiquement. Ce processus est responsable de collecter les pièces justificatives, d'appeler les providers de vérification d'identité, et de conclure en rattachant le dossier aux objets company et contact créés au fil du processus.

Identifiant et structure

Chaque dossier porte un identifiant stable préfixé par obc_. Le champ url est fourni directement dans la réponse à la création — aucun appel supplémentaire n'est nécessaire pour récupérer le lien à transmettre au sujet.

JSON
"onboarding_case":{22 items
"object":"onboarding_case"
"id":"obc_3f8a1d9c2b4e7f6a"
"subject_type":"company"
"status":"open"
"decision_status":"pending"
"company_id":null
"contact_id":null
"process_definition_id":"prd_8a2b3c4d5e6f7a8b"
"process_instance_id":"pci_1b2c3d4e5f6a7b8c"
"process_status":"running"
"url":"https://onboarding.example.com/o/obc_3f8a…"
"initial_data":{1 item
"company":{...}3 items
}
"dedupe_key":"source_reference:crm-prospect-00512"
"locale":"fr"
"return_url":"https://example.com/onboarding/return"
"source_reference":"CRM-PROSPECT-00512"
"metadata":{}0 items
"checks":[]0 items
"opened_at":"2026-06-17T09:00:00.000Z"
"closed_at":null
"created_at":"2026-06-17T09:00:00.000Z"
"updated_at":"2026-06-17T09:00:00.000Z"
}
{
  "object": "onboarding_case",
  "id": "obc_3f8a1d9c2b4e7f6a",
  "subject_type": "company",
  "status": "open",
  "decision_status": "pending",
  "company_id": null,
  "contact_id": null,
  "process_definition_id": "prd_8a2b3c4d5e6f7a8b",
  "process_instance_id": "pci_1b2c3d4e5f6a7b8c",
  "process_status": "running",
  "url": "https://onboarding.example.com/o/obc_3f8a…",
  "initial_data": {
    "company": {
      "legal_name": "Dupont & Fils SARL",
      "registration_number": "841234567",
      "registration_country": "FR"
    }
  },
  "dedupe_key": "source_reference:crm-prospect-00512",
  "locale": "fr",
  "return_url": "https://example.com/onboarding/return",
  "source_reference": "CRM-PROSPECT-00512",
  "metadata": {},
  "checks": [],
  "opened_at": "2026-06-17T09:00:00.000Z",
  "closed_at": null,
  "created_at": "2026-06-17T09:00:00.000Z",
  "updated_at": "2026-06-17T09:00:00.000Z"
}

Type de sujet

Le champ subject_type détermine la nature du sujet à onboarder et les contraintes de clôture qui en découlent.

subject_typeSujetRequis pour approuver
companyEntreprise (personne morale)company_id doit être renseigné
individualParticulier (personne physique)company_id et contact_id doivent être renseignés

La décision d'onboarding reste portée par le dossier via decision_status. Elle n'est pas projetée sur la company : plusieurs dossiers peuvent coexister ou être rejoués, et la politique qui autorise ensuite une opération appartient au processus ou au marchand.

Champs

ChampTypeDescription
idstringIdentifiant du dossier (préfixe obc_).
objectstringToujours "onboarding_case".
merchant_idstringMarchand propriétaire du dossier.
subject_typeenumType de sujet : "company" ou "individual".
statusenumCycle de vie : open, completed, cancelled.
decision_statusenumDécision finale : pending, approved, rejected.
company_idstringEntreprise rattaché au dossier (cmp_…). Peut être null jusqu'à la résolution dans le processus.
contact_idstringContact principal rattaché (ctc_…). Requis pour les dossiers "individual" approuvés.
process_definition_idstringDéfinition de processus d'onboarding lancée (prd_…).
process_instance_idstringInstance de processus qui pilote actuellement le dossier (pci_…). Peut changer lors d’une reprise corrective.
process_statusenumÉtat d’exécution dérivé de l’instance associée : running, waiting, stopping, completed, failed, retry_exhausted, superseded, stopped ou null.
urlstringURL de l'expérience d'onboarding hébergée. Fournie dans la réponse de création.
initial_dataobjectDonnées de pré-remplissage injectées dans le processus. Voir section dédiée.
dedupe_keystringClé de déduplication. Auto-générée si absente. Voir section dédiée.
localestringLangue du parcours utilisateur (ex. fr, en).
return_urlstringURL de redirection après complétion de l'expérience.
source_referencestringRéférence dans votre système (CRM, dossier interne…).
metadataobjectMap plate de scalaires `string | number | boolean`, selon la convention metadata de l’API.
checksarrayContrôles de conformité rattachés au dossier. Inclus uniquement sur GET /:id.
opened_atdatetimeDate d'ouverture du dossier.
closed_atdatetimeDate de clôture (statut final). null si encore ouvert.
created_atdatetimeDate de création.
updated_atdatetimeDate de dernière mise à jour.

Cycle de vie et décision

Le champ status décrit le cycle de vie du dossier. Le champ decision_status exprime la décision finale. Seules certaines combinaisons sont valides.

État initialopen
completed
cancelled

Combinaisons valides

statusdecision_statusValideNote
openpendingouiÉtat initial. Aucune décision prise.
completedapprovedouiDécision favorable. Company (et contact si individual) obligatoires.
completedrejectedouiDécision défavorable.
completedpendingnonUn dossier completed doit porter une décision.
cancelledpendingouiAnnulation sans décision. decision_status ne peut pas être non-pending.
cancelledapproved/rejectednonUn dossier annulé ne peut pas porter de décision.
Contraintes de clôture Un dossier en statut final (completed ou cancelled) ne peut plus être modifié. Si vous utilisez le node finalize_onboarding_case, le paramètre status prend directement la valeur de la décision ("approved" ou "rejected"), pas le statut du dossier — le node applique lui-même status: completed.

Processus associé

Un dossier créé avec un processus d'onboarding expose l'instance qui pilote actuellement son traitement via process_instance_id. Le champ process_status donne l'état de cette instance. Il est dérivé de l'exécution associée et reste distinct de status et decision_status.

ExempleLecture
status: open + process_status: runningLe dossier est ouvert et son traitement est en cours.
status: open + process_status: stoppedL'exécution a été arrêtée, mais le dossier n'a pas été annulé automatiquement.
status: completed + decision_status: approved + process_status: completedLe dossier porte une décision favorable et l'exécution est terminée.
La décision reste explicite Une instance completed n'approuve ni ne rejette automatiquement le dossier. Une instance failed, retry_exhausted ou stopped ne le passe pas automatiquement à cancelled. Le node finalize_onboarding_case et les nodes d'update explicites restent responsables de la décision et du cycle de vie métier.

Lorsqu'un retry manuel, un fork retry_step / skip_step ou la reprise d'une étape utilisateur crée une nouvelle instance pour poursuivre le même onboarding, process_instance_id bascule vers cette nouvelle instance. Elle devient l'exécution canonique du dossier et process_status reflète son état. L'ancienne instance reste consultable pour la traçabilité.

Voir Erreurs et idempotence pour les règles de reprise et de transfert de l'instance associée.

Données initiales

Le champ initial_data permet de pré-remplir les données du sujet avant que le processus démarre. Ces données sont injectées dans le processus sous forme de variables de type draft :

Clé dans initial_dataVariable dans le processusChamps acceptés
initial_data.companycompany_draftlegal_name, trade_name, legal_form, registration_number, registration_country, tax_identifier, registered_address, incorporation_date, share_capital, currency, is_buyer, is_supplier, source_reference, metadata
initial_data.contactcontact_draftfull_name, first_name, last_name, email, phone, job_title, preferred_locale, source_reference, metadata

Ces variables draft sont disponibles dès le démarrage du processus et peuvent être passées aux nodes create_company ou create_contact pour créer les objets réels sans redemander les données déjà connues.

Création avec des données initiales préremplies

HTTP
POST /v1/onboarding-cases
{4 items
"subject_type":"company"
"locale":"fr"
"source_reference":"CRM-PROSPECT-00512"
"initial_data":{1 item
"company":{...}4 items
}
}
{
  "subject_type": "company",
  "locale": "fr",
  "source_reference": "CRM-PROSPECT-00512",
  "initial_data": {
    "company": {
      "legal_name": "Dupont & Fils SARL",
      "registration_number": "841234567",
      "registration_country": "FR",
      "is_buyer": true
    }
  }
}

Déduplication

La plateforme empêche l'ouverture de plusieurs dossiers actifs pour le même sujet. La détection repose sur une clé de déduplication (dedupe_key).

Si dedupe_key n'est pas fourni, il est généré automatiquement selon la priorité suivante :

  1. source_reference:<valeur normalisée> — si source_reference est présent
  2. person_company:<email>:<pays>:<numéro> — si email et numéro d'entreprise sont dans initial_data
  3. company_registration:<pays>:<numéro> — si seul le numéro d'entreprise est disponible
  4. person_email:<email> — si seul l'email est disponible

Si un dossier actif (status: open) existe déjà avec la même clé, la création retourne une erreur 409 :

HTTP
409 Conflict
{1 item
"error":{1 item
"message":"An active onboarding case already exists for this dedupe key"
}
}
{
  "error": {
    "message": "An active onboarding case already exists for this dedupe key"
  }
}

Pour ignorer la déduplication dans des cas spécifiques (ex. re-onboarding volontaire), passez un dedupe_key unique aléatoire à chaque création.

Checks de conformité

Chaque dossier porte un tableau checks de contrôles de conformité réalisés au fil du processus. Ces contrôles sont accessibles sur GET /v1/onboarding-cases/:id (non inclus dans la liste).

Chaque check enregistre un résultat de vérification avec son provider, son scope, le sujet vérifié, et un horodatage. Les résultats possibles sont :

RésultatSignification
pendingVérification en attente de résultat
passedVérification réussie
failedVérification échouée
manual_reviewRésultat ambigu, nécessite une révision manuelle
errorErreur technique lors de la vérification

Le node create_compliance_check permet d'enregistrer une trace de vérification dans le processus. Il accepte comme sujet (subject) une company, un contact ou un contact_role. Le champ check_type peut prendre des valeurs libres (ex. kyc, kyb, sanctions, pep).

Dans les processus

Le dossier est injecté automatiquement comme entrée du processus d'onboarding sous la variable onboarding_case (type platform.onboarding_case). Cinq nodes permettent de le piloter :

NodeRôleEntrées / sorties clés
finalize_onboarding_caseRésout les sujets, les rattache et applique la décision finale — pattern recommandéAccepte : onboarding_case, status (approved | rejected), company?, contact? · Produit : onboarding_case, company, contact
update_onboarding_case_statusMet à jour status et/ou decision_statusAccepte : onboarding_case, status (open | completed | cancelled), decision_status? · Produit : onboarding_case
update_onboarding_case_subjectRattache une company et/ou un contact au dossier sans cloreAccepte : onboarding_case, company?, contact?, source_reference, dedupe_key · Produit : onboarding_case
create_compliance_checkEnregistre un contrôle de conformité sur un sujet, avec rattachement optionnel au dossierAccepte : onboarding_case?, scope, subject, check_type, provider?, result, raw_response?, valid_until? · Produit : compliance_check
has_already_onboardedVérifie si la company a déjà un onboarding approuvé et clôturéAccepte : company, contact? · Route yes (produit onboarding_case, completed_at) / no
finalize_onboarding_case vs update_onboarding_case_status Dans finalize_onboarding_case, le paramètre status prend "approved" ou "rejected" (la décision), pas "completed". Le node applique lui-même status: completed et résout les sujets en une seule opération. Utilisez update_onboarding_case_status seulement si la logique de rattachement a déjà été gérée séparément.

Événements

ÉvénementDéclencheur
onboarding_case.company.createdDossier créé avec subject_type "company".
onboarding_case.individual.createdDossier créé avec subject_type "individual".
onboarding_case.completedDossier clôturé avec decision_status "approved".
onboarding_case.rejectedDossier clôturé avec decision_status "rejected".

L'événement de création est différencié par subject_type, ce qui permet de déclencher des processus d'onboarding distincts selon la nature du sujet sans filtrage supplémentaire dans le déclencheur. Le passage à cancelled ne déclenche pas d'événement dédié.

L'endpoint GET /v1/onboarding-cases/search permet de retrouver le dernier dossier complété et approuvé pour une company (et optionnellement un contact) donnée, sans parcourir la liste paginée :

HTTP
GET /v1/onboarding-cases/search?company_id=cmp_3a8f
"onboarding_case_search_result":{3 items
"object":"onboarding_case_search_result"
"onboarding_case":{2 items
"id":"obc_3f8a"
"status":"completed"
}
"completed_at":"2026-01-15T14:30:00.000Z"
}
{
  "object": "onboarding_case_search_result",
  "onboarding_case": {
    "id": "obc_3f8a",
    "status": "completed"
  },
  "completed_at": "2026-01-15T14:30:00.000Z"
}