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.
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_statusdé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 disputeconfiguré 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. |