--- title: "Raise a dispute for non-delivery of goods or services" description: "Learn how to raise disputes for goods or services that were not delivered." url: "https://docs.adyen.com/issuing/raise-disputes/not-delivered" source_url: "https://docs.adyen.com/issuing/raise-disputes/not-delivered.md" canonical: "https://docs.adyen.com/issuing/raise-disputes/not-delivered" last_modified: "2026-05-25T12:55:01+02:00" language: "en" --- # Raise a dispute for non-delivery of goods or services Learn how to raise disputes for goods or services that were not delivered. [View source](/issuing/raise-disputes/not-delivered.md) If your cardholder has a dispute based on non-delivery of goods or services, and they made efforts to contact the merchant responsible for providing those goods or services without resolution, they can ask you to raise a dispute on their behalf. Before you raise a dispute on behalf of a cardholder, make sure the merchant has not already provided a refund for the disputed transaction. ## Requirements Before you begin, take into account the requirements, limitations, and preparations described under [Raise disputes](/issuing/raise-disputes#requirements). ## 1. Raise a non-delivery dispute 1. Find the transaction ID for which you want to raise the dispute.\ You can find a transaction ID in one of the following locations: * within the [Balance Platform Accounting Report](/issuing/report-types/balance-platform-accounting-report) * from the [Customer Area](https://ca-test.adyen.com/) * from [Transfer webhooks](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/overview) 2. Make a POST [/disputes](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes) request, specifying the following parameters: | Parameter | Type | Required | Description | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [description](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-description) | string | | Your reference for the dispute. The description appears in dispute webhooks for your information. Do not include any personally-identifiable information (PII) in this field. Maximum length: 50 characters. | | [disputedAmount](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-disputedAmount) | object | | The amount for which you dispute the transaction. The disputed amount cannot be greater than the transaction amount. If you do not provide an amount, the entire transaction amount will be disputed. | | [disputedAmount.currency](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-disputedAmount-currency) | string | | The three-character [ISO currency code](/development-resources/currency-codes). Required if the `disputedAmount` object is included with the dispute. | | [disputedAmount.value](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-disputedAmount-value) | integer | | The amount of the transaction, [in minor units](/development-resources/currency-codes). Required if the `disputedAmount` object is included with the dispute. | | [notDeliveredInfo](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-notDeliveredInfo) | object | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The object containing additional information for raising a dispute of `type` **notDelivered**. Required for disputes of `type` **notDelivered**. | | [notDeliveredInfo.agreedDeliveryLocation](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-notDeliveredInfo-agreedDeliveryLocation) | string | | The delivery location specified by the cardholder. Required if the value of the `deliveredToWrongLocation` parameter is **true**. Maximum length: 500 characters. | | [notDeliveredInfo.dateOfCancellation](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-notDeliveredInfo-dateOfCancellation) | string | | If the cardholder was charged for goods or services that they cancelled: the date in **YYYY-MM-DD** format when the undelivered goods or services were cancelled. | | [notDeliveredInfo.deliveredToWrongLocation](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-notDeliveredInfo-deliveredToWrongLocation) | boolean | | Indicates goods were delivered to the wrong location. If the value of this parameter is **true**, the `agreedDeliveryLocation` parameter is required. Possible values: **true**, **false**. | | [notDeliveredInfo.descriptionOfIssue](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-notDeliveredInfo-descriptionOfIssue) | string | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your description of the issue for raising a dispute of `type` **notDelivered**. Maximum length: 2500 characters. | | [notDeliveredInfo.didCardholderReturn](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-notDeliveredInfo-didCardholderReturn) | boolean | | Indicates if the cardholder returned the goods to the merchant. This paramter is required if the value of the `isDeliveryLate` parameter is **true**. Possible values: **true**, **false**. | | [notDeliveredInfo.isDeliveryLate](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-notDeliveredInfo-isDeliveryLate) | boolean | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Indicates if the goods or services were delivered late. If the value of this paramter is **true**, the `didCardholderReturn` parameter is required. Possible values: **true**, **false**. | | [notDeliveredInfo.isMerchantBankrupt](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-notDeliveredInfo-isMerchantBankrupt) | boolean | | Indicates if the transaction was processed by a bankrupt merchant. Possible values: **true**, **false**. | | [notDeliveredInfo.isNonFiatOrNft](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-notDeliveredInfo-isNonFiatOrNft) | boolean | | Indicates if the transaction is non-fiat or non-fungible token (NFT) related. Possible values: **true**, **false**. | | [notDeliveredInfo.lastExpectedDate](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-notDeliveredInfo-lastExpectedDate) | string | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The date the merchandise or service was expected to be delivered in **YYYY-MM-DD** format. | | [notDeliveredInfo.whatWasNotDelivered](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-notDeliveredInfo-whatWasNotDelivered) | string | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The type of product that you expected to receive. Possible values: **goods**, **services**. | | [notDeliveredInfo.whoCancelled](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-notDeliveredInfo-whoCancelled) | string | | The party that initiated the cancellation of the transaction. Possible values: **merchant**, **cardholder**. | | [transactionId](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-transactionId) | string | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The unique reference of the transaction for which you are raising the dispute. | | [type](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#request-type) | string | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The type of the dispute. When raising a dispute for undelivered goods or services, the value must be **notDelivered**. | **Raise a dispute for goods or services not delivered** ```bash curl https://balanceplatform-api-test.adyen.com/btl/api/v4/disputes \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X POST \ -d '{ "description": "MyCompanyReference-456-555543-0009", "disputedAmount": { "currency": "USD", "value": 12500 }, "notDeliveredInfo": { "isDeliveryLate": true, "didCardholderReturn": false, "dateOfCancellation": "2025-06-28", "descriptionOfIssue": "Widget never arrived. Ordered on March 14. Waited for three weeks, contacted Widgets Inc who told me product was on the way, but gave me no shipment tracking number. It has been more than 3 months since I ordered my widget, and I want my money back. Including a copy of my email communication with Widgets Inc", "lastExpectedDate": "2025-04-29", "whoCancelled": "cardholder", "whatWasNotDelivered": "goods" }, "type": "notDelivered", "transactionId": "EVJN42BZX224223N5LJ3ZHP4N11111USD" }' ``` 3. Make a note of the dispute [id](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#responses-200-id) in the response. You need this ID to [provide supporting information](/issuing/raise-disputes/attach-supporting-information) as an attachment, update the dispute, submit the dispute for non-delivery of goods or services, close the dispute, or follow the lifecycle of the dispute. The response includes the following additional parameters: | Parameter | Type | Description | | ----------------------------------------------------------------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [arn](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#responses-200-arn) | string | The unique Acquirer Reference Number (arn) generated by the card scheme for each capture. You can use the arn to trace the transaction through its lifecycle. | | [id](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#responses-200-id) | string | The unique identifier of the raised dispute. | | [status](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes#responses-200-status) | string | The current status of the dispute. You can update a dispute to **submitted** or **closed**. Possible values: **draft**, **submitted**, **closed**, **won**, **chargeback**, **secondPresentment**. | **Response** ```json { "id": "4VXM2M64Q6OL1111", "transactionId": "EVJN42BZX224223N5LJ3ZHP4N11111USD", "description": "MyCompanyReference-456-555543-0009", "disputedAmount": { "currency": "USD", "value": 12500 }, "type": "notDelivered", "notDeliveredInfo": { "isDeliveryLate" true, "didCardholderReturn" false, "dateOfCancellation": "2025-06-28", "descriptionOfIssue": "Widget never arrived. Ordered on March 14. Waited for three weeks, contacted Widgets Inc who told me product was on the way, but gave me no shipment tracking number. It has been more than 3 months since I ordered my widget, and I want my money back. Including a copy of my email communication with Widgets Inc", "lastExpectedDate": "2025-04-29", "whoCancelled": "cardholder", "whatWasNotDelivered": { "productType": "goods" } }, "status": "draft", "arn": "74987504296002007652011" } ``` Adyen sends a [balancePlatform.dispute.created](https://docs.adyen.com/api-explorer/dispute-webhooks/latest/post/balancePlatform.dispute.created) webhook to your server for the dispute with a status of **draft**. **Dispute webhook for a notDelivered dispute** ```json { "data": { "balancePlatform": "MyBalancePlatform", "id": "4VXM2M64Q6OL1111", "description": "MyCompanyReference-456-555543-0009", "disputedAmount": { "currency": "USD", "value": 12500 }, "type": "notDelivered", "transactionId": "EVJN42BZX224223N5LJ3ZHP4N11111USD", "status": "draft", "arn": "74987504296002007652011" }, "environment": "test", "type": "balancePlatform.dispute.created" } ``` ## 2. Upload attachments (optional) We recommend that your cardholder upload supporting documentation, such as receipts, communication with a merchant, or any additional documents that would help the card scheme when they are reviewing the dispute. When you present the screen to cardholders to upload attachments, make sure they know which file types we support (JPEG, PDF, TIFF). 1. Base64-encode any attachments the cardholder provides for upload with their dispute. 2. Make a POST [/disputes/{disputeId}/attachments](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes/\(disputeId\)/attachments) request, specifying the [disputeId](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes/\(disputeId\)/attachments#path-disputeId) as a path parameter and the following request parameters. | Parameter name | Type | Required | Description | | ----------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [attachmentType](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes/\(disputeId\)/attachments#request-attachmentType) | string | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The type of information contained in the attachment. Possible values:- **receipt** - **correspondence** - **other** | | [fileName](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes/\(disputeId\)/attachments#request-fileName) | string | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The name of the attachment, including its filename extension. Minimum length: four characters, Maximum length: 17 characters, including the extension type. Supported filename extensions:- **jpeg** - **pdf** - **tiff**Examples:- **airfare24\_03.jpeg** - **hotel24\_0315.jpeg** | | [content](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes/\(disputeId\)/attachments#request-content) | string | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The content of the image. An attachment must be Base64-encoded data, with a maximum file size of 2 MB. | **Upload an attachment as supporting information for a dispute** ```bash curl https://balanceplatform-api-test.adyen.com/btl/api/v4/disputes/4VXM2M64Q6OL1111/attachments \ -H 'content-type: application/json' \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -X POST \ -d '{ "fileName" : "em25-01-23.jpeg", "attachmentType" : "correspondence", "content": "SRYTERi0xLjQKJcOkw7zDts...OfCjIgMCBv+f/ub0j6JPRX+TrrnT==" }' ``` 3. In the response, note the [attachmentId](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes/\(disputeId\)/attachments#responses-200-attachmentId). You need the ID if you want to later [get the attachment](/issuing/raise-disputes/attach-supporting-information#get-an-attachment), or [delete the attachment](/issuing/raise-disputes/attach-supporting-information#delete-an-attachment). | Parameter name | Type | Description | | ------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ---------------------------------------- | | [attachmentId](https://docs.adyen.com/api-explorer/transfers-api/latest/post/disputes/\(disputeId\)/attachments#responses-200-attachmentId) | string | The unique identifier of the attachment. | **Response** ```json { "attachmentId": "TXAT42225223223N5LNW5PC9S62DSH" } ``` ## 3. Review the dispute You should allow your cardholder to review their dispute. This allows the cardholder time to make sure they have captured all information correctly. The cardholder can then confirm they want you to submit the dispute to the card scheme on their behalf, or decide to make edits to their dispute. 1. Make a `GET /disputes/{id}` request, specifying the dispute `id` as a request parameter. **Get a dispute by id** ```bash curl https://balanceplatform-api-test.adyen.com/btl/api/v4/disputes/4VXM2M64Q6OL1111 \ -H 'content-type: application/json' \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -X GET ``` 2. Present the details of the dispute to your cardholder. ## 4. Edit dispute details (optional) If the cardholder wants to make any changes to the information they provided in their dispute, you can make a request to update the dispute. 1. To update information in your dispute, make a PATCH [/disputes/{id}](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)) request, specifying the dispute [id](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#path-id) as a path parameter, and supplying updated information in the following request parameters: You do not have to provide the complete dispute object in your PATCH request. | Parameter | Type | Description | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [notDeliveredInfo](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-notDeliveredInfo-PatchableNotDeliveredInfo) | object | The object containing additional information for raising a dispute of `type` **notDelivered**. Required for disputes of `type` **notDelivered**. | | [notDeliveredInfo.agreedDeliveryLocation](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-notDeliveredInfo-PatchableNotDeliveredInfo-agreedDeliveryLocation) | string | The delivery location specified by the cardholder. Required if `deliveredToWrongLocation` is **true**. Maximum length: 500 characters. | | [notDeliveredInfo.dateOfCancellation](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-notDeliveredInfo-PatchableNotDeliveredInfo-dateOfCancellation) | string | If the cardholder was charged for goods or services that they cancelled: the date in **YYYY-MM-DD** format when the undelivered goods or services were cancelled. | | [notDeliveredInfo.deliveredToWrongLocation](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-notDeliveredInfo-PatchableNotDeliveredInfo-deliveredToWrongLocation) | boolean | Indicates goods were delivered to the wrong location. Possible values: **true**, **false**. | | [notDeliveredInfo.descriptionOfIssue](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-notDeliveredInfo-PatchableNotDeliveredInfo-descriptionOfIssue) | string | Your description of the issue for raising a dispute of `type` **notDelivered**. Maximum length: 2500 characters. | | [notDeliveredInfo.didCardholderReturn](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-notDeliveredInfo-PatchableNotDeliveredInfo-didCardholderReturn) | boolean | Indicates if the cardholder returned the goods to the merchant. Possible values: **true**, **false**. | | [notDeliveredInfo.isDeliveryLate](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-notDeliveredInfo-PatchableNotDeliveredInfo-isDeliveryLate) | boolean | Indicates if the goods or services were delivered late. Possible values: **true**, **false**. | | [notDeliveredInfo.isMerchantBankrupt](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-notDeliveredInfo-PatchableNotDeliveredInfo-isMerchantBankrupt) | boolean | Indicates if the transaction was processed by a bankrupt merchant. Possible values: **true**, **false**. | | [notDeliveredInfo.isNonFiatOrNft](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-notDeliveredInfo-PatchableNotDeliveredInfo-isNonFiatOrNft) | boolean | Indicates if the transaction is non-fiat or non-fungible token (NFT) related. Possible values: **true**, **false**. | | [notDeliveredInfo.lastExpectedDate](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-notDeliveredInfo-PatchableNotDeliveredInfo-lastExpectedDate) | string | The date the merchandise or service was expected to be delivered in **YYYY-MM-DD** format. | | [notDeliveredInfo.whatWasNotDelivered](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-notDeliveredInfo-PatchableNotDeliveredInfo-whatWasNotDelivered) | string | The type of product that you expected to receive. Possible values: **goods**, **services**. | | [notDeliveredInfo.whoCancelled](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-notDeliveredInfo-PatchableNotDeliveredInfo-whoCancelled) | string | The party that initiated the cancellation of the transaction. Possible values: **merchant**, **cardholder**. | | [status](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-status) | string | The status of the dispute. You can update the status of a raised dispute from **draft** to **submitted** or **closed**. Possible values: **submitted**, **closed**. | 2. Present the updated dispute details from the response to your cardholder. ## 5. Submit the dispute If your cardholder is satisfied with the information they provided for the dispute, they can confirm they want you to submit the dispute to the card scheme for review and a chargeback, if successful. When you submit a dispute to the card scheme, you can no longer update the dispute, upload or delete attachments, or close the dispute. 1. Make a PATCH [/disputes/{id}](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)) request, specifying the dispute [id](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#path-id) as a path parameter, and include [status](https://docs.adyen.com/api-explorer/transfers-api/latest/patch/disputes/\(id\)#request-status) with a value of **submitted** as a request parameter. **Submit a dispute** ```bash curl https://balanceplatform-api-test.adyen.com/btl/api/v4/disputes/4VXM2M64Q6OL1111 \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X PATCH \ -d '{ "status": "submitted" }' ``` A successful response includes the dispute object, with an updated status of **submitted**. Adyen also sends your system a [balancePlatform.dispute.updated](https://docs.adyen.com/api-explorer/dispute-webhooks/latest/post/balancePlatform.dispute.updated) webhook with the updated status. **Dispute webhook with a status of submitted** ```json { "data": { "balancePlatform": "MyBalancePlatform", "id": "4VXM2M64Q6OL1111", "description": "MyCompanyReference-456-555543-0009", "disputedAmount": { "currency": "USD", "value": 12500 }, "type": "notDelivered", "transactionId": "EVJN42BZX224223N5LJ3ZHP4N11111USD", "status": "submitted", "arn": "74987504296002007652011" }, "environment": "test", "type": "balancePlatform.dispute.updated" } ``` 2. Notify the cardholder that their dispute has been submitted. ## 6. Process webhooks for status changes 1. Process [balancePlatform.dispute.updated](https://docs.adyen.com/api-explorer/dispute-webhooks/latest/post/balancePlatform.dispute.updated) webhooks, looking for changes in the status of your raised dispute. 2. If the `status` of a dispute changes to **chargeback** or **secondPresentment**, inspect [balancePlatform.transfer.created](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created) webhooks for the matching Acquirer Reference Number (arn), and reconcile balances for the cardholder's balance account. * [Lifecycle of a raised dispute](/issuing/raise-disputes#lifecycle-of-a-raised-dispute) describes in more detail how status changes for disputes are communicated to your system through Adyen webhooks, and how balance mutations are recorded in the Balance Platform Accounting Report. * [Associating IDs throughout the dispute lifecycle](/issuing/raise-disputes#associating-ids-throughout-the-dispute-lifecycle) describes the various IDs you should refer to when correlating original transactions, acquirer reference numbers, and dispute IDs to your raised disputes. ## See also * [Lifecycle of a raised dispute](/issuing/raise-disputes#lifecycle-of-a-raised-dispute) * [Associating IDs throughout the dispute lifecycle](/issuing/raise-disputes#associating-ids-throughout-the-dispute-lifecycle) * [Manage disputes](/issuing/raise-disputes/) * [Upload and manage attachments](/issuing/raise-disputes/attach-supporting-information)