Litige ( dispute )
Un dispute est un dossier de litige commercial persistant. Il décrit ce qui est contesté, qui est concerné et quelle conclusion métier a été prise, tandis qu'un processus Ormuz orchestre les échanges, contrôles, décisions et actions de remédiation.
Rôle
Le dossier n'est pas limité à une facture ni à un chargeback PSP. Il peut couvrir une ou plusieurs factures, des commandes, ou des lignes précisément contextualisées. Il conserve l'état métier stable du litige, indépendamment de la manière dont le processus le traite.
La fin, l'échec ou l'arrêt du processus ne résout pas automatiquement le dossier. La résolution est écrite explicitement par les nodes de cycle de vie du litige.
Structure
GET /v1/disputes/dis_4a7b
{
"id": "dis_4a7b",
"object": "dispute",
"merchant_id": "mer_1a2b",
"buyer_id": "cmp_9c3d",
"buyer_contact_id": "ctc_5e6f",
"reference": "DSP-2026-0042",
"subjects": [
{
"type": "invoice",
"invoice_id": "inv_7a8b",
"amount": 12000,
"reason": "incorrect_amount"
}
],
"currency": "eur",
"amount_disputed": 12000,
"amount_accepted": null,
"status": "open",
"resolution_status": "pending",
"related_objects": [],
"process_definition_id": "prd_1b2c",
"process_instance_id": "pci_3d4e",
"process_status": "waiting",
"url": "https://…",
"opened_at": "2026-08-24T14:00:00.000Z",
"closed_at": null
}| Champ | Type | Description |
|---|---|---|
id | string | Identifiant du dossier (dis_…). |
merchant_id | string | Marchand propriétaire du dossier. |
buyer_id | string | Company acheteur concernée par tous les subjects. |
buyer_contact_id | string | null | Contact acheteur optionnel associé au dossier. |
source_reference | string | null | Identité et provenance du dossier dans le système source. |
reference | string | null | Numéro ou référence métier lisible du litige. |
metadata | object | Map plate de scalaires `string | number | boolean`, selon la convention metadata de l’API. |
subjects | array | Factures, commandes ou lignes contextualisées effectivement contestées. |
currency | string | null | Devise unique des subjects monétaires. |
amount_disputed | integer | null | Montant contesté agrégé optionnel, en plus petite unité de devise. |
amount_accepted | integer | null | Montant retenu par la résolution finale, si applicable. |
status | enum | Cycle de vie du dossier : open, resolved ou cancelled. |
resolution_status | enum | Conclusion commerciale : pending, accepted, partially_accepted, rejected ou withdrawn. |
resolution_detail | string | null | Détail optionnel de la conclusion commerciale. |
related_objects | array | Objets métier significatifs liés au traitement ou produits par la résolution. |
process_definition_id | string | null | Définition de processus choisie pour traiter le dossier. |
process_instance_id | string | null | Instance de processus courante propriétaire du dossier. |
process_status | string | null | Statut d’exécution courant du processus associé. |
url | url | null | URL d’expérience utilisateur lorsque le processus en expose une. |
return_url | url | null | URL de retour optionnelle après le parcours utilisateur. |
opened_at | datetime | Date d’ouverture du dossier. |
closed_at | datetime | null | Date de résolution ou d’annulation. |
created_at | datetime | Date de création. |
updated_at | datetime | Date de dernière mise à jour. |
Subjects
subjects contient uniquement les éléments effectivement contestés. Les
types supportés sont invoice, order et line_item.
Chaque subject porte son propre reason et peut porter un montant.
[
{
"type": "invoice",
"invoice_id": "inv_7a8b",
"amount": 12000,
"reason": "incorrect_amount"
},
{
"type": "line_item",
"line_item_id": "li_2f3a",
"invoice_id": "inv_7a8b",
"order_id": "ord_6c7d",
"quantity": 2,
"amount": 4000,
"reason": "product_unacceptable"
}
]Un line_item n'est jamais contesté sans contexte : il doit référencer au
moins une invoice ou une order, et peut référencer les deux lorsque les relations sont
cohérentes. Tous les subjects monétaires d'un même dossier utilisent la même devise.
Cycle de vie
| Status | Description |
|---|---|
open | Le dossier est en cours de traitement. La résolution commerciale reste pending. |
resolved | Le traitement métier est terminé avec une résolution explicite. |
cancelled | Le dossier a été annulé sans résolution commerciale. |
status décrit le cycle de vie du dossier. resolution_status
décrit séparément la conclusion commerciale.
| Resolution status | Description |
|---|---|
pending | Aucune conclusion commerciale finale. |
accepted | La contestation est acceptée. |
partially_accepted | La contestation est acceptée partiellement. |
rejected | La contestation est rejetée. |
withdrawn | La contestation a été retirée. |
Processus associé
La création d'un dispute sélectionne un processus compatible avec un input typé
platform.dispute. Vous pouvez fournir explicitement
process_definition_id ou utiliser le launcher système dispute
configuré pour le marchand.
Les retries, replays ou forks correctifs transfèrent la propriété du dossier à la nouvelle instance. Seule l'instance courante peut ensuite modifier ou finaliser le litige avec les nodes dédiés.
Résolution
Le processus décide explicitement des actions à effectuer avant de finaliser le
dossier : créer un avoir, initier un remboursement, annuler une commande, créer un
retour ou toute autre action métier. Le node Finalize dispute ne crée
aucun de ces objets automatiquement.
Les objets importants produits pendant le traitement peuvent être référencés dans
related_objects avec un rôle métier, par exemple
resolution_credit_note, resolution_refund ou
resolution_return.
Impact sur les factures
Lorsqu'un litige open couvre une invoice ou une ligne contextualisée par
cette invoice, la facture expose disputed = true. La projection reste vraie
tant qu'au moins un dossier ouvert couvre encore la facture.
Le receivable expose séparément les balances contestées et non contestées. Le Payment Commitment ne porte aucune notion de montant contesté ou collectable.
API
POST /v1/disputes
{
"merchant_id": "mer_1a2b",
"buyer_id": "cmp_9c3d",
"reference": "DSP-2026-0042",
"subjects": [
{
"type": "invoice",
"invoice_id": "inv_7a8b",
"amount": 12000,
"reason": "incorrect_amount"
}
],
"amount_disputed": 12000
}GET /v1/disputes GET /v1/disputes/dis_4a7b POST /v1/disputes/dis_4a7b GET /v1/invoices/inv_7a8b/disputes
Tant que le dossier est open, l'endpoint de mise à jour peut modifier son
périmètre, ses objets liés et ses références. La conclusion finale appartient au
processus via les nodes Finalize dispute et Cancel dispute.
Événements
| Événement | Déclencheur |
|---|---|
dispute.created | Le dossier vient d'être créé. |
dispute.resolved | Le dossier vient d'être finalisé avec une résolution commerciale. |
dispute.cancelled | Le dossier vient d'être annulé. |
invoice.disputed | Une invoice entre dans le périmètre d'au moins un litige ouvert. |
invoice.dispute_cleared | Le dernier litige ouvert couvrant une invoice est clôturé ou ne la couvre plus. |