Skip to content

Commit 87244a3

Browse files
committed
add fulfillment cancel step and detail for dispute service apps
1 parent 0d31d56 commit 87244a3

File tree

1 file changed

+60
-6
lines changed

1 file changed

+60
-6
lines changed

docs/apps/guides/dispute-service.md

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ sidebar_position: 1
44
tags:
55
- Guide
66
---
7+
```mdx-code-block
8+
import Tabs from '@theme/Tabs';
9+
import TabItem from '@theme/TabItem';
10+
```
711

812
Dispute service apps are integrations that manage the processing of payment disputes (alerts and chargebacks) on behalf of merchants seamlessly within the platform.
913

@@ -31,7 +35,8 @@ sequenceDiagram
3135
Dispute Service->>Store: Creates dispute (alert or chargeback) in store
3236
Dispute Service->>Store: Matches dispute to store transaction
3337
Store-->>Customer: Customer is added to block lists
34-
Dispute Service-->>Store: Creates refund (optional)
38+
Dispute Service-->>Store: Create refund (optional)
39+
Dispute Service-->>Store: Cancel fulfillment (optional)
3540
Dispute Service->>Store: Resolve dispute
3641
```
3742

@@ -84,7 +89,12 @@ Merchants can configure their store to automatically add customers to block list
8489
Depending on the type of dispute, the dispute service may need to create a refund using the [transactionsRefundCreate](/docs/api/admin/reference/#/operations/transactionsRefundCreate) Admin API to resolve the dispute. See [Create a Refund](#creating-disputes) detail below.
8590

8691

87-
#### Step 8 - Dispute service resolves dispute
92+
#### Step 8 - Cancel Order / Cancel Fulfillment
93+
94+
If the order is not yet fulfilled, it may be ideal to cancel the order or cancel fulfillment to stop the order from being shipped to the customer. See [Canceling Fulfillment](#canceling-fulfillment) detail below.
95+
96+
97+
#### Step 9 - Dispute service resolves dispute
8898

8999
Once the dispute is resolved, the dispute service should set the dispute resolution using the [disputesUpdate](/docs/api/admin/reference/#/operations/disputesUpdate) Admin API. See [Dispute Resolutions](#dispute-resolutions) and [Resolve a Dispute](#resolving-disputes) detail below.
90100

@@ -94,7 +104,7 @@ Once the dispute is resolved, the dispute service should set the dispute resolut
94104
To create a dispute in the store using the [disputesCreate](/docs/api/admin/reference/#/operations/disputesCreate) Admin API, see example below:
95105

96106
```json title="Create dispute"
97-
POST https://{store}.29next.store/api/admin/disputes/
107+
// POST https://{store}.29next.store/api/admin/disputes/
98108
{
99109
"type": "alert", // dispute type
100110
"arn": "string", // optional
@@ -121,20 +131,62 @@ PUT https://{store}.29next.store/api/admin/disputes/{id}/
121131
To create a refund for a transaction as part of the dispute resolution process, you can use the [transactionsRefundCreate](/docs/api/admin/reference/#/operations/transactionsRefundCreate) Admin API.
122132

123133
```json title="Create a Refund"
124-
POST https://{store}.29next.store/api/admin/transactions/{id}/refund/
134+
// POST https://{store}.29next.store/api/admin/transactions/{id}/refund/
125135
{
126136
"amount": "XX.XX", // refund amount
127137
}
128138
```
129139

140+
### Canceling Fulfillment
141+
142+
It's desirable to cancel fulfillment for orders that have not shipped yet when they are disputed to prevent additional losses for the merchant.
143+
144+
:::info
145+
To retrieve a list of all fulfillment orders and their status, use the [ordersFulfillmentOrdersRetrieve](/docs/api/admin/reference/?v=2024-04-01#/operations/ordersFulfillmentOrdersRetrieve) endpoint.
146+
:::
147+
148+
<Tabs>
149+
<TabItem value="fulfillment_status-unfulfilled" label="Fulfillment Status - Unfulfilled">
150+
151+
If order `fulfilmlent_status` is `unfulfilled`, your dispute service can stop fulfillment using the [fulfillmentOrdersHold](/docs/api/admin/reference/?v=2024-04-01#/operations/fulfillmentOrdersHold) endpoint.
152+
153+
154+
```json title="Hold Fulfillment"
155+
//POST https://{store}.29next.store/api/admin/fulfillment-orders/{id}/hold/
156+
157+
{
158+
"reason": "other",
159+
"reason_message": "Order disputed by customer." // Use a relevant other reason message
160+
}
161+
```
162+
163+
</TabItem>
164+
<TabItem value="fulfillment_status-processing" label="Fulifllment Status - Processing">
165+
166+
If order `fulfilmlent_status` is `processing` your dispute service can request processing fulfillment orders be canceled with the fulfillment locations with the [cancellationRequestSend](/docs/api/admin/reference/#/operations/cancellationRequestSend?v=2024-04-01) endpoint.
167+
168+
```json title="Request Fulfillment Cancel"
169+
// POST https://{store}.29next.store/api/admin/orders/{number}/cancel/
170+
{
171+
"message": "Order disputed by customer" // Fulfillment cancel reason
172+
}
173+
```
174+
175+
:::caution
176+
Fulfillment locations need to accept the cancelation request to confirm they were able to stop fulfillment on their end at. It is possible that the fulfillment order was already shipped and the fulfillment could not be stopped.
177+
:::
178+
179+
</TabItem>
180+
</Tabs>
181+
130182
### RDR Alerts
131183

132184
RDR Alerts are automatically refunded with the gateway, dispute services should log an external refund for the transaction using the [transactionsRefundCreate](/docs/api/admin/reference/#/operations/transactionsRefundCreate) Admin API.
133185

134186
Setting `is_external: true` on a refund will create the refund without attempting the refund with the gateway.
135187

136188
```json title="Create an External Refund"
137-
POST https://{store}.29next.store/api/admin/transactions/{id}/refund/
189+
// POST https://{store}.29next.store/api/admin/transactions/{id}/refund/
138190
{
139191
"amount": "XX.XX", // refund amount
140192
"is_external": true // set for external refunds
@@ -166,9 +218,11 @@ POST https://{store}.29next.store/api/admin/transactions/{id}/refund/
166218
To resolve a dispute, update the dispute with the appropriate [resolution](#dispute-resolutions) for the dispute type.
167219

168220
```json title="Resolve a dispute"
169-
POST https://{store}.29next.store/api/admin/disputes/{id}/
221+
// POST https://{store}.29next.store/api/admin/disputes/{id}/
170222
{
171223
"resolution": "issued_full_refund"
172224
}
173225
```
174226

227+
228+

0 commit comments

Comments
 (0)