---
title: Set payment info
url: amazon-pay-recurring-checkout/set-payment-info.html
---

**[Step 4 of 11]** In this step, you will set the order total and specify how the buyer should be charged. At the end of this step, you will be able to redirect the buyer to a unique `amazonRedirectUrl` for transaction processing.

<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>


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

***

### 1. Set payment info

Call <a href="../amazon-pay-api-v2/checkout-session.md#update-checkout-session" target="_blank" rel="noopener noreferrer">Update Checkout Session</a> to set payment info (such as the order amount) and transaction metadata. Use the `checkoutResultReturnUrl` parameter to specify the URL the buyer is redirected to after checkout is completed on the Amazon Pay-hosted page.

<div markdown="span" class="alert alert-info" role="alert"><i class="fa fa-info-circle"></i> <b>Note:</b> You must add the checkoutReviewReturnUrl domain you plan on using if it's different from the domain where you rendered the Amazon Pay button, to the Seller Central. See <a href='../amazon-pay-recurring-checkout/get-set-up-for-integration.html#2-add-domains-to-seller-central' target='_blank' rel='noopener noreferrer'>Add domains to Seller Central</a> for more information.</div>

Set `chargeAmount` to the value that should be processed using the `paymentIntent` during checkout. If you need to split the order to capture additional payment after checkout is complete, use the optional `totalOrderAmount` parameter to set the full order amount.

#### Request


<div style="display:none" class="environmentSpecificKeys">
<code style="color:black">
curl "https://pay-api.amazon.com/:version/checkoutSessions/:checkoutSessionId" \<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/:version/checkoutSessions/:checkoutSessionId" \<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

```
{
    "webCheckoutDetails": {
        "checkoutResultReturnUrl": "https://a.com/merchant-confirm-page"
    },
    "paymentDetails": {
        "paymentIntent": "AuthorizeWithCapture",
        "canHandlePendingAuthorization":false,
        "softDescriptor": "Descriptor",
        "chargeAmount": {
            "amount": "1",
            "currencyCode": "USD"
        }
     },
    "merchantMetadata": {
        "merchantReferenceId": "Merchant reference ID",
        "merchantStoreName": "Merchant store name",
        "noteToBuyer": "Note to buyer",
        "customInformation": "Custom information"
    }
}
```



#### Request parameters

<table width="100%" border="1">
    <tbody>
        <tr id='ERL9CAipzsl'>
            <td id='s:ERL9CAipzsl;ERL9CAFccoh' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Name
                <br /></td>
            <td id='s:ERL9CAipzsl;ERL9CAjQdu4' style='vertical-align: top; font-weight: bold; width: 20%;' class='bold'>Location
                <br /></td>
            <td id='s:ERL9CAipzsl;ERL9CAxmCJ7' style='vertical-align: top; font-weight: bold; width: 50%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id='ERL9CA4LMaA'>
            <td id='s:ERL9CA4LMaA;ERL9CAFccoh' style='vertical-align: top;'>checkoutSessionId<br><b>(required)</b><br><br>Type: string
                <br /></td>
            <td id='s:ERL9CA4LMaA;ERL9CAjQdu4' style='vertical-align: top;'>Path parameter
                <br /></td>
            <td id='s:ERL9CA4LMaA;ERL9CAxmCJ7' style='vertical-align: top;'>Checkout Session identifier
                <br /></td>
        </tr>
        <tr id='ERL9CAvm2Or'>
            <td id='s:ERL9CAvm2Or;ERL9CAFccoh' style='vertical-align: top;'>webCheckoutDetails<br><br>Type: <a href="../amazon-pay-api-v2/checkout-session.md#type-webcheckoutdetails" target="_blank" rel="noopener noreferrer">webCheckoutDetails</a>
                <br /></td>
            <td id='s:ERL9CAvm2Or;ERL9CAjQdu4' style='vertical-align: top;'>Body
                <br /></td>
            <td id='s:ERL9CAvm2Or;ERL9CAxmCJ7' style='vertical-align: top;'>Checkout result URL provided by the merchant. Amazon Pay will redirect to this URL after completing the transaction<br><br>Modifiable: Multiple times before the buyer is redirected to the amazonPayReturnUrl
                <br /></td>
        </tr>
        <tr id=''>
            <td id='' style='vertical-align: top;'>recurringMetadata<br /><br />Type: <a href="../amazon-pay-api-v2/checkout-session.md#type-recurringmetadata" target="_blank" rel="noopener noreferrer">recurringMetadata</a>
                <br /></td>
            <td id='' style='text-align: left;vertical-align: top;'>Body
                <br /></td>
            <td id='' style='vertical-align: top;'>Metadata about how the recurring Charge Permission will be used. Amazon Pay only uses this information to calculate the Charge Permission expiration date and in buyer communication<br /><br />
            Note that it is still your responsibility to call <a href="../amazon-pay-api-v2/charge.md#create-charge" target="_blank" rel="noopener noreferrer">Create Charge</a> to charge the buyer for each billing cycle
                <br /></td>
        </tr>
        <tr id='ERL9CAgQ4T4'>
            <td id='s:ERL9CAgQ4T4;ERL9CAFccoh' style='vertical-align: top;'>paymentDetails<br><br>Type: <a href="../amazon-pay-api-v2/checkout-session.md#type-paymentdetails" target="_blank" rel="noopener noreferrer">paymentDetails</a>
                <br /></td>
            <td id='s:ERL9CAgQ4T4;ERL9CAjQdu4' style='vertical-align: top;'>Body
                <br /></td>
            <td id='s:ERL9CAgQ4T4;ERL9CAxmCJ7' style='vertical-align: top;'>Payment details specified by the merchant such as the amount and method for charging the buyer<br><br>Modifiable: Multiple times before the buyer is redirected to the <code>amazonPayReturnUrl</code>
                <br /></td>
        </tr>
        <tr id='ERL9CA6JHj6'>
            <td id='s:ERL9CA6JHj6;ERL9CAFccoh' style='vertical-align: top;'>merchantMetadata<br><br>Type: <a href="../amazon-pay-api-v2/checkout-session.md#type-merchantmetadata" target="_blank" rel="noopener noreferrer">merchantMetadata</a>
                <br /></td>
            <td id='s:ERL9CA6JHj6;ERL9CAjQdu4' style='vertical-align: top;'>Body
                <br /></td>
            <td id='s:ERL9CA6JHj6;ERL9CAxmCJ7' style='vertical-align: top;'>External order details provided by the merchant<br><br>Modifiable: Multiple times before the buyer is redirected to the <code>amazonPayReturnUrl</code>
                <br /></td>
        </tr>
        <tr id='ERL9CA7OsPD'>
            <td id='s:ERL9CA7OsPD;ERL9CAFccoh' style='vertical-align: top;'>platformId<br><br>Type: string
                <br /></td>
            <td id='s:ERL9CA7OsPD;ERL9CAjQdu4' style='vertical-align: top;'>Body
                <br /></td>
            <td id='s:ERL9CA7OsPD;ERL9CAxmCJ7' style='vertical-align: top;'>Merchant identifier of the Solution Provider (SP). <br><br>Only SPs should use this field.<br><br>Modifiable: Multiple times before the buyer is redirected to the <code>amazonPayReturnUrl</code>.
                <br /></td>
        </tr>
        <tr id='ERL9CAuzzTA'>
            <td id='s:ERL9CAuzzTA;ERL9CAFccoh' style='vertical-align: top;'>providerMetadata<br><br>Type: <a href="../amazon-pay-api-v2/checkout-session.md#type-providermetadata" target="_blank" rel="noopener noreferrer">providerMetadata</a>
                <br /></td>
            <td id='s:ERL9CAuzzTA;ERL9CAjQdu4' style='vertical-align: top;'>Body
                <br /></td>
            <td id='s:ERL9CAuzzTA;ERL9CAxmCJ7' style='vertical-align: top;'>Transaction identifier created by the Payment Service Provider (PSP)<br><br>Only PSPs should use these fields<br><br>Modifiable: Multiple times before the buyer is redirected to the <code>amazonPayReturnUrl</code>
                <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-updateCheckoutSession-Recurring" data-toggle="tab">PHP</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#dotnettab-updateCheckoutSession-Recurring" data-toggle="tab">.NET</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#javatab-updateCheckoutSession-Recurring" data-toggle="tab">Java</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#nodejstab-updateCheckoutSession-Recurring" data-toggle="tab">Node.js</a></li>
</ul>
<div class="tab-content">
  <div role="tabpanel" class="tab-pane active" id="phptab-updateCheckoutSession-Recurring">   
<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'
    );
        
    $payload = array(
        'chargePermissionType' => 'Recurring',
        'recurringMetadata' => array(
            'frequency' => array(
                'unit' => 'Month',
                'value' => '1'
            ),
            'amount' => array(
                'amount' => '30',
                'currencyCode' => 'USD'
            )
        )
    );

    try {
        $client = new Amazon\Pay\API\Client($amazonpay_config);

        $result = $client->updateCheckoutSession('bd504926-f659-4ad7-a1a9-9a747aaf5275', $payload);

        if ($result['status'] === 201) {
            
            $response = json_decode($result['response'], true);
            $checkoutSessionId = $response['checkoutSessionId'];

        } 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-updateCheckoutSession-Recurring">
<div markdown="block">
```
using Amazon.Pay.API.Types;
using Amazon.Pay.API.WebStore.CheckoutSession;
using Amazon.Pay.API.WebStore;
using Amazon.Pay.API.WebStore.Types;

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 CheckoutSessionResponse UpdateCheckoutSession(string checkoutSessionId)
    {
        // prepare the request
        var request = new UpdateCheckoutSessionRequest()
        {
            ChargePermissionType = ChargePermissionType.Recurring,
            RecurringMetadata = {
                Frequency = {
                    Unit = FrequencyUnit.Month,
                    Value = 1
                }
                Amount = {
                    Amount = 30,
                    CurrencyCode = Currency.USD
                }
            }
        };

        // send the request
        var result = client.UpdateCheckoutSession(checkoutSessionId, request);

        // check if API call was successful
        if (!result.Success)
        {
            // do something, e.g. throw an error
        }

        return result;
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="javatab-updateCheckoutSession-Recurring">
<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;

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")
            .setAlgorithm("AMZN-PAY-RSASSA-PSS-V2");

        WebstoreClient webstoreClient = new WebstoreClient(payConfiguration);
        AmazonPayResponse response = null;
        String checkoutSessionId = "bd504926-f659-4ad7-a1a9-9a747aaf5275";

        JSONObject payload = new JSONObject();
        payload.put("chargePermissionType", "Recurring");

        JSONObject recurringMetadata = new JSONObject();

        JSONObject frequency = new JSONObject();
        frequency.put("unit","Month");
        frequency.put("value","1");
        recurringMetadata.put("frequency", frequency);

        JSONObject amount = new JSONObject();
        amount.put("amount","30");
        amount.put("currencyCode","USD");
        recurringMetadata.put("amount", amount);

        payload.put("recurringMetadata", recurringMetadata);

        response = webstoreClient.updateCheckoutSession(checkoutSessionId, payload);
    } catch (AmazonPayClientException e) {
            e.printStackTrace();
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="nodejstab-updateCheckoutSession-Recurring">
<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 payload = {
    chargePermissionType: "Recurring",
    recurringMetadata: {
        frequency: {
            unit: "Month",
            value: "1"
        },
        amount: {
            amount: "30",
            currencyCode: "USD"
        }
    }
};
                        
const testPayClient = new Client.WebStoreClient(config);
const response = testPayClient.updateCheckoutSession('bd504926-f659-4ad7-a1a9-9a747aaf5275', payload);

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

</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-updateCheckoutSession-Recurring-NESK" data-toggle="tab">PHP</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#dotnettab-updateCheckoutSession-Recurring-NESK" data-toggle="tab">.NET</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#javatab-updateCheckoutSession-Recurring-NESK" data-toggle="tab">Java</a></li>
  <li class="nav-item"><a class="nav-link noExtIcon" href="#nodejstab-updateCheckoutSession-Recurring-NESK" data-toggle="tab">Node.js</a></li>
</ul>
<div class="tab-content">
  <div role="tabpanel" class="tab-pane active" id="phptab-updateCheckoutSession-Recurring-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'
    );
        
    $payload = array(
        'chargePermissionType' => 'Recurring',
        'recurringMetadata' => array(
            'frequency' => array(
                'unit' => 'Month',
                'value' => '1'
            ),
            'amount' => array(
                'amount' => '30',
                'currencyCode' => 'USD'
            )
        )
    );

    try {
        $client = new Amazon\Pay\API\Client($amazonpay_config);

        $result = $client->updateCheckoutSession('bd504926-f659-4ad7-a1a9-9a747aaf5275', $payload);

        if ($result['status'] === 201) {
            
            $response = json_decode($result['response'], true);
            $checkoutSessionId = $response['checkoutSessionId'];

        } 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-updateCheckoutSession-Recurring-NESK">
<div markdown="block">
```
using Amazon.Pay.API.Types;
using Amazon.Pay.API.WebStore.CheckoutSession;
using Amazon.Pay.API.WebStore;
using Amazon.Pay.API.WebStore.Types;

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 CheckoutSessionResponse UpdateCheckoutSession(string checkoutSessionId)
    {
        // prepare the request
        var request = new UpdateCheckoutSessionRequest()
        {
            ChargePermissionType = ChargePermissionType.Recurring,
            RecurringMetadata = {
                Frequency = {
                    Unit = FrequencyUnit.Month,
                    Value = 1
                }
                Amount = {
                    Amount = 30,
                    CurrencyCode = Currency.USD
                }
            }
        };

        // send the request
        var result = client.UpdateCheckoutSession(checkoutSessionId, request);

        // check if API call was successful
        if (!result.Success)
        {
            // do something, e.g. throw an error
        }

        return result;
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="javatab-updateCheckoutSession-Recurring-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;

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")
            .setEnvironment(Environment.SANDBOX)
            .setAlgorithm("AMZN-PAY-RSASSA-PSS-V2");

        WebstoreClient webstoreClient = new WebstoreClient(payConfiguration);
        AmazonPayResponse response = null;
        String checkoutSessionId = "bd504926-f659-4ad7-a1a9-9a747aaf5275";

        JSONObject payload = new JSONObject();
        payload.put("chargePermissionType", "Recurring");

        JSONObject recurringMetadata = new JSONObject();

        JSONObject frequency = new JSONObject();
        frequency.put("unit","Month");
        frequency.put("value","1");
        recurringMetadata.put("frequency", frequency);

        JSONObject amount = new JSONObject();
        amount.put("amount","30");
        amount.put("currencyCode","USD");
        recurringMetadata.put("amount", amount);

        payload.put("recurringMetadata", recurringMetadata);

        response = webstoreClient.updateCheckoutSession(checkoutSessionId, payload);
    } catch (AmazonPayClientException e) {
            e.printStackTrace();
    }
}
```

</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="nodejstab-updateCheckoutSession-Recurring-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 payload = {
    chargePermissionType: "Recurring",
    recurringMetadata: {
        frequency: {
            unit: "Month",
            value: "1"
        },
        amount: {
            amount: "30",
            currencyCode: "USD"
        }
    }
};
                        
const testPayClient = new Client.WebStoreClient(config);
const response = testPayClient.updateCheckoutSession('bd504926-f659-4ad7-a1a9-9a747aaf5275', payload);

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

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

#### Response

```
{
    "checkoutSessionId": "bd504926-f659-4ad7-a1a9-9a747aaf5275",
    "webCheckoutDetails": {
        "checkoutReviewReturnUrl": "https://a.com/merchant-review-page",
        "checkoutResultReturnUrl": "https://a.com/merchant-confirm-page",
        "checkoutCancelUrl": null,
        "amazonPayRedirectUrl": "https://pay.amazon.com/redirect/checkoutId-1"
    },
    "chargePermissionType": "Recurring",   
    "recurringMetadata": {
        "frequency": { 
            "unit": "Month", 
            "value": "1" 
        },
        "amount": { 
            "amount": "30",
            "currencyCode": "USD"
        }
    },
    "productType": "PayAndShip",
    "paymentDetails": {
        "paymentIntent": "AuthorizeWithCapture",
        "canHandlePendingAuthorization": false,
        "chargeAmount": {
            "amount": "1",
            "currencyCode": "USD"
        },
        "totalOrderAmount": null,
        "softDescriptor": "Descriptor",
        "presentmentCurrency": "USD",
        "allowOvercharge": null,
        "extendExpiration": null
    },
    "merchantMetadata": {
        "merchantReferenceId": "Merchant reference ID",
        "merchantStoreName": "Merchant store name",
        "noteToBuyer": "Note to buyer",
        "customInformation": "Custom information"
    },
    "supplementaryData": null, // Amazon Pay system data 
    "buyer": {
        "buyerId": "buyerId",
        "name": "name-1",
        "email": "name@amazon.com",
        "phoneNumber": "800-000-0000",
        "primeMembershipTypes": null
    },
    "billingAddress":{ 
        "name": "Work",
        "addressLine1": "440 Terry Ave",
        "addressLine2": "",
        "addressLine3": "",
        "city": "Seattle",
        "county": "King",    
        "district": "Seattle",
        "stateOrRegion": "WA",
        "postalCode": "98121",
        "countryCode": "US",
        "phoneNumber": "800-000-0000"
    },
    "paymentPreferences": [
        {
            "paymentDescriptor": "Visa ****1111 (Amazon Pay)"
        }
    ],
    "statusDetails": {
        "state": "Open",
        "reasonCode": null,
        "reasonDescription": null,
        "lastUpdatedTimestamp": "20191015T195703Z"
    },
    "shippingAddress": {  // Null for PayOnly product type
        "name": "Susie Smith",
        "addressLine1": "10 Ditka Ave",
        "addressLine2": "Suite 2500",
        "addressLine3": null,
        "city": "Chicago",
        "county": null,
        "district": null,
        "stateOrRegion": "IL",
        "postalCode": "60602",
        "countryCode": "US",
        "phoneNumber": "800-000-0000"
    },
    "platformId": null,
    "chargePermissionId": null,
    "chargeId": null,
    "constraints": [],
    "creationTimestamp": "20191015T195655Z",
    "expirationTimestamp": "20191016T195655Z",
    "storeId": "amzn1.application-oa2-client.8b5e45312b5248b69eeaStoreId",
    "deliverySpecifications": {
        "specialRestrictions": ["RestrictPOBoxes"],
        "addressRestrictions": {
            "type": "Allowed",
            "restrictions": {
                "US": {
                    "statesOrRegions": ["WA"],
                    "zipCodes": ["95050", "93405"]
                },
                "GB": {
                    "zipCodes": ["72046", "72047"]
                },
                "IN": {
                    "statesOrRegions": ["AP"]
                },
                "JP": {}
            }
        }
    },
    "providerMetadata": {
        "providerReferenceId": null
    },
    "checkoutButtonText": null,
    "releaseEnvironment": "Sandbox"
}
```

***

### 2. Redirect to AmazonPayRedirectUrl

<a href="../amazon-pay-api-v2/checkout-session.md#update-checkout-session" target="_blank" rel="noopener noreferrer">Update Checkout Session</a> response will include a <a href="../amazon-pay-api-v2/checkout-session.md#type-constraint" target="_blank" rel="noopener noreferrer">Constraint object</a> until all mandatory parameters have been provided. The mandatory parameters are:

* `checkoutResultReturnUrl`
* `chargeAmount`
* `paymentIntent`
* `recurringMetadata.frequency`

Once there are no constraints, the response will return a unique `amazonPayRedirectUrl`. Redirect the buyer to that URL to complete checkout.







