---
title: Dispute
url: amazon-pay-api-v2/dispute.html
---

* TOC
{:toc}
{::options toc_levels="3" /}

***

<script>
  function keySpecifics(){
    const keyQuery = "?environmentSpecificKeys=";
    const currentSetting = window.location.search?.split("?environmentSpecificKeys=")[1] ?? 'false';
    const newSetting = currentSetting === 'false' ? 'true' : 'false';
    window.location = window.location.origin + window.location.pathname + keyQuery + newSetting // +  window.location.hash (not included as it feels weird to jump down)
  }
</script>
<div style="display:none" class="environmentSpecificKeys">
  <div markdown="span" class="alert alert-info" role="alert"><i class="fa fa-info-circle"></i> <b>Note:</b> If your publicKeyId <b>_does not_</b> have an environment prefix (does not begin with 'SANDBOX' or 'LIVE') follow <a href='#' onclick='keySpecifics()' rel='noopener noreferrer'>these instructions</a> instead.</div>
</div>
<div style="display:none" class="notEnvironmentSpecificKeys">
  <div markdown="span" class="alert alert-info" role="alert"><i class="fa fa-info-circle"></i> <b>Note:</b> If your publicKeyId has an environment prefix (for example: SANDBOX-AFVX7ULWSGBZ5535PCUQOY7B) follow <a href='#' onclick='keySpecifics()' rel='noopener noreferrer'>these instructions</a> instead.</div>
</div>


Supported operations:

<div style="display:none" class="environmentSpecificKeys">
<ul id="profileTabs" class="nav nav-tabs">
  <li class="nav-item"><a class="active nav-link noExtIcon" href="#ustab" data-toggle="tab">US</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#eutab" data-toggle="tab">EU / UK</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#jptab" data-toggle="tab">JP</a></li>
</ul>
<div class="tab-content">
  <div role="tabpanel" class="tab-pane active" id="ustab" markdown="block">   
<div markdown="block">
* **Get Dispute** - GET https://pay-api.amazon.com/:version/disputes/:disputeId
* **Update Dispute** - PATCH https://pay-api.amazon.com/:version/disputes/:disputeId
* **Contest Dispute** - POST https://pay-api.amazon.com/:version/disputes/:disputeId/contest 
</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="eutab" markdown="block">
<div markdown="block">
* **Get Dispute** - GET https://pay-api.amazon.eu/:version/disputes/:disputeId
* **Update Dispute** - PATCH https://pay-api.amazon.eu/:version/disputes/:disputeId
* **Contest Dispute** - POST https://pay-api.amazon.eu/:version/disputes/:disputeId/contest 
</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="jptab" markdown="block">
<div markdown="block">
* **Get Dispute** - GET https://pay-api.amazon.jp/:version/disputes/:disputeId
* **Update Dispute** - PATCH https://pay-api.amazon.jp/:version/disputes/:disputeId
* **Contest Dispute** - POST https://pay-api.amazon.jp/:version/disputes/:disputeId/contest 
</div>
  </div>
</div>
</div>
<div style="display:none" class="notEnvironmentSpecificKeys">
<ul id="profileTabs" class="nav nav-tabs">
  <li class="nav-item"><a class="active nav-link noExtIcon" href="#ustabNESK" data-toggle="tab">US</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#eutabNESK" data-toggle="tab">EU / UK</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#jptabNESK" data-toggle="tab">JP</a></li>
</ul>
<div class="tab-content">
  <div role="tabpanel" class="tab-pane active" id="ustabNESK" markdown="block">   
<div markdown="block">
* **Get Dispute** - GET https://pay-api.amazon.com/:environment/:version/disputes/:disputeId
* **Update Dispute** - PATCH https://pay-api.amazon.com/:environment/:version/disputes/:disputeId
* **Contest Dispute** - POST https://pay-api.amazon.com/:environment/:version/disputes/:disputeId/contest 
</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="eutabNESK" markdown="block">
<div markdown="block">
* **Get Dispute** - GET https://pay-api.amazon.eu/:environment/:version/disputes/:disputeId
* **Update Dispute** - PATCH https://pay-api.amazon.eu/:environment/:version/disputes/:disputeId
* **Contest Dispute** - POST https://pay-api.amazon.eu/:environment/:version/disputes/:disputeId/contest 
</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="jptabNESK" markdown="block">
<div markdown="block">
* **Get Dispute** - GET https://pay-api.amazon.jp/:environment/:version/disputes/:disputeId
* **Update Dispute** - PATCH https://pay-api.amazon.jp/:environment/:version/disputes/:disputeId
* **Contest Dispute** - POST https://pay-api.amazon.jp/:environment/:version/disputes/:disputeId/contest 
</div>
  </div>
</div>
</div>


### Dispute object

<table width="100%" border="1">
    <tbody>
        <tr id='PDP9CANnxUg'>
            <td id='s:PDP9CANnxUg;PDP9CAuq5ca' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Field
                <br /></td>
            <td id='s:PDP9CANnxUg;PDP9CA8E4CV' style='vertical-align: top; font-weight: bold; width: 70%;' class='bold'>Definition
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>disputeId<br><br>Type: string
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Unique identifier<br><br><br>
                <br /></td>
        </tr>
        <tr id=''>
            <td id='' style='vertical-align: top;'>releaseEnvironment<br /><br />Type: string
                <br /></td>
            <td id='' style='vertical-align: top;'>The environment the Dispute object was created in (either Sandbox or Live)
                <br /></td>
        </tr>
        <tr id=''>
            <td id='' style='vertical-align: top;'>chargeId<br><br>Type: string
                <br /></td>
            <td id='' style='vertical-align: top;'>Associated charge identifier<br><br><br>
                <br /></td>
        </tr>
        <tr id=''>
            <td id='' style='vertical-align: top;'>disputeType<br /><br />Type: <a href="#disputetype">disputeType [Enum]</a>
                <br /></td>
            <td id='' style='vertical-align: top;'>Currently only supports Chargeback
                <br /></td>
        </tr>
        <tr id='PDP9CAOadtI'>
            <td id='s:PDP9CAOadtI;PDP9CAuq5ca' style='vertical-align: top;'>disputeAmount<br><br>Type: <a href="#type-price">price</a>
                <br /></td>
            <td id='s:PDP9CAOadtI;PDP9CA8E4CV' style='vertical-align: top;'>Total disputed amount
                <br /></td>
        </tr>
        <tr id='PDP9CA0nAGy'>
            <td id='s:PDP9CA0nAGy;PDP9CAuq5ca' style='vertical-align: top;'>filingReason<br><br>Type: <a href="#filingreason">filingReason [Enum]</a>
                <br /></td>
            <td id='s:PDP9CA0nAGy;PDP9CA8E4CV' style='vertical-align: top;'>Why dispute was filed (Fraudulent, ProductNotReceived, etc.)
                <br /></td>
        </tr>
        <tr id='PDP9CAEkyVK'>
            <td id='s:PDP9CAEkyVK;PDP9CAuq5ca' style='vertical-align: top;'>statusDetails<br><br>Type: <a href="#type-disputestatusdetails">disputeStatusDetails</a>
                <br /></td>
            <td id='s:PDP9CAEkyVK;PDP9CA8E4CV' style='vertical-align: top;'>Current state, resolution state, resolution reason
                <br /></td>
        </tr>
        <tr id='PDP9CAEYf4d'>
            <td id='s:PDP9CAEYf4d;PDP9CAuq5ca' style='vertical-align: top;'>merchantEvidences<br><br>Type: list <<a href="#type-evidence">Evidence</a>>
                <br /></td>
            <td id='s:PDP9CAEYf4d;PDP9CA8E4CV' style='vertical-align: top;'>Evidence provided by merchant
                <br /></td>
        </tr>
        <tr id=''>
            <td id='' style='vertical-align: top;'>merchantResponseDeadline<br /><br />Type: dateTime
                <br /></td>
            <td id='' style='vertical-align: top;'>Response deadline
                <br /></td>
        </tr>
        <tr id=''>
            <td id='' style='vertical-align: top;'>resolutionAuthority<br /><br />Type: <a href="#resolutionauthority">resolutionAuthority [Enum]</a>
                <br /></td>
            <td id='' style='vertical-align: top;'>Party resolving dispute (for example Amazon Pay)
                <br /></td>
        </tr>
        <tr id=''>
            <td id='' style='vertical-align: top;'>creationTimestamp<br /><br />Type: dateTime
                <br /></td>
            <td id='' style='vertical-align: top;'>Creation date/time (UTC) in ISO 8601
                <br /></td>
        </tr>
    </tbody>
</table>

#### Type: price

<table width="100%" border="1">
    <tbody>
        <tr id='OLS9CAbORDS'>
            <td id='s:OLS9CAbORDS;OLS9CAjgdgj' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Parameter
                <br /></td>
            <td id='s:OLS9CAbORDS;OLS9CAZr77k' style='vertical-align: top; font-weight: bold; width: 70%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id='OLS9CAW39VE'>
            <td id='s:OLS9CAW39VE;OLS9CAjgdgj' style='vertical-align: top;'>amount<br><br>Type: string
                <br /></td>
            <td id='s:OLS9CAW39VE;OLS9CAZr77k' style='vertical-align: top;'>Transaction amount
                <br /></td>
        </tr>
        <tr id='OLS9CATPsPn'>
            <td id='s:OLS9CATPsPn;OLS9CAjgdgj' style='vertical-align: top;'>currencyCode<br><br>Type: string
                <br /></td>
            <td id='s:OLS9CATPsPn;OLS9CAZr77k' style='vertical-align: top;'>Transaction currency code in ISO 4217 format<br /><br />Example: USD
                <br /></td>
        </tr>
    </tbody>
</table>


#### Type: disputeStatusDetails

<table width="100%" border="1">
    <tbody>
        <tr id='PDP9CA9JtH9'>
            <td id='s:PDP9CA9JtH9;PDP9CAJJAiE' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Field
                <br /></td>
            <td id='s:PDP9CA9JtH9;PDP9CA1dZPH' style='vertical-align: top; font-weight: bold; width: 70%;' class='bold'>Definition
                <br /></td>
        </tr>
        <tr id='PDP9CATczTv'>
            <td id='s:PDP9CATczTv;PDP9CAJJAiE' style='vertical-align: top;'>state<br><br>Type: <a href="#disputestate">disputeState [Enum]</a>
                <br /></td>
            <td id='s:PDP9CATczTv;PDP9CA1dZPH' style='vertical-align: top;'>Current state: UnderReview, ActionRequired, Resolved, Closed
                <br /></td>
        </tr>
        <tr id='PDP9CA4IWep'>
            <td id='s:PDP9CA4IWep;PDP9CAJJAiE' style='vertical-align: top;'>reasonCode<br><br>Type: <a href="#dispute-state-transition">reasonCode [Enum]</a>
                <br /></td>
            <td id='s:PDP9CA4IWep;PDP9CA1dZPH' style='vertical-align: top;'>Status reason (see State Transitions) 
                <br /></td>
        </tr>
        <tr id='PDP9CA6nm1O'>
            <td id='s:PDP9CA6nm1O;PDP9CAJJAiE' style='vertical-align: top;'>reasonDescription<br><br>Type: string
                <br /></td>
            <td id='s:PDP9CA6nm1O;PDP9CA1dZPH' style='vertical-align: top;'>Human-readable status explanation 
                <br /></td>
        </tr>
        <tr id='PDP9CA6nm1O'>
            <td id='s:PDP9CA6nm1O;PDP9CAJJAiE' style='vertical-align: top;'>resolution<br><br>Type: <a href="#resolution">resolution [Enum]</a>
                <br /></td>
            <td id='s:PDP9CA6nm1O;PDP9CA1dZPH' style='vertical-align: top;'>Outcome: BuyerWon, MerchantWon, NoFault (for Resolved/Closed states)
                <br /></td>
        </tr>
        <tr id='PDP9CALR0Vh'>
            <td id='s:PDP9CALR0Vh;PDP9CAJJAiE' style='vertical-align: top;'>lastUpdatedTimestamp<br><br>Type: dateTime
                <br /></td>
            <td id='s:PDP9CALR0Vh;PDP9CA1dZPH' style='vertical-align: top;'>Last status change (UTC)
                <br /></td>
        </tr>
    </tbody>
</table>

#### Type: Evidence

<table width="100%" border="1">
    <tbody>
        <tr id='PDP9CA9JtH9'>
            <td id='s:PDP9CA9JtH9;PDP9CAJJAiE' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Field
                <br /></td>
            <td id='s:PDP9CA9JtH9;PDP9CAJJAiE' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Required
                <br /></td>
            <td id='s:PDP9CA9JtH9;PDP9CA1dZPH' style='vertical-align: top; font-weight: bold; width: 70%;' class='bold'>Description
                <br /></td>
            <td id='s:PDP9CA9JtH9;PDP9CAJJAiE' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Supported Values
                <br /></td>
        </tr>
        <tr id='PDP9CATczTv'>
            <td id='s:PDP9CATczTv;PDP9CAJJAiE' style='vertical-align: top;'>evidenceType<br><br>Type: <a href="#evidencetype">EvidenceType [Enum]</a>
                <br /></td>
            <td id='s:PDP9CATczTv;PDP9CA1dZPH' style='vertical-align: top;'>Yes
                <br /></td>
            <td id='s:PDP9CATczTv;PDP9CAJJAiE' style='vertical-align: top;'>Category (Receipt, Signature, etc.)
                <br /></td>
            <td id='s:PDP9CATczTv;PDP9CA1dZPH' style='vertical-align: top;'><ul><li>ProductDescription</li><li>Receipt</li><li>CancellationPolicy</li><li>CustomerSignature</li><li>TrackingNumber</li><li>CarrierName</li><li>DeviceId</li><li>DeviceName</li><li>DownloadDateTime</li><li>Other</li></ul>
                <br /></td>
        </tr>
        <tr id='PDP9CA4IWep'>
            <td id='s:PDP9CA4IWep;PDP9CAJJAiE' style='vertical-align: top;'>fileId<br><br>Type: String
                <br /></td>
            <td id='s:PDP9CA4IWep;PDP9CA1dZPH' style='vertical-align: top;'>No
                <br /></td>
            <td id='s:PDP9CATczTv;PDP9CAJJAiE' style='vertical-align: top;'>ID of uploaded evidence file
                <br /></td>
            <td id='s:PDP9CATczTv;PDP9CA1dZPH' style='vertical-align: top;'>Any valid file ID
                <br /></td>
        </tr>
        <tr id='PDP9CA6nm1O'>
            <td id='s:PDP9CA6nm1O;PDP9CAJJAiE' style='vertical-align: top;'>evidenceText<br><br>Type: string
                <br /></td>
            <td id='s:PDP9CA6nm1O;PDP9CA1dZPH' style='vertical-align: top;'>No 
                <br /></td>
            <td id='s:PDP9CATczTv;PDP9CAJJAiE' style='vertical-align: top;'>Text-based evidence
                <br /></td>
            <td id='s:PDP9CATczTv;PDP9CA1dZPH' style='vertical-align: top;'>Free-form text
                <br /></td>
        </tr>
    </tbody>
</table>

#### Enums

#### **disputeType**

<table width="100%" border="1">
    <tbody>
        <tr id='PDP9CANnxUg'>
            <td id='s:PDP9CANnxUg;PDP9CAuq5ca' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Value
                <br /></td>
            <td id='s:PDP9CANnxUg;PDP9CA8E4CV' style='vertical-align: top; font-weight: bold; width: 70%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>Chargeback
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Payment chargeback dispute
                <br /></td>
        </tr>
    </tbody>
</table>

#### **filingReason**

<table width="100%" border="1">
    <tbody>
        <tr id='PDP9CANnxUg'>
            <td id='s:PDP9CANnxUg;PDP9CAuq5ca' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Value
                <br /></td>
            <td id='s:PDP9CANnxUg;PDP9CA8E4CV' style='vertical-align: top; font-weight: bold; width: 70%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>ProductNotReceived
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Buyer did not receive the product
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>ProductUnacceptable
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Product is unacceptable to buyer (e.g., missing parts)
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>ProductNoLongerNeeded
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Buyer does not need the product anymore
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>CreditNotProcessed
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Buyer returned product but credit was not received
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>Overcharged
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Buyer was overcharged for the product
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>Fraudulent
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Buyer was not responsible for the transaction
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>SubscriptionCancelled
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Buyer was charged after subscription cancellation
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>DuplicateCharge
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Buyer was charged twice for the product
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>Unrecognized
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Buyer does not recognize the charge
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>Other
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Other reason ,Any other reason for dispute filing
                <br /></td>
        </tr>
    </tbody>
</table>

#### **disputeState**

<table width="100%" border="1">
    <tbody>
        <tr id='PDP9CANnxUg'>
            <td id='s:PDP9CANnxUg;PDP9CAuq5ca' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Value
                <br /></td>
            <td id='s:PDP9CANnxUg;PDP9CA8E4CV' style='vertical-align: top; font-weight: bold; width: 70%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>UnderReview
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Investigation ongoing
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>ActionRequired
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Needs merchant/buyer action
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>Resolved
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Decision made (appealable)
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>Closed
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Final state (no changes)
                <br /></td>
        </tr>
    </tbody>
</table>

#### **resolution**

<table width="100%" border="1">
    <tbody>
        <tr id='PDP9CANnxUg'>
            <td id='s:PDP9CANnxUg;PDP9CAuq5ca' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Value
                <br /></td>
            <td id='s:PDP9CANnxUg;PDP9CA8E4CV' style='vertical-align: top; font-weight: bold; width: 70%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>BuyerWon
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Decided in buyer's favor
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>MerchantWon
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Decided in merchant's favor
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>NoFault
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Neither party liable
                <br /></td>
        </tr>
    </tbody>
</table>

#### **evidenceType**

<table width="100%" border="1">
    <tbody>
        <tr id='PDP9CANnxUg'>
            <td id='s:PDP9CANnxUg;PDP9CAuq5ca' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Value
                <br /></td>
            <td id='s:PDP9CANnxUg;PDP9CA8E4CV' style='vertical-align: top; font-weight: bold; width: 70%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>ProductDescription
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Product details and specifications
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>Receipt
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Order receipt document
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>CancellationPolicy
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Cancellation policy document
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>CustomerSignature
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Customer signature document
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>TrackingNumber
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Shipping tracking number
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>CarrierName
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Shipping carrier name
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>DeviceId
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Device identifier for digital goods
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>DeviceName
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Device name for digital goods
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>DownloadDateTime
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Download timestamp for digital goods
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>Other
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Additional evidence types
                <br /></td>
        </tr>
    </tbody>
</table>
	
#### **resolutionAuthority**

<table width="100%" border="1">
    <tbody>
        <tr id='PDP9CANnxUg'>
            <td id='s:PDP9CANnxUg;PDP9CAuq5ca' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Value
                <br /></td>
            <td id='s:PDP9CANnxUg;PDP9CA8E4CV' style='vertical-align: top; font-weight: bold; width: 70%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id='PDP9CA4XqGQ'>
            <td id='s:PDP9CA4XqGQ;PDP9CAuq5ca' style='vertical-align: top;'>AmazonPay
                <br /></td>
            <td id='s:PDP9CA4XqGQ;PDP9CA8E4CV' style='vertical-align: top;'>Amazon Pay is the authority for Dispute Resolution
                <br /></td>
        </tr>
    </tbody>
</table>

### Dispute State Transition

<img src='https://m.media-amazon.com/images/G/01/EPSDocumentation/AmazonPay/Integration/Dispute_1PP_state_transting_1.png' />

<table width="100%" border="1">
    <tbody>
        <tr id='PDP9CApFcnz'>
            <td id='s:PDP9CApFcnz;PDP9CAXWN9N' style='vertical-align: top; font-weight: bold; width: 20%;' class='bold'>State
                <br /></td>
            <td id='s:PDP9CApFcnz;PDP9CAMunfi' style='vertical-align: top; font-weight: bold; width: 40%;' class='bold'>Description
                <br /></td>
            <td id='s:PDP9CApFcnz;PDP9CA8aZjf' style='vertical-align: top; font-weight: bold; width: 40%;' class='bold'>Resolution
                <br /></td>
            <td id='s:PDP9CApFcnz;PDP9CA8aZjf' style='vertical-align: top; font-weight: bold; width: 40%;' class='bold'>Reason code
                <br /></td>
        </tr>
        <tr id='PDP9CAvcPWF'>
            <td id='s:PDP9CAvcPWF;PDP9CAXWN9N' style='vertical-align: top;'>UnderReview
                <br /></td>
            <td id='s:PDP9CAvcPWF;PDP9CAMunfi' style='vertical-align: top;'>Investigation in progress
                <br /></td>
            <td id='s:PDP9CAvcPWF;PDP9CA8aZjf' style='vertical-align: top;'>None
                <br /></td>
            <td id='s:PDP9CAvcPWF;PDP9CA8aZjf' style='vertical-align: top;'>None
                <br /></td>
        </tr>
        <tr id='PDP9CA8Myo7'>
            <td id='s:PDP9CA8Myo7;PDP9CAXWN9N' style='vertical-align: top;'>ActionRequired
                <br /></td>
            <td id='s:PDP9CA8Myo7;PDP9CAMunfi' style='vertical-align: top;'>Waiting for merchant or buyer
                <br /></td>
            <td id='s:PDP9CA8Myo7;PDP9CAMunfi' style='vertical-align: top;'>None
                <br /></td>
            <td id='s:PDP9CA8Myo7;PDP9CA8aZjf' style='vertical-align: top;'><b>MerchantResponseRequired:</b> Accept or contest dispute<br><br><b>MerchantResponseRequired:</b> Accept or contest dispute<br><br><b>MerchantAdditionalEvidencesRequired:</b>Provide more evidence<br><br><b>BuyerAdditionalEvidencesRequired:</b> Waiting for buyer evidence
                <br /></td>
        </tr>
        <tr id='PDP9CASjL6m'>
            <td id='s:PDP9CASjL6m;PDP9CAXWN9N' style='vertical-align: top;'>Resolved
                <br /></td>
            <td id='s:PDP9CASjL6m;PDP9CAMunfi' style='vertical-align: top;'>Decision made (appealable)
                <br /></td>
            <td id='s:PDP9CASjL6m;PDP9CA8aZjf' style='vertical-align: top;'>BuyerWon
                <br /></td>
            <td id='s:PDP9CASjL6m;PDP9CA8aZjf' style='vertical-align: top;'><b>MerchantAcceptedDispute:</b> Merchant accepted <br><br><b>MerchantResponseDeadlineExpired:</b> Response deadline passed <br><br><b>InvestigatorResolved:</b> Investigation complete
                <br /></td>
        </tr>
        <tr id='PDP9CASjL6m'>
            <td id='s:PDP9CASjL6m;PDP9CAXWN9N' style='vertical-align: top;'>Resolved
                <br /></td>
            <td id='s:PDP9CASjL6m;PDP9CAMunfi' style='vertical-align: top;'>Decision made (appealable)
                <br /></td>
            <td id='s:PDP9CASjL6m;PDP9CA8aZjf' style='vertical-align: top;'>MerchantWon
                <br /></td>
            <td id='s:PDP9CASjL6m;PDP9CA8aZjf' style='vertical-align: top;'><b>BuyerCancelled:</b> Buyer cancelled dispute <br><br><b>InvestigatorResolved:</b> Investigation complete <br><br><b>ChargebackFiled:</b> Buyer has filed chargeback besides Amazon Pay A-to-z Guarantee claim.
                <br /></td>
        </tr>
        <tr id='PDP9CASjL6m'>
            <td id='s:PDP9CASjL6m;PDP9CAXWN9N' style='vertical-align: top;'>Closed
                <br /></td>
            <td id='s:PDP9CASjL6m;PDP9CAMunfi' style='vertical-align: top;'>Final state (no changes)
                <br /></td>
            <td id='s:PDP9CASjL6m;PDP9CA8aZjf' style='vertical-align: top;'>BuyerWon
                <br /></td>
            <td id='s:PDP9CASjL6m;PDP9CA8aZjf' style='vertical-align: top;'> Same as Resolved state
                <br /></td>
        </tr>
        <tr id='PDP9CASjL6m'>
            <td id='s:PDP9CASjL6m;PDP9CAXWN9N' style='vertical-align: top;'>Closed
                <br /></td>
            <td id='s:PDP9CASjL6m;PDP9CAMunfi' style='vertical-align: top;'>Final state (no changes)
                <br /></td>
            <td id='s:PDP9CASjL6m;PDP9CA8aZjf' style='vertical-align: top;'>MerchantWon
                <br /></td>
            <td id='s:PDP9CASjL6m;PDP9CA8aZjf' style='vertical-align: top;'> Same as Resolved state
                <br /></td>
        </tr>
    </tbody>
</table>

### Get Dispute Details

Get detailed information about a specific dispute by providing its unique dispute ID. This endpoint returns comprehensive dispute data including the dispute type, amount, status, and any associated evidence or documentation. Use this API call when you need to review specific dispute details, track dispute status, or gather information for dispute resolution.

#### Request

<div style="display:none" class="environmentSpecificKeys">
<code style="color:black">
curl "https://pay-api.amazon.com/v2/disputes/:disputeId" \ <br />
-X GET <br />
-H "authorization: Px2e5oHhQZ88vVhc0DO%2FsShHj8MDDg%3DEXAMPLESIGNATURE" <br />
-H "x-amz-pay-date:20201012T235046Z" <br />
</code>
</div>
<div style="display:none" class="notEnvironmentSpecificKeys">
<code style="color:black">
curl "https://pay-api.amazon.com/:environment/v2/disputes/:disputeId" \ <br />
-X GET <br />
-H "authorization: Px2e5oHhQZ88vVhc0DO%2FsShHj8MDDg%3DEXAMPLESIGNATURE" <br />
-H "x-amz-pay-date:20201012T235046Z" <br />
</code>
</div>

#### Sample Code

<div style="display:none" class="environmentSpecificKeys">
<ul id="profileTabs" class="nav nav-tabs">
  <li class="nav-item"><a class="active nav-link noExtIcon" href="#phptab-getDispute" data-toggle="tab">PHP</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#dotnettab-getDispute" data-toggle="tab">.NET</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#javatab-getDispute" data-toggle="tab">Java</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#nodejstab-getDispute" data-toggle="tab">Node.js</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#rubytab-getDispute" data-toggle="tab">Ruby</a></li>
</ul>
<div class="tab-content">
  <div role="tabpanel" class="tab-pane active" id="phptab-getDispute">   
<div markdown="block">
```
<?php

    include 'vendor/autoload.php';

    $amazonpay_config = array(
        'public_key_id' => 'YOUR_PUBLIC_KEY_ID',
        'private_key'   => 'keys/private.pem', // Path to RSA Private Key (or a string representation)
        'region'        => 'YOUR_REGION_CODE',
        'algorithm'     => 'AMZN-PAY-RSASSA-PSS-V2'
    );

    try {
        $disputeId = 'S01-0000000-0000000-B000000';
        $client = new Amazon\Pay\API\Client($amazonpay_config);
        $result = $client->getDispute($disputeId);

        if ($result['status'] === 200) {
            $response = json_decode($result['response'], true);
            $disputeState = $response['statusDetails']['state'];

        } else {
            // check the error
            echo 'status=' . $result['status'] . '; response=' . $result['response'];
        }
    } catch (Exception $e) {
        // handle the exception
        echo $e;
    }
?>
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="dotnettab-getDispute">
<div markdown="block">
```
using Amazon.Pay.API.Types;
using Amazon.Pay.API.WebStore;
using Amazon.Pay.API.WebStore.Dispute;
using Amazon.Pay.API.WebStore.Types;
using System;

public class Sample
{
    public WebStoreClient InitiateClient()
    {
        // set up config
        var payConfiguration = new ApiConfiguration
        (
            region: Region.YOUR_REGION_CODE,
            publicKeyId: "YOUR_PUBLIC_KEY_ID",
            privateKey: "PATH_OR_CONTENT_OF_YOUR_PRIVATE_KEY",
            algorithm: AmazonSignatureAlgorithm.V2
        );

        // init API client
        var client = new WebStoreClient(payConfiguration);

        return client;
    }

    public void GetDispute(string disputeId)
    {
        // send the request
        DisputeResponse result = client.GetDispute(disputeId);

        // check if API call was successful
        if (!result.Success)
        {
            // handle the API error (use Status field to get the numeric error code)
        } else {
            // do something with the result, for instance:
            Console.WriteLine(result.RawResponse);
        }
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="javatab-getDispute">
<div markdown="block">
```
import com.amazon.pay.api.AmazonPayResponse;
import com.amazon.pay.api.PayConfiguration;
import com.amazon.pay.api.WebstoreClient;
import com.amazon.pay.api.exceptions.AmazonPayClientException;
import com.amazon.pay.api.types.Region;

public void sample() {
    PayConfiguration payConfiguration = null;
    try {
        payConfiguration = new PayConfiguration()
            .setPublicKeyId("YOUR_PUBLIC_KEY_ID")
            .setRegion(Region.YOUR_REGION_CODE)
            .setPrivateKey("YOUR_PRIVATE_KEY".toCharArray())
            .setAlgorithm("AMZN-PAY-RSASSA-PSS-V2");

        WebstoreClient webstoreClient = new WebstoreClient(payConfiguration);
        AmazonPayResponse response = webstoreClient.getDispute("S01-0000000-0000000-B000000");
    } catch (AmazonPayClientException e) {
        e.printStackTrace();
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="nodejstab-getDispute">
<div markdown="block">
```html
const fs = require('fs');
const Client = require('@amazonpay/amazon-pay-api-sdk-nodejs');

const config = {
    publicKeyId: 'YOUR_PUBLIC_KEY_ID',
    privateKey: fs.readFileSync('tst/private.pem'),
    region: 'YOUR_REGION_CODE',
    algorithm: 'AMZN-PAY-RSASSA-PSS-V2' 
};    

const disputeId = 'S01-0000000-0000000-B000000';

const testPayClient = new Client.WebStoreClient(config);
const response = testPayClient.getDispute(disputeId);

response.then(function (result) {
    console.log(result.data);
}).catch(err => {
    console.log(err);
});
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="rubytab-getDispute">
<div markdown="block">
```
require 'amazon-pay-api-sdk-ruby'

config = {
  region: 'YOUR_REGION_CODE', # Supported values: na, eu, jp
  public_key_id: 'YOUR_PUBLIC_KEY_ID',
  private_key: File.read('privateKey.pem')
}

client = AmazonPayClient.new(config)

dispute_id = 'S01-0000000-0000000-B000000'
response = client.get_dispute(dispute_id)

if response.code.to_i == 200
    puts response.body
else
    # check the error
    puts "status=#{response.code}"
    puts response.body
end
```

</div>
  </div>
</div>

</div>
<div style="display:none" class="notEnvironmentSpecificKeys">
<ul id="profileTabs" class="nav nav-tabs">
  <li class="nav-item"><a class="active nav-link noExtIcon" href="#phptab-getDispute-NESK" data-toggle="tab">PHP</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#dotnettab-getDispute-NESK" data-toggle="tab">.NET</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#javatab-getDispute-NESK" data-toggle="tab">Java</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#nodejstab-getDispute-NESK" data-toggle="tab">Node.js</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#rubytab-getDispute-NESK" data-toggle="tab">Ruby</a></li>
</ul>
<div class="tab-content">
  <div role="tabpanel" class="tab-pane active" id="phptab-getDispute-NESK">   
<div markdown="block">
```
<?php

    include 'vendor/autoload.php';

    $amazonpay_config = array(
        'public_key_id' => 'YOUR_PUBLIC_KEY_ID',
        'private_key'   => 'keys/private.pem', // Path to RSA Private Key (or a string representation)
        'region'        => 'YOUR_REGION_CODE',
        'sandbox'       => true,
        'algorithm'     => 'AMZN-PAY-RSASSA-PSS-V2'
    );

    try {
        $disputeId = 'S01-0000000-0000000-B000000';
        $client = new Amazon\Pay\API\Client($amazonpay_config);
        $result = $client->getDispute($disputeId);

        if ($result['status'] === 200) {
            $response = json_decode($result['response'], true);
            $disputeState = $response['statusDetails']['state'];

        } else {
            // check the error
            echo 'status=' . $result['status'] . '; response=' . $result['response'];
        }
    } catch (Exception $e) {
        // handle the exception
        echo $e;
    }
?>
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="dotnettab-getDispute-NESK">
<div markdown="block">
```
using Amazon.Pay.API.Types;
using Amazon.Pay.API.WebStore;
using Amazon.Pay.API.WebStore.Dispute;
using Amazon.Pay.API.WebStore.Types;
using System;

public class Sample
{
    public WebStoreClient InitiateClient()
    {
        // set up config
        var payConfiguration = new ApiConfiguration
        (
            region: Region.YOUR_REGION_CODE,
            environment: Environment.Sandbox,
            publicKeyId: "YOUR_PUBLIC_KEY_ID",
            privateKey: "PATH_OR_CONTENT_OF_YOUR_PRIVATE_KEY",
            algorithm: AmazonSignatureAlgorithm.V2
        );

        // init API client
        var client = new WebStoreClient(payConfiguration);

        return client;
    }

    public void GetDispute(string disputeId)
    {
        // send the request
        DisputeResponse result = client.GetDispute(disputeId);

        // check if API call was successful
        if (!result.Success)
        {
            // handle the API error (use Status field to get the numeric error code)
        } else {
            // do something with the result, for instance:
            Console.WriteLine(result.RawResponse);
        }
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="javatab-getDispute-NESK">
<div markdown="block">
```
import com.amazon.pay.api.AmazonPayResponse;
import com.amazon.pay.api.PayConfiguration;
import com.amazon.pay.api.WebstoreClient;
import com.amazon.pay.api.exceptions.AmazonPayClientException;
import com.amazon.pay.api.types.Environment;
import com.amazon.pay.api.types.Region;

public void sample() {
    PayConfiguration payConfiguration = null;
    try {
        payConfiguration = new PayConfiguration()
            .setPublicKeyId("YOUR_PUBLIC_KEY_ID")
            .setRegion(Region.YOUR_REGION_CODE)
            .setPrivateKey("YOUR_PRIVATE_KEY".toCharArray())
            .setEnvironment(Environment.SANDBOX)
            .setAlgorithm("AMZN-PAY-RSASSA-PSS-V2");

        WebstoreClient webstoreClient = new WebstoreClient(payConfiguration);
        AmazonPayResponse response = webstoreClient.getDispute("S01-0000000-0000000-B000000");
    } catch (AmazonPayClientException e) {
        e.printStackTrace();
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="nodejstab-getDispute-NESK">
<div markdown="block">
```html
const fs = require('fs');
const Client = require('@amazonpay/amazon-pay-api-sdk-nodejs');

const config = {
    publicKeyId: 'YOUR_PUBLIC_KEY_ID',
    privateKey: fs.readFileSync('tst/private.pem'),
    region: 'YOUR_REGION_CODE',
    sandbox: true,
    algorithm: 'AMZN-PAY-RSASSA-PSS-V2' 
};    

const disputeId = 'S01-0000000-0000000-B000000';

const testPayClient = new Client.WebStoreClient(config);
const response = testPayClient.getDispute(disputeId);

response.then(function (result) {
    console.log(result.data);
}).catch(err => {
    console.log(err);
});
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="rubytab-getDispute-NESK">
<div markdown="block">
```
require 'amazon-pay-api-sdk-ruby'

config = {
  region: 'YOUR_REGION_CODE', # Supported values: na, eu, jp
  public_key_id: 'YOUR_PUBLIC_KEY_ID',
  private_key: File.read('privateKey.pem'),
  sandbox: true
}

client = AmazonPayClient.new(config)

dispute_id = 'S01-0000000-0000000-B000000'
response = client.get_dispute(dispute_id)

if response.code.to_i == 200
    puts response.body
else
    # check the error
    puts "status=#{response.code}"
    puts response.body
end
```

</div>
  </div>
</div>

</div>

#### Response Format

The API returns a Dispute object containing:
* Basic dispute information (ID, type, amount, filing reason)
* Transaction details (charge ID, timestamps)
* Status information (state, resolution, reason codes)
* Evidence submissions (merchant documentation and files)

```
{
    "disputeId": "P01-1111111-1111111-B123456",
    "chargeId": "P01-1111111-1111111-C123456",
    "disputeType": "Chargeback",
    "disputeAmount":  {
        "amount": "400",
        "currencyCode": "USD" 
    },
    "filingReason": "Fraudulent",
    "filingTimestamp": "20190714T155300Z",
    "resolutionAuthority": "AmazonPay",
    "statusDetails":  {
        "state": "Resolved",
        "reasonCode": "MerchantAcceptedDispute",
        "reasonDescription": "Merchant accepted the dispute request",
        "resolution": "BuyerWon",
        "lastUpdatedTimestamp": "20190716T156500Z" 
    },
    "resolutionAuthority": "AmazonPay",
    "merchantEvidences": [
        {
            "evidenceType" : "TrackingNumber",
            "fileId" : null,
            "evidenceText": "raw text supporting merchant evidence"
        },
        {
            "evidenceType": "CustomerSignature",
            "fileId": "customer_signature_file_id",
            "evidenceText": null
        }
    ],
    "closureTimestamp": "20190716T155300Z",
    "releaseEnvironment": "Live"
}
```


#### Error codes

Amazon Pay APIs return standard HTTP status codes and error responses. For a complete list of error codes, response formats, and handling guidelines, see the <a href="../amazon-pay-api-v2/error-handling.md" target="_blank" rel="noopener noreferrer">Error Handling documentation</a>

### Update Dispute Details

Submit your response through the Update Dispute API to accept a dispute when you agree the customer's chargeback is valid.

#### Request

<div style="display:none" class="environmentSpecificKeys">
<code style="color: black">
curl "https://pay-api.amazon.com/v2/disputes/:disputeId" \ <br />
-X PATCH <br />
-H "authorization: Px2e5oHhQZ88vVhc0DO%2FsShHj8MDDg%3DEXAMPLESIGNATURE" <br />
-H "x-amz-pay-date:20201012T235046Z" <br />
-d @request_body <br />
</code>
</div>
<div style="display:none" class="notEnvironmentSpecificKeys">
<code style="color:black">
curl "https://pay-api.amazon.com/:environment/v2/disputes/:disputeId" \ <br />
-X PATCH <br />
-H "authorization: Px2e5oHhQZ88vVhc0DO%2FsShHj8MDDg%3DEXAMPLESIGNATURE" <br />
-H "x-amz-pay-date:20201012T235046Z" <br />
-d @request_body <br />
</code>
</div>

#### Request body

```
{
    "statusDetails": {
        "resolution": "BuyerWon",
        "state": "Resolved",
        "reasonCode": "MerchantAcceptedDispute",
        "reasonDescription": "Merchant accepted the dispute request"
    },
    "closureTimestamp": "20190716T162300Z"
}
```


#### Request parameters

<table width="100%" border="1">
    <tbody>
        <tr id='PDP9CAQSM5J'>
            <td id='s:PDP9CAQSM5J;PDP9CAXfdYQ' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Name
                <br /></td>
            <td id='s:PDP9CAQSM5J;PDP9CAkAlRX' style='vertical-align: top; font-weight: bold; width: 20%;' class='bold'>Location
                <br /></td>
            <td id='s:PDP9CAQSM5J;PDP9CAn6CQD' style='vertical-align: top; font-weight: bold; width: 50%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id='PDP9CAkesJe'>
            <td id='s:PDP9CAkesJe;PDP9CAXfdYQ' style='vertical-align: top;'>StatusDetails<br><b>(required)</b><br><br>Type: <a href="../amazon-pay-api-v2/dispute.md#type-disputestatusdetails" target="_blank" rel="noopener noreferrer">DisputeStatusDetails</a>
                <br /></td>
            <td id='s:PDP9CAkesJe;PDP9CAkAlRX' style='vertical-align: top;'>Body
                <br /></td>
            <td id='s:PDP9CAkesJe;PDP9CAn6CQD' style='vertical-align: top;'>Specifies the dispute state (Resolved/Closed), resolution (BuyerWon/MerchantWon/NoFault), and reason code. All fields required.
                <br /></td>
        </tr>
        <tr id='PDP9CAkesJe'>
            <td id='s:PDP9CAkesJe;PDP9CAXfdYQ' style='vertical-align: top;'>ClosureTimeStamp<br><b>(required)</b><br><br>Type: dateTime
                <br /></td>
            <td id='s:PDP9CAkesJe;PDP9CAkAlRX' style='vertical-align: top;'>Body
                <br /></td>
            <td id='s:PDP9CAkesJe;PDP9CAn6CQD' style='vertical-align: top;'>Required for "Closed" state only. UTC timestamp in ISO 8601 format.
                <br /></td>
        </tr>
    </tbody>
</table>


#### Sample Code

<div style="display:none" class="environmentSpecificKeys">
<ul id="profileTabs" class="nav nav-tabs">
  <li class="nav-item"><a class="active nav-link noExtIcon" href="#phptab-updateDispute" data-toggle="tab">PHP</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#dotnettab-updateDispute" data-toggle="tab">.NET</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#javatab-updateDispute" data-toggle="tab">Java</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#nodejstab-updateDispute" data-toggle="tab">Node.js</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#rubytab-updateDispute" data-toggle="tab">Ruby</a></li>
</ul>
<div class="tab-content">
  <div role="tabpanel" class="tab-pane active" id="phptab-updateDispute">   
<div markdown="block">
```
<?php

    include 'vendor/autoload.php';

    use Amazon\Pay\API\Constants\DisputeResolution;
    use Amazon\Pay\API\Constants\DisputeState;
    use Amazon\Pay\API\Constants\DisputeReasonCode;

    $amazonpay_config = array(
        'public_key_id' => 'YOUR_PUBLIC_KEY_ID',
        'private_key'   => 'keys/private.pem', // Path to RSA Private Key (or a string representation)
        'region'        => 'YOUR_REGION_CODE',
        'algorithm'     => 'AMZN-PAY-RSASSA-PSS-V2'
    );

    $disputeId = 'S01-0000000-0000000-B000000';
    $closureTimestamp = time();

    $payload = array(
        'statusDetails' => array(
            'resolution' => DisputeResolution::MERCHANT_WON,
            'state' => DisputeState::RESOLVED,
            'reasonCode' => DisputeReasonCode::MERCHANT_ACCEPTED_DISPUTE,
            'reasonDescription' => 'Merchant accepted the dispute request'
        ),
        'closureTimestamp' => $closureTimestamp
    );

    try {
        $client = new Amazon\Pay\API\Client($amazonpay_config);
        $result = $client->updateDispute($disputeId, $payload);

        if ($result['status'] === 200) {
            $response = json_decode($result['response'], true);
            $disputeState = $response['statusDetails']['state'];

        } else {
            // check the error
            echo 'status=' . $result['status'] . '; response=' . $result['response'];
        }
    } catch (Exception $e) {
        // handle the exception
        echo $e;
    }
?>
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="dotnettab-updateDispute">
<div markdown="block">
```
using Amazon.Pay.API.Types;
using Amazon.Pay.API.WebStore;
using Amazon.Pay.API.WebStore.Dispute;
using Amazon.Pay.API.WebStore.Types;
using System;

public class Sample
{
    public WebStoreClient InitiateClient()
    {
        // set up config
        var payConfiguration = new ApiConfiguration
        (
            region: Region.YOUR_REGION_CODE,
            publicKeyId: "YOUR_PUBLIC_KEY_ID",
            privateKey: "PATH_OR_CONTENT_OF_YOUR_PRIVATE_KEY",
            algorithm: AmazonSignatureAlgorithm.V2
        );

        // init API client
        var client = new WebStoreClient(payConfiguration);

        return client;
    }

    public void UpdateDispute(string disputeId)
    {
        // prepare the request
        var request = new UpdateDisputeRequest(
            state: "Resolved",
            reasonCode: "MerchantAcceptedDispute",
            closureTimestamp: DateTime.UtcNow,
            reasonDescription: "Merchant accepted the dispute request",
            resolution: "MerchantWon"
        );

        // send the request
        DisputeResponse result = client.UpdateDispute(disputeId, request);

        // check if API call was successful
        if (!result.Success)
        {
            // handle the API error (use Status field to get the numeric error code)
        } else {
            // do something with the result, for instance:
            Console.WriteLine(result.RawResponse);
        }
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="javatab-updateDispute">
<div markdown="block">
```
import com.amazon.pay.api.AmazonPayResponse;
import com.amazon.pay.api.PayConfiguration;
import com.amazon.pay.api.WebstoreClient;
import com.amazon.pay.api.exceptions.AmazonPayClientException;
import com.amazon.pay.api.types.DisputeReasonCode;
import com.amazon.pay.api.types.DisputeResolution;
import com.amazon.pay.api.types.DisputeState;
import com.amazon.pay.api.types.Region;

import org.json.JSONObject;

public void sample() {
    PayConfiguration payConfiguration = null;
    try {
        payConfiguration = new PayConfiguration()
            .setPublicKeyId("YOUR_PUBLIC_KEY_ID")
            .setRegion(Region.YOUR_REGION_CODE)
            .setPrivateKey("YOUR_PRIVATE_KEY".toCharArray())
            .setAlgorithm("AMZN-PAY-RSASSA-PSS-V2");

        WebstoreClient webstoreClient = new WebstoreClient(payConfiguration);
        String disputeId = "S01-0000000-0000000-B000000";

        JSONObject statusDetails = new JSONObject();
        statusDetails.put("resolution", DisputeResolution.MERCHANT_WON.getDisputeResolution());
        statusDetails.put("state", DisputeState.RESOLVED.getDisputeState());
        statusDetails.put("reasonCode", DisputeReasonCode.MERCHANT_ACCEPTED_DISPUTE.getDisputeReasonCode());
        statusDetails.put("reasonDescription", "Merchant accepted the dispute request");

        JSONObject payload = new JSONObject();
        payload.put("statusDetails", statusDetails);
        // Current Unix timestamp (seconds since epoch)
        payload.put("closureTimestamp", System.currentTimeMillis() / 1000L);

        AmazonPayResponse response = webstoreClient.updateDispute(disputeId, payload);
    } catch (AmazonPayClientException e) {
        e.printStackTrace();
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="nodejstab-updateDispute">
<div markdown="block">
```html
const fs = require('fs');
const Client = require('@amazonpay/amazon-pay-api-sdk-nodejs');

const config = {
    publicKeyId: 'YOUR_PUBLIC_KEY_ID',
    privateKey: fs.readFileSync('tst/private.pem'),
    region: 'YOUR_REGION_CODE',
    algorithm: 'AMZN-PAY-RSASSA-PSS-V2' 
};    

const disputeId = 'S01-0000000-0000000-B000000';

const payload = {
    statusDetails: {
        resolution: "MerchantWon",
        state: "Resolved",
        reasonCode: "MerchantAcceptedDispute",
        reasonDescription: "Merchant accepted the dispute request"
    },
    closureTimestamp: Date.now()
};

const testPayClient = new Client.WebStoreClient(config);
const response = testPayClient.updateDispute(disputeId, payload);

response.then(function (result) {
    console.log(result.data);
}).catch(err => {
    console.log(err);
});
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="rubytab-updateDispute">
<div markdown="block">
```
require 'amazon-pay-api-sdk-ruby'

config = {
  region: 'YOUR_REGION_CODE', # Supported values: na, eu, jp
  public_key_id: 'YOUR_PUBLIC_KEY_ID',
  private_key: File.read('privateKey.pem')
}

client = AmazonPayClient.new(config)

dispute_id = 'S01-0000000-0000000-B000000'

payload = {
    "statusDetails": {
        "resolution": "MerchantWon",
        "state": "Resolved",
        "reasonCode": "MerchantAcceptedDispute",
        "reasonDescription": "Merchant accepted the dispute request"
    },
    "closureTimestamp": Time.now.to_i
}

response = client.update_dispute(dispute_id, payload)

if response.code.to_i == 200
    puts response.body
else
    # check the error
    puts "status=#{response.code}"
    puts response.body
end
```

</div>
  </div>
</div>

</div>
<div style="display:none" class="notEnvironmentSpecificKeys">
<ul id="profileTabs" class="nav nav-tabs">
  <li class="nav-item"><a class="active nav-link noExtIcon" href="#phptab-updateDispute-NESK" data-toggle="tab">PHP</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#dotnettab-updateDispute-NESK" data-toggle="tab">.NET</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#javatab-updateDispute-NESK" data-toggle="tab">Java</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#nodejstab-updateDispute-NESK" data-toggle="tab">Node.js</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#rubytab-updateDispute-NESK" data-toggle="tab">Ruby</a></li>
</ul>
<div class="tab-content">
  <div role="tabpanel" class="tab-pane active" id="phptab-updateDispute-NESK">   
<div markdown="block">
```
<?php

    include 'vendor/autoload.php';

    use Amazon\Pay\API\Constants\DisputeResolution;
    use Amazon\Pay\API\Constants\DisputeState;
    use Amazon\Pay\API\Constants\DisputeReasonCode;

    $amazonpay_config = array(
        'public_key_id' => 'YOUR_PUBLIC_KEY_ID',
        'private_key'   => 'keys/private.pem', // Path to RSA Private Key (or a string representation)
        'region'        => 'YOUR_REGION_CODE',
        'sandbox'       => true,
        'algorithm'     => 'AMZN-PAY-RSASSA-PSS-V2'
    );

    $disputeId = 'S01-0000000-0000000-B000000';
    $closureTimestamp = time();

    $payload = array(
        'statusDetails' => array(
            'resolution' => DisputeResolution::MERCHANT_WON,
            'state' => DisputeState::RESOLVED,
            'reasonCode' => DisputeReasonCode::MERCHANT_ACCEPTED_DISPUTE,
            'reasonDescription' => 'Merchant accepted the dispute request'
        ),
        'closureTimestamp' => $closureTimestamp
    );

    try {
        $client = new Amazon\Pay\API\Client($amazonpay_config);
        $result = $client->updateDispute($disputeId, $payload);

        if ($result['status'] === 200) {
            $response = json_decode($result['response'], true);
            $disputeState = $response['statusDetails']['state'];

        } else {
            // check the error
            echo 'status=' . $result['status'] . '; response=' . $result['response'];
        }
    } catch (Exception $e) {
        // handle the exception
        echo $e;
    }
?>
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="dotnettab-updateDispute-NESK">
<div markdown="block">
```
using Amazon.Pay.API.Types;
using Amazon.Pay.API.WebStore;
using Amazon.Pay.API.WebStore.Dispute;
using Amazon.Pay.API.WebStore.Types;
using System;

public class Sample
{
    public WebStoreClient InitiateClient()
    {
        // set up config
        var payConfiguration = new ApiConfiguration
        (
            region: Region.YOUR_REGION_CODE,
            environment: Environment.Sandbox,
            publicKeyId: "YOUR_PUBLIC_KEY_ID",
            privateKey: "PATH_OR_CONTENT_OF_YOUR_PRIVATE_KEY",
            algorithm: AmazonSignatureAlgorithm.V2
        );

        // init API client
        var client = new WebStoreClient(payConfiguration);

        return client;
    }

    public void UpdateDispute(string disputeId)
    {
        // prepare the request
        var request = new UpdateDisputeRequest(
            state: "Resolved",
            reasonCode: "MerchantAcceptedDispute",
            closureTimestamp: DateTime.UtcNow,
            reasonDescription: "Merchant accepted the dispute request",
            resolution: "MerchantWon"
        );

        // send the request
        DisputeResponse result = client.UpdateDispute(disputeId, request);

        // check if API call was successful
        if (!result.Success)
        {
            // handle the API error (use Status field to get the numeric error code)
        } else {
            // do something with the result, for instance:
            Console.WriteLine(result.RawResponse);
        }
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="javatab-updateDispute-NESK">
<div markdown="block">
```
import com.amazon.pay.api.AmazonPayResponse;
import com.amazon.pay.api.PayConfiguration;
import com.amazon.pay.api.WebstoreClient;
import com.amazon.pay.api.exceptions.AmazonPayClientException;
import com.amazon.pay.api.types.DisputeReasonCode;
import com.amazon.pay.api.types.DisputeResolution;
import com.amazon.pay.api.types.DisputeState;
import com.amazon.pay.api.types.Environment;
import com.amazon.pay.api.types.Region;

import org.json.JSONObject;

public void sample() {
    PayConfiguration payConfiguration = null;
    try {
        payConfiguration = new PayConfiguration()
            .setPublicKeyId("YOUR_PUBLIC_KEY_ID")
            .setRegion(Region.YOUR_REGION_CODE)
            .setPrivateKey("YOUR_PRIVATE_KEY".toCharArray())
            .setEnvironment(Environment.SANDBOX)
            .setAlgorithm("AMZN-PAY-RSASSA-PSS-V2");

        WebstoreClient webstoreClient = new WebstoreClient(payConfiguration);
        String disputeId = "S01-0000000-0000000-B000000";

        JSONObject statusDetails = new JSONObject();
        statusDetails.put("resolution", DisputeResolution.MERCHANT_WON.getDisputeResolution());
        statusDetails.put("state", DisputeState.RESOLVED.getDisputeState());
        statusDetails.put("reasonCode", DisputeReasonCode.MERCHANT_ACCEPTED_DISPUTE.getDisputeReasonCode());
        statusDetails.put("reasonDescription", "Merchant accepted the dispute request");

        JSONObject payload = new JSONObject();
        payload.put("statusDetails", statusDetails);
        // Current Unix timestamp (seconds since epoch)
        payload.put("closureTimestamp", System.currentTimeMillis() / 1000L);

        AmazonPayResponse response = webstoreClient.updateDispute(disputeId, payload);
    } catch (AmazonPayClientException e) {
        e.printStackTrace();
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="nodejstab-updateDispute-NESK">
<div markdown="block">
```html
const fs = require('fs');
const Client = require('@amazonpay/amazon-pay-api-sdk-nodejs');

const config = {
    publicKeyId: 'YOUR_PUBLIC_KEY_ID',
    privateKey: fs.readFileSync('tst/private.pem'),
    region: 'YOUR_REGION_CODE',
    sandbox: true,
    algorithm: 'AMZN-PAY-RSASSA-PSS-V2' 
};    

const disputeId = 'S01-0000000-0000000-B000000';

const payload = {
    statusDetails: {
        resolution: "MerchantWon",
        state: "Resolved",
        reasonCode: "MerchantAcceptedDispute",
        reasonDescription: "Merchant accepted the dispute request"
    },
    closureTimestamp: Date.now()
};

const testPayClient = new Client.WebStoreClient(config);
const response = testPayClient.updateDispute(disputeId, payload);

response.then(function (result) {
    console.log(result.data);
}).catch(err => {
    console.log(err);
});
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="rubytab-updateDispute-NESK">
<div markdown="block">
```
require 'amazon-pay-api-sdk-ruby'

config = {
  region: 'YOUR_REGION_CODE', # Supported values: na, eu, jp
  public_key_id: 'YOUR_PUBLIC_KEY_ID',
  private_key: File.read('privateKey.pem'),
  sandbox: true
}

client = AmazonPayClient.new(config)

dispute_id = 'S01-0000000-0000000-B000000'

payload = {
    "statusDetails": {
        "resolution": "MerchantWon",
        "state": "Resolved",
        "reasonCode": "MerchantAcceptedDispute",
        "reasonDescription": "Merchant accepted the dispute request"
    },
    "closureTimestamp": Time.now.to_i
}

response = client.update_dispute(dispute_id, payload)

if response.code.to_i == 200
    puts response.body
else
    # check the error
    puts "status=#{response.code}"
    puts response.body
end
```

</div>
  </div>
</div>

</div>

#### Response

The API returns an updated Dispute object containing:
* Basic dispute information (ID, type, amount, filing reason)
* Transaction details (charge ID, timestamps)
* Updated status information (state, resolution, reason codes)
* Evidence submissions (merchant documentation and files)

```
{
    "disputeId": "P01-1111111-1111111-B123456",
    "chargeId": "P01-1111111-1111111-C123456",
    "disputeType": "Chargeback",
    "disputeAmount":  {
        "amount": "400",
        "currencyCode": "USD" 
    },
    "filingReason": "Fraudulent",
    "filingTimestamp": "20190714T155300Z",
    "resolutionAuthority": "AmazonPay",
    "statusDetails":  {
        "state": "Resolved",
        "reasonCode": "MerchantAcceptedDispute",
        "reasonDescription": "Merchant accepted the dispute request",
        "resolution": "BuyerWon",
        "lastUpdatedTimestamp": "20190716T156500Z" 
    },
    "resolutionAuthority": "AmazonPay",
    "closureTimestamp": "20190716T155300Z",
    "releaseEnvironment": "Live"
}
```


#### Error codes

Amazon Pay APIs return standard HTTP status codes and error responses. For a complete list of error codes, response formats, and handling guidelines, see the <a href="../amazon-pay-api-v2/error-handling.md" target="_blank" rel="noopener noreferrer">Error Handling documentation</a>.

### Contest Dispute Details

Challenge a dispute by submitting evidence and documentation to support your case against the chargeback. This endpoint enables merchants to formally contest a dispute by providing relevant proof such as shipping confirmations, customer communications, or product documentation. Use the Contest Dispute API call when you have valid grounds to dispute a customer's chargeback and want to submit supporting evidence for review.

#### Request

<div style="display:none" class="environmentSpecificKeys">
<code style="color: black">
curl "https://pay-api.amazon.com/v2/disputes/:disputeId/contest" \ <br />
-X POST <br />
-H "authorization: Px2e5oHhQZ88vVhc0DO%2FsShHj8MDDg%3DEXAMPLESIGNATURE" <br />
-H "x-amz-pay-date:20201012T235046Z" <br />
-d @request_body <br />
</code>
</div>
<div style="display:none" class="notEnvironmentSpecificKeys">
<code style="color: black">
curl "https://pay-api.amazon.com/:environment/v2/disputes/:disputeId/contest" \ <br />
-X POST <br />
-H "authorization: Px2e5oHhQZ88vVhc0DO%2FsShHj8MDDg%3DEXAMPLESIGNATURE" <br />
-H "x-amz-pay-date:20201012T235046Z" <br />
-d @request_body <br />
</code>
</div>

#### Request body

```
{
    "merchantEvidences":  [
        {
            "evidenceType" : "TrackingNumber",
            "fileId": null,
            "evidenceText": "raw text supporting merchant evidence" 
        },
        {
            "evidenceType": "CustomerSignature",
            "fileId": "customer_signature_file_id",
            "evidenceText": null
        }
    ]
}
```


#### Request parameters

<table width="100%" border="1">
    <tbody>
        <tr id='PDP9CAQSM5J'>
            <td id='s:PDP9CAQSM5J;PDP9CAXfdYQ' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Name
                <br /></td>
            <td id='s:PDP9CAQSM5J;PDP9CAkAlRX' style='vertical-align: top; font-weight: bold; width: 20%;' class='bold'>Location
                <br /></td>
            <td id='s:PDP9CAQSM5J;PDP9CAn6CQD' style='vertical-align: top; font-weight: bold; width: 50%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id='PDP9CAkesJe'>
            <td id='s:PDP9CAkesJe;PDP9CAXfdYQ' style='vertical-align: top;'>merchantEvidences<br><b>(required)</b><br><br>Type: list <<a href="../amazon-pay-api-v2/dispute.md#type-evidence" target="_blank" rel="noopener noreferrer">Evidence </a>>
                <br /></td>
            <td id='s:PDP9CAkesJe;PDP9CAkAlRX' style='vertical-align: top;'>Body
                <br /></td>
            <td id='s:PDP9CAkesJe;PDP9CAn6CQD' style='vertical-align: top;'>List of evidence items supporting your case <br><br> <ul><li>Each evidence item needs either fileId or evidenceText</li><li>See Evidence Types table for supported values</li></ul>
                <br /></td>
        </tr>
    </tbody>
</table>

#### Sample Code

<div style="display:none" class="environmentSpecificKeys">
<ul id="profileTabs" class="nav nav-tabs">
  <li class="nav-item"><a class="active nav-link noExtIcon" href="#phptab-contestDispute" data-toggle="tab">PHP</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#dotnettab-contestDispute" data-toggle="tab">.NET</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#javatab-contestDispute" data-toggle="tab">Java</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#nodejstab-contestDispute" data-toggle="tab">Node.js</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#rubytab-contestDispute" data-toggle="tab">Ruby</a></li>
</ul>
<div class="tab-content">
  <div role="tabpanel" class="tab-pane active" id="phptab-contestDispute">   
<div markdown="block">
```
<?php

    include 'vendor/autoload.php';

    use Amazon\Pay\API\Constants\EvidenceType;

    $amazonpay_config = array(
        'public_key_id' => 'YOUR_PUBLIC_KEY_ID',
        'private_key'   => 'keys/private.pem', // Path to RSA Private Key (or a string representation)
        'region'        => 'YOUR_REGION_CODE',
        'algorithm'     => 'AMZN-PAY-RSASSA-PSS-V2'
    );

    $disputeId = 'S01-0000000-0000000-B000000';

    $payload = array(
        'merchantEvidences' => array(
            array(
                'evidenceType' => EvidenceType::TRACKING_NUMBER,
                'fileId' => 'YOUR_FILE_ID',
                'evidenceText' => 'raw text supporting merchant evidence'
            )
        )
    );

    try {
        $client = new Amazon\Pay\API\Client($amazonpay_config);
        $result = $client->contestDispute($disputeId, $payload);

        if ($result['status'] === 200) {
            $response = json_decode($result['response'], true);
            $disputeState = $response['statusDetails']['state'];

        } else {
            // check the error
            echo 'status=' . $result['status'] . '; response=' . $result['response'];
        }
    } catch (Exception $e) {
        // handle the exception
        echo $e;
    }
?>
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="dotnettab-contestDispute">
<div markdown="block">
```
using Amazon.Pay.API.Types;
using Amazon.Pay.API.WebStore;
using Amazon.Pay.API.WebStore.Dispute;
using Amazon.Pay.API.WebStore.Types;
using System;
using System.Collections.Generic;

public class Sample
{
    public WebStoreClient InitiateClient()
    {
        // set up config
        var payConfiguration = new ApiConfiguration
        (
            region: Region.YOUR_REGION_CODE,
            publicKeyId: "YOUR_PUBLIC_KEY_ID",
            privateKey: "PATH_OR_CONTENT_OF_YOUR_PRIVATE_KEY",
            algorithm: AmazonSignatureAlgorithm.V2
        );

        // init API client
        var client = new WebStoreClient(payConfiguration);

        return client;
    }

    public void ContestDispute(string disputeId)
    {
        // prepare the request
        var merchantEvidences = new List<MerchantEvidence>
        {
            new MerchantEvidence
            {
                EvidenceType = "TrackingNumber",
                FileId = "YOUR_FILE_ID",
                EvidenceText = "raw text supporting merchant evidence"
            }
        };
        var request = new ContestDisputeRequest(merchantEvidences);

        // send the request
        DisputeResponse result = client.ContestDispute(disputeId, request);

        // check if API call was successful
        if (!result.Success)
        {
            // handle the API error (use Status field to get the numeric error code)
        } else {
            // do something with the result, for instance:
            Console.WriteLine(result.RawResponse);
        }
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="javatab-contestDispute">
<div markdown="block">
```
import com.amazon.pay.api.AmazonPayResponse;
import com.amazon.pay.api.PayConfiguration;
import com.amazon.pay.api.WebstoreClient;
import com.amazon.pay.api.exceptions.AmazonPayClientException;
import com.amazon.pay.api.types.EvidenceType;
import com.amazon.pay.api.types.Region;

import org.json.JSONObject;

// for generating an idempotency key
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public void sample() {
    PayConfiguration payConfiguration = null;
    try {
        payConfiguration = new PayConfiguration()
            .setPublicKeyId("YOUR_PUBLIC_KEY_ID")
            .setRegion(Region.YOUR_REGION_CODE)
            .setPrivateKey("YOUR_PRIVATE_KEY".toCharArray())
            .setAlgorithm("AMZN-PAY-RSASSA-PSS-V2");

        WebstoreClient webstoreClient = new WebstoreClient(payConfiguration);
        String disputeId = "S01-0000000-0000000-B000000";

        JSONObject evidence = new JSONObject();
        evidence.put("evidenceType", EvidenceType.TRACKING_NUMBER.getEvidenceType());
        evidence.put("fileId", "YOUR_FILE_ID");
        evidence.put("evidenceText", "raw text supporting merchant evidence");

        JSONObject payload = new JSONObject();
        payload.append("merchantEvidences", evidence);

        Map<String, String> header = new HashMap<String, String>();
        header.put("x-amz-pay-idempotency-key", UUID.randomUUID().toString().replace("-", ""));

        AmazonPayResponse response = webstoreClient.contestDispute(disputeId, payload, header);
    } catch (AmazonPayClientException e) {
        e.printStackTrace();
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="nodejstab-contestDispute">
<div markdown="block">
```html
const fs = require('fs');
const Client = require('@amazonpay/amazon-pay-api-sdk-nodejs');

const config = {
    publicKeyId: 'YOUR_PUBLIC_KEY_ID',
    privateKey: fs.readFileSync('tst/private.pem'),
    region: 'YOUR_REGION_CODE',
    algorithm: 'AMZN-PAY-RSASSA-PSS-V2' 
};    

const disputeId = 'S01-0000000-0000000-B000000';

const payload = {
    merchantEvidences: [
        {
            evidenceType: "TrackingNumber",
            fileId: "YOUR_FILE_ID",
            evidenceText: "raw text supporting merchant evidence"
        }
    ]
};

const testPayClient = new Client.WebStoreClient(config);
const response = testPayClient.contestDispute(disputeId, payload);

response.then(function (result) {
    console.log(result.data);
}).catch(err => {
    console.log(err);
});
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="rubytab-contestDispute">
<div markdown="block">
```
require 'amazon-pay-api-sdk-ruby'

config = {
  region: 'YOUR_REGION_CODE', # Supported values: na, eu, jp
  public_key_id: 'YOUR_PUBLIC_KEY_ID',
  private_key: File.read('privateKey.pem')
}

client = AmazonPayClient.new(config)

dispute_id = 'S01-0000000-0000000-B000000'

payload = {
    "merchantEvidences": [
        {
            "evidenceType": "TrackingNumber",
            "fileId": "YOUR_FILE_ID",
            "evidenceText": "raw text supporting merchant evidence"
        }
    ]
}

response = client.contest_dispute(dispute_id, payload)

if response.code.to_i == 200
    puts response.body
else
    # check the error
    puts "status=#{response.code}"
    puts response.body
end
```

</div>
  </div>
</div>

</div>
<div style="display:none" class="notEnvironmentSpecificKeys">
<ul id="profileTabs" class="nav nav-tabs">
  <li class="nav-item"><a class="active nav-link noExtIcon" href="#phptab-contestDispute-NESK" data-toggle="tab">PHP</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#dotnettab-contestDispute-NESK" data-toggle="tab">.NET</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#javatab-contestDispute-NESK" data-toggle="tab">Java</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#nodejstab-contestDispute-NESK" data-toggle="tab">Node.js</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#rubytab-contestDispute-NESK" data-toggle="tab">Ruby</a></li>
</ul>
<div class="tab-content">
  <div role="tabpanel" class="tab-pane active" id="phptab-contestDispute-NESK">   
<div markdown="block">
```
<?php

    include 'vendor/autoload.php';

    use Amazon\Pay\API\Constants\EvidenceType;

    $amazonpay_config = array(
        'public_key_id' => 'YOUR_PUBLIC_KEY_ID',
        'private_key'   => 'keys/private.pem', // Path to RSA Private Key (or a string representation)
        'region'        => 'YOUR_REGION_CODE',
        'sandbox'       => true,
        'algorithm'     => 'AMZN-PAY-RSASSA-PSS-V2'
    );

    $disputeId = 'S01-0000000-0000000-B000000';

    $payload = array(
        'merchantEvidences' => array(
            array(
                'evidenceType' => EvidenceType::TRACKING_NUMBER,
                'fileId' => 'YOUR_FILE_ID',
                'evidenceText' => 'raw text supporting merchant evidence'
            )
        )
    );

    try {
        $client = new Amazon\Pay\API\Client($amazonpay_config);
        $result = $client->contestDispute($disputeId, $payload);

        if ($result['status'] === 200) {
            $response = json_decode($result['response'], true);
            $disputeState = $response['statusDetails']['state'];

        } else {
            // check the error
            echo 'status=' . $result['status'] . '; response=' . $result['response'];
        }
    } catch (Exception $e) {
        // handle the exception
        echo $e;
    }
?>
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="dotnettab-contestDispute-NESK">
<div markdown="block">
```
using Amazon.Pay.API.Types;
using Amazon.Pay.API.WebStore;
using Amazon.Pay.API.WebStore.Dispute;
using Amazon.Pay.API.WebStore.Types;
using System;
using System.Collections.Generic;

public class Sample
{
    public WebStoreClient InitiateClient()
    {
        // set up config
        var payConfiguration = new ApiConfiguration
        (
            region: Region.YOUR_REGION_CODE,
            environment: Environment.Sandbox,
            publicKeyId: "YOUR_PUBLIC_KEY_ID",
            privateKey: "PATH_OR_CONTENT_OF_YOUR_PRIVATE_KEY",
            algorithm: AmazonSignatureAlgorithm.V2
        );

        // init API client
        var client = new WebStoreClient(payConfiguration);

        return client;
    }

    public void ContestDispute(string disputeId)
    {
        // prepare the request
        var merchantEvidences = new List<MerchantEvidence>
        {
            new MerchantEvidence
            {
                EvidenceType = "TrackingNumber",
                FileId = "YOUR_FILE_ID",
                EvidenceText = "raw text supporting merchant evidence"
            }
        };
        var request = new ContestDisputeRequest(merchantEvidences);

        // send the request
        DisputeResponse result = client.ContestDispute(disputeId, request);

        // check if API call was successful
        if (!result.Success)
        {
            // handle the API error (use Status field to get the numeric error code)
        } else {
            // do something with the result, for instance:
            Console.WriteLine(result.RawResponse);
        }
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="javatab-contestDispute-NESK">
<div markdown="block">
```
import com.amazon.pay.api.AmazonPayResponse;
import com.amazon.pay.api.PayConfiguration;
import com.amazon.pay.api.WebstoreClient;
import com.amazon.pay.api.exceptions.AmazonPayClientException;
import com.amazon.pay.api.types.Environment;
import com.amazon.pay.api.types.EvidenceType;
import com.amazon.pay.api.types.Region;

import org.json.JSONObject;

// for generating an idempotency key
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public void sample() {
    PayConfiguration payConfiguration = null;
    try {
        payConfiguration = new PayConfiguration()
            .setPublicKeyId("YOUR_PUBLIC_KEY_ID")
            .setRegion(Region.YOUR_REGION_CODE)
            .setPrivateKey("YOUR_PRIVATE_KEY".toCharArray())
            .setEnvironment(Environment.SANDBOX)
            .setAlgorithm("AMZN-PAY-RSASSA-PSS-V2");

        WebstoreClient webstoreClient = new WebstoreClient(payConfiguration);
        String disputeId = "S01-0000000-0000000-B000000";

        JSONObject evidence = new JSONObject();
        evidence.put("evidenceType", EvidenceType.TRACKING_NUMBER.getEvidenceType());
        evidence.put("fileId", "YOUR_FILE_ID");
        evidence.put("evidenceText", "raw text supporting merchant evidence");

        JSONObject payload = new JSONObject();
        payload.append("merchantEvidences", evidence);

        Map<String, String> header = new HashMap<String, String>();
        header.put("x-amz-pay-idempotency-key", UUID.randomUUID().toString().replace("-", ""));

        AmazonPayResponse response = webstoreClient.contestDispute(disputeId, payload, header);
    } catch (AmazonPayClientException e) {
        e.printStackTrace();
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="nodejstab-contestDispute-NESK">
<div markdown="block">
```html
const fs = require('fs');
const Client = require('@amazonpay/amazon-pay-api-sdk-nodejs');

const config = {
    publicKeyId: 'YOUR_PUBLIC_KEY_ID',
    privateKey: fs.readFileSync('tst/private.pem'),
    region: 'YOUR_REGION_CODE',
    sandbox: true,
    algorithm: 'AMZN-PAY-RSASSA-PSS-V2' 
};    

const disputeId = 'S01-0000000-0000000-B000000';

const payload = {
    merchantEvidences: [
        {
            evidenceType: "TrackingNumber",
            fileId: "YOUR_FILE_ID",
            evidenceText: "raw text supporting merchant evidence"
        }
    ]
};

const testPayClient = new Client.WebStoreClient(config);
const response = testPayClient.contestDispute(disputeId, payload);

response.then(function (result) {
    console.log(result.data);
}).catch(err => {
    console.log(err);
});
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="rubytab-contestDispute-NESK">
<div markdown="block">
```
require 'amazon-pay-api-sdk-ruby'

config = {
  region: 'YOUR_REGION_CODE', # Supported values: na, eu, jp
  public_key_id: 'YOUR_PUBLIC_KEY_ID',
  private_key: File.read('privateKey.pem'),
  sandbox: true
}

client = AmazonPayClient.new(config)

dispute_id = 'S01-0000000-0000000-B000000'

payload = {
    "merchantEvidences": [
        {
            "evidenceType": "TrackingNumber",
            "fileId": "YOUR_FILE_ID",
            "evidenceText": "raw text supporting merchant evidence"
        }
    ]
}

response = client.contest_dispute(dispute_id, payload)

if response.code.to_i == 200
    puts response.body
else
    # check the error
    puts "status=#{response.code}"
    puts response.body
end
```

</div>
  </div>
</div>

</div>

#### Response

The API returns an updated Dispute object:

```
{
    "disputeId": "P01-1111111-1111111-B123456",
    "chargeId": "P01-1111111-1111111-C123456",
    "disputeType": "Claim",
    "disputeAmount": { 
        "amount": "400", 
        "currencyCode": "USD" 
    },
    "filingReason": "ProductNotReceived",
    "filingTimestamp": "20190714T155300Z",
    "statusDetails": {
        "state": "UnderReview",
        "reasonCode": null,
        "reasonDescription": null,
        "resolution": null, 
        "lastUpdatedTimestamp": "20190714T156500Z"
    },
    "resolutionAuthority": "AmazonPay",
    "releaseEnvironment": "Live",
    "merchantEvidences": [
        {
            "evidenceType" : "TrackingNumber",
            "fileId" : null,
            "evidenceText": "raw text supporting merchant evidence"
        },
        {
            "evidenceType": "CustomerSignature",
            "fileId": "customer_signature_file_id",
            "evidenceText": null
        }
    ]
}
```


#### Error codes

Amazon Pay APIs return standard HTTP status codes and error responses. For a complete list of error codes, response formats, and handling guidelines, see the <a href="../amazon-pay-api-v2/error-handling.md" target="_blank" rel="noopener noreferrer">Error Handling documentation</a>.