Catégories de transactions
Chaque transaction possède untransaction_category qui détermine la manière dont les règles et les analyses la traitent :
Détails de la transaction
L’objettransaction_details contient les données financières :
Sujet et contrepartie
Chaque transaction a un sujet (obligatoire) et une contrepartie (facultative). Les deux utilisent le même modèle de partie :
Didit déduit le
country_code de la partie à partir de address.country lorsque address est un objet. Lorsque address est une chaîne, country_code est renvoyé null pour cette partie.
Lorsque vendor_data correspond à un utilisateur existant ou à une entreprise existante, Didit relie automatiquement la transaction au profil de cette entité, ce qui permet l’évaluation des règles entre sessions et les contrôles de vélocité.
Dans la réponse, les deux parties sont renvoyées dans le tableau parties, avec les rôles APPLICANT et COUNTERPARTY.
Moyens de paiement
Associez unpayment_method à chaque partie pour décrire l’instrument de ce côté :
Sur les transactions
travelRule, un moyen de paiement de contrepartie avec method_type: "unhosted_wallet" (alias type) déclare le portefeuille de la contrepartie comme auto-hébergé.
Lorsque Travel Rule est activée et que le montant, exprimé dans la devise par défaut de votre application, n’est pas inférieur à threshold_amount, le transfert passe directement à UNCONFIRMED_OWNERSHIP et au flux de preuve de propriété – voir Portefeuilles auto-hébergés déclarés.
Pour les transactions crypto, incluez les adresses de portefeuille dans account_id et définissez currency_kind sur crypto afin que le filtrage blockchain puisse s’exécuter automatiquement. Le sens de la transaction détermine le portefeuille filtré : le filtrage entrant avant transfert utilise le portefeuille de l’expéditeur dans counterparty.payment_method.account_id ; le filtrage sortant utilise le portefeuille de destination dans counterparty.payment_method.account_id. Si vous envoyez un hash blockchain dans transaction_details.payment_reference_id, le filtrage de transaction entrante exige l’adresse de dépôt de votre service dans subject.payment_method.account_id, tandis que le filtrage de transaction sortante exige le portefeuille de destination dans counterparty.payment_method.account_id.
Remplacement du filtrage crypto
Utilisezinclude_crypto_screening au niveau racine de la requête pour remplacer la valeur par défaut configurée dans Transactions > Paramètres de la Console :
Contexte de l’appareil
Incluez les informations sur l’appareil pour la partie sujet (et, facultativement, pour la contrepartie) afin d’alimenter les règles d’intelligence sur l’appareil. Le champ de requête estdevice_context sur chaque partie. L’alias en camelCase device est également accepté et c’est celui qu’utilise le format filaire du SDK. La réponse le renvoie sous la forme device sur chaque partie, dans le tableau parties.
browser_family et platform ne sont pas déduits de user_agent. Ils doivent être envoyés comme clés de premier niveau explicites dans device_context pour que les règles d’intelligence sur l’appareil se déclenchent. Si vous utilisez le SDK Didit, ces champs sont collectés automatiquement.userAgent, browserFamily, browserVersion, osFamily, osVersion, acceptLang, sessionId, sessionAgeMs. L’objet network_context accepte les alias ip, countryCode3, lat et lon, et un bloc ipInfo de premier niveau est également intégré à network_context.
Le contexte de l’appareil permet d’appliquer des règles comme la détection de multicomptes (même empreinte pour des sujets différents), la détection de la combinaison d’un nouveau navigateur et d’une nouvelle IP, le transfert à forte valeur avec un âge de session faible et la notation de risque fondée sur la localisation.
Propriétés personnalisées
Ajoutez toutes les paires clé-valeur supplémentaires dans l’objetcustom_properties. Les règles peuvent référencer ces champs dans leurs conditions. C’est utile pour transmettre un contexte propre à votre activité, comme la catégorie de produit, l’identifiant du marchand ou le canal.
custom_values.<key>. Par exemple, le payload ci-dessus correspond à custom_values.product_category eq "electronics". Dans le constructeur de règles de la Console, les clés vues sur les transactions ingérées récemment apparaissent dans le sélecteur de champs de condition sous Propriétés personnalisées. Dans le même groupe, Saisir une propriété personnalisée vous permet de saisir manuellement n’importe quelle clé (sensible à la casse). Voir Règles et notation pour plus de détails.
Exemple de requête
Réponse
L’API renvoie la transaction créée avec ses résultats d’évaluation initiaux :
Consultez la Référence de l’API pour le schéma complet de la requête et de la réponse, et la référence du schéma de réponse pour un exemple de charge utile annoté, pas à pas.
Assigner une transaction à un réviseur
Assignez une transaction en attente à un membre de votre application, ou retirez-lui son assignation, avec une clé API disposant du privilègewrite:transactions.
Chaque modification est enregistrée dans l’historique de la transaction sous la forme TRANSACTION_ASSIGNED.
Les deux appels prennent
assignee_email, l’adresse e-mail d’un membre de l’application qui s’est connecté à Didit.
Envoyez null ou une chaîne vide pour retirer l’assignation.
L’appel groupé prend aussi transaction_ids, une liste de 1 à 500 UUID de transactions.
uuid, transaction_number, assignee et changed (false lorsque la transaction était déjà assignée à ce membre), ou 404 lorsque la transaction n’existe pas dans l’application.
L’appel groupé renvoie transactions (une entrée au format ci-dessus), updated_count et not_found_transaction_ids.
Filtrez la liste des transactions avec assignee, une liste séparée par des virgules dont une valeur peut correspondre : me, unassigned, rules (décidée uniquement par les règles, sans intervention d’un réviseur) ou une adresse e-mail de membre.
Idempotence
txn_id (le transaction_id que vous envoyez) est unique par application.
Soumettre à nouveau un transaction_id déjà existant renvoie un 400 avec A transaction with this transaction_id already exists. sur le champ transaction_id, et deux requêtes identiques envoyées en parallèle donnent un 409 à la seconde.
Aucune de ces réponses ne renvoie la transaction existante.
Pour réessayer en toute sécurité, traitez un 400 ou un 409 pour un transaction_id en double comme « déjà créée » et recherchez la transaction existante au lieu de la soumettre à nouveau : lisez-la avec GET /v3/transactions/{uuid}/ en utilisant le uuid de la première réponse, ou utilisez le transaction_id (l’uuid Didit) que le webhook transaction.created transmet à côté de votre txn_id.
Générez toujours le txn_id de votre côté (par exemple l’identifiant de votre base de données de transactions, un UUID ou un hash déterministe).
Reprise historique
Transmettez untxn_date antérieur pour ingérer des transactions historiques. Les règles sont tout de même évaluées par défaut. Utilisez l’import CSV depuis la console avec le mode d’ingestion à blanc (dry-ingest) si vous souhaitez ignorer l’évaluation des règles lors de chargements historiques en masse. Voir le guide d’intégration.
Étapes suivantes
Règles et notation
Comment les transactions soumises sont évaluées par rapport aux règles.
Schéma de la réponse
Payload de réponse complet et annoté.
Filtrage crypto
Filtrage automatique des portefeuilles et des transactions pour les transactions crypto.
Travel Rule
Joignez les données de conformité Travel Rule aux transferts d’actifs virtuels.
Enrichissement IP
Contexte dérivé de l’IP disponible pour les règles.
Référence de l'API
Schéma complet de la requête pour l’endpoint de création de transaction.