Dispute ( dispute )
A dispute is a persisted commercial dispute case. It describes what is disputed, who is involved, and which business conclusion was reached, while an Ormuz process orchestrates exchanges, checks, decisions, and remediation actions.
Role
The case is not limited to one invoice or PSP chargeback. It may cover one or more invoices, orders, or precisely contextualized lines. It preserves stable dispute business state independently from how the process handles it.
Completion, failure, or stopping of the process does not automatically resolve the case. Resolution is written explicitly by dispute lifecycle nodes.
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
}| Field | Type | Description |
|---|---|---|
id | string | Case identifier (`dis_…`). |
merchant_id | string | Merchant owning the case. |
buyer_id | string | Buyer company shared by all subjects. |
buyer_contact_id | string | null | Optional buyer contact associated with the case. |
source_reference | string | null | Case identity and provenance in the source system. |
reference | string | null | Human-readable dispute number or business reference. |
metadata | object | Flat map of `string | number | boolean` scalars, following the API metadata convention. |
subjects | array | Invoices, orders, or contextualized lines actually disputed. |
currency | string | null | Single currency of monetary subjects. |
amount_disputed | integer | null | Optional aggregated disputed amount, in the currency's smallest unit. |
amount_accepted | integer | null | Amount retained by the final resolution, when applicable. |
status | enum | Case lifecycle: `open`, `resolved`, or `cancelled`. |
resolution_status | enum | Commercial conclusion: `pending`, `accepted`, `partially_accepted`, `rejected`, or `withdrawn`. |
resolution_detail | string | null | Optional detail of the commercial conclusion. |
related_objects | array | Significant business objects linked to handling or produced by the resolution. |
process_definition_id | string | null | Process definition selected to handle the case. |
process_instance_id | string | null | Current process instance owning the case. |
process_status | string | null | Current execution status of the associated process. |
url | url | null | User-experience URL when exposed by the process. |
return_url | url | null | Optional return URL after the User Journey. |
opened_at | datetime | Case opening date. |
closed_at | datetime | null | Resolution or cancellation date. |
created_at | datetime | Creation date. |
updated_at | datetime | Last update date. |
Subjects
subjects contains only the items actually disputed. Supported types are invoice, order and line_item. Each subject carries its own reason and may carry an amount.
[
{
"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"
}
]A line_item is never disputed without context: it must reference at least one invoice or order and may reference both when relationships are coherent. All monetary subjects in the same case use the same currency.
Lifecycle
| Status | Description |
|---|---|
open | The case is being handled. Commercial resolution remains pending. |
resolved | Business handling is complete with an explicit resolution. |
cancelled | The case was canceled without commercial resolution. |
status describes the case lifecycle. resolution_status
separately describes the commercial conclusion.
| Resolution status | Description |
|---|---|
pending | No final commercial conclusion. |
accepted | The dispute is accepted. |
partially_accepted | The dispute is partially accepted. |
rejected | The dispute is rejected. |
withdrawn | The dispute was withdrawn. |
Associated process
Creating a dispute selects a process compatible with a typed input
platform.dispute. You may explicitly provide
process_definition_id or use the system launcher dispute
configured for the merchant.
Retries, replays, or corrective forks transfer case ownership to the new instance. Only the current instance can then modify or finalize the dispute through dedicated nodes.
Resolution
The process explicitly decides which actions to perform before finalizing the case: create a credit note, initiate a refund, cancel an order, create a Return, or another business action. The node Finalize dispute creates none of these objects automatically.
Important objects produced during handling may be referenced in
related_objects with a business role, for example
resolution_credit_note, resolution_refund, or
resolution_return.
Impact on invoices
When a dispute open covers an invoice or a line contextualized by that invoice, the invoice exposes disputed = true. The projection remains true while at least one open case still covers the invoice.
The receivable separately exposes disputed and undisputed balances. Payment Commitment carries no notion of disputed or collectible amount.
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
While the case is open, the update endpoint may change its scope, related objects, and references. The final conclusion belongs to the process through the nodes Finalize dispute and Cancel dispute.
Events
| Event | Trigger |
|---|---|
dispute.created | The case was just created. |
dispute.resolved | The case was just finalized with a commercial resolution. |
dispute.cancelled | The case was just canceled. |
invoice.disputed | An invoice enters the scope of at least one open dispute. |
invoice.dispute_cleared | The last open dispute covering an invoice is closed or no longer covers it. |