---
title: Delivery Tracker
url: amazon-pay-api-v2/delivery-tracker.html
---

Amazon Pay uses the Delivery Tracker object to inform the buyer on Alexa when shipments are out for delivery and when they are delivered.

<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">
* **Create Delivery Tracker** - POST https://pay-api.amazon.com/:version/deliveryTrackers
</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="eutab" markdown="block">
<div markdown="block">
* **Create Delivery Tracker** - POST https://pay-api.amazon.eu/:version/deliveryTrackers
</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="jptab" markdown="block">
<div markdown="block">
* **Create Delivery Tracker** - POST https://pay-api.amazon.jp/:version/deliveryTrackers
</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">
* **Create Delivery Tracker** - POST https://pay-api.amazon.com/:environment/:version/deliveryTrackers
</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="eutabNESK" markdown="block">
<div markdown="block">
* **Create Delivery Tracker** - POST https://pay-api.amazon.eu/:environment/:version/deliveryTrackers
</div>
  </div>
  <div role="tabpanel" class="tab-pane" id="jptabNESK" markdown="block">
<div markdown="block">
* **Create Delivery Tracker** - POST https://pay-api.amazon.jp/:environment/:version/deliveryTrackers
</div>
  </div>
</div>
</div>





***

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

### Delivery Tracker object

<table width="100%" border="1">
    <tbody>
        <tr id='ERL9CAAMa0J'>
            <td id='s:ERL9CAAMa0J;ERL9CA4JgH8' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Parameter
                <br /></td>
            <td id='s:ERL9CAAMa0J;ERL9CA2UFx4' style='vertical-align: top; font-weight: bold; width: 70%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id=''>
            <td id='s:ERL9CAMViVA;ERL9CA2r6qD' style='vertical-align: top;'>amazonOrderReferenceId<br> <i>- or -</i> <br>chargePermissionId<br><b>(required)</b><br><br>Type: string
                <br /></td>
            <td id='s:ERL9CAMViVA;ERL9CAoRgfP' style='vertical-align: top;'>The Amazon Order Reference ID or Charge Permission ID associated with the order for which the shipments need to be tracked
                <br /></td>
        </tr>
        <tr id='ERL9CAW1ynS'>
            <td id='s:ERL9CAW1ynS;ERL9CA4JgH8' style='vertical-align: top;'>deliveryDetails<br><br>Type: <a href="#type-delivery-detail">deliveryDetail</a>
                <br /></td>
            <td id='s:ERL9CAW1ynS;ERL9CA2UFx4' style='vertical-align: top;'>Shipment delivery details
                <br /></td>
        </tr>
    </tbody>
</table>

#### Type: deliveryDetail

<table width="100%" border="1">
    <tbody>
        <tr id='ERL9CAz5j6a'>
            <td id='s:ERL9CAz5j6a;ERL9CAAufZX' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Parameter
                <br /></td>
            <td id='s:ERL9CAz5j6a;ERL9CAneSOW' style='vertical-align: top; font-weight: bold; width: 70%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id=''>
            <td id='s:ERL9CAvm2Or;ERL9CAFccoh' style='vertical-align: top;'>carrierCode<br><b>(required)</b><br><br>Type: string
                <br /></td>
            <td id='s:ERL9CAvm2Or;ERL9CAxmCJ7' style='vertical-align: top;'>The shipping company code used for delivering goods to the customer. <a href="https://d2bvfbw64wr20e.cloudfront.net/Alexa/Delivery+Notifications/amazon-pay-delivery-tracker-supported-carriers-v2.csv" target="_blank" rel="noopener noreferrer">Download carrierCode list</a>
                <br /></td>
        </tr>
        <tr id=''>
            <td id='s:ERL9CAVOprL;ERL9CA2r6qD' style='vertical-align: top;'>trackingNumber<br><b>(required)</b><br><br>Type: string
                <br /></td>
            <td id='s:ERL9CAVOprL;ERL9CAoRgfP' style='vertical-align: top;'>The tracking number for the shipment provided by the shipping company
                <br /></td>
        </tr> 
    </tbody>
</table>



## Operations

### Create Delivery Tracker

Create a Delivery Tracker once an order has been shipped and a tracking code has been generated. The buyer will receive a notification on their Alexa-enabled device when the order is shipped and when the order is delivered. Note that tracking codes can only be used once.

#### Request


<div style="display:none" class="environmentSpecificKeys">
<ul role="tablist" class="nav nav-tabs">
  <li class="nav-item"><a class="active nav-link" href="#button_widget_php" data-toggle="tab" aria-controls="button_widget_php" role="tab">PHP</a></li>
  <li class="nav-item"><a class="nav-link"  href="#button_widget_java" data-toggle="tab" aria-controls="button_widget_java" role="tab">Java</a></li>
  <li class="nav-item"><a class="nav-link"  href="#button_widget_net" data-toggle="tab" aria-controls="button_widget_net" role="tab">.NET</a></li>
  <li class="nav-item"><a class="nav-link"  href="#button_widget_nodejs" data-toggle="tab" aria-controls="button_widget_nodejs" role="tab">NodeJS</a></li>
  <li class="nav-item"><a class="nav-link"  href="#button_widget_other" data-toggle="tab" aria-controls="button_widget_other" role="tab">Other</a></li>
</ul>
<div class="tab-content">
  <div role="tabpanel" class="tab-pane active" id="button_widget_php">
    <pre><code
>&lt;?php
include 'vendor/autoload.php';

$amazonpay_config = array(
    'public_key_id' => 'YOUR_PUBLIC_KEY_ID',
    'private_key'   => 'keys/private.pem',
    'region'        => 'YOUR_REGION_CODE',
    'algorithm' => 'AMZN-PAY-RSASSA-PSS-V2'
);
$payload = array(
    'amazonOrderReferenceId' => 'P00-0000000-0000000',
    'deliveryDetails' => array(array(
        'trackingNumber' => '1Z999AA10123456784',
        'carrierCode' => 'UPS'
    ))
);
try {
  $client = new Amazon\Pay\API\Client($amazonpay_config);
  $result = $client->deliveryTrackers($payload);
  if ($result['status'] === 200) {
      // success
      echo $result['response'] . "\n";
  } else {
    // check the error
    echo 'status=' . $result['status'] . '; response=' . $result['response'] . "\n";
  }
} catch (\Exception $e) {
  // handle the exception
  echo $e . "\n";
}
?>
</code></pre>
  </div>
  <div role="tabpanel" class="tab-pane" id="button_widget_java">
<pre><code>
AmazonPayResponse response = null;

JSONObject payload = new JSONObject();
JSONObject deliveryDetails = new JSONObject();
JSONArray deliveryDetailsArray = new JSONArray();
deliveryDetails.put("trackingNumber", "1Z999AA10123456784");
deliveryDetails.put("carrierCode", "UPS");
deliveryDetailsArray.add(deliveryDetails);
payload.put("amazonOrderReferenceId", "P00-0000000-0000000");
payload.put("deliveryDetails", deliveryDetailsArray);

try {
    response = client.deliveryTracker(payload);
} catch (AmazonPayClientException e) {
    e.printStackTrace();
}
</code></pre>
  </div>
  <div role="tabpanel" class="tab-pane" id="button_widget_net">
 <pre><code
>// prepare the request
var request = new DeliveryTrackerRequest
(
    objectId: "P00-0000000-0000000", // ChargePermissionID or OrderReferenceID
    objectIsChargePermission: true,  // true if above is ChargePermissionID, false otherwise 
    trackingNumber: "1Z999AA10123456784", 
    carrierCode: "UPS"
);
// generate the button signature
var result = client.SendDeliveryTrackingInformation(request);
// check if API call was successful
if (!result.Success)
{
    // do something, e.g. throw an error
}

return result;
  
  </code></pre>
  </div>
  <div role="tabpanel" class="tab-pane" id="button_widget_nodejs">
 <pre><code
>const fs = require('fs');
const Client = require('../src/client');

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 = {
    amazonOrderReferenceId: 'P00-0000000-0000000',
    deliveryDetails: [{
        trackingNumber: '1Z999AA10123456789',
        carrierCode: 'UPS'
    }]
};

const testPayClient = new Client.AmazonPayClient(config);
const response = testPayClient.deliveryTrackers(payload);
</code></pre>
  </div>
   <div role="tabpanel" class="tab-pane" id="button_widget_other">

<pre><code>
POST /:version/deliveryTrackers HTTP/1.1
Host: pay-api.amazon.com
Accept: application/json
Authorization: AMZN-PAY-RSASSA-PSS-V2 PublicKeyId=f4fc06fc-c5a7-11e7-abc4-cec278b6b50a, SignedHeaders=content-type;x-amz-pay-date;x-amz-pay-region, Signature=4164128ec5d1b9da1700167ab2ccda8125f472c8bb9de447cebf5d741ee317c8       
X-Amz-Pay-Date: 20190305T024410Z
Content-type: application/json

{
    "amazonOrderReferenceId" : "P00-0000000-0000000",
    "deliveryDetails" : [{
    "trackingNumber" : "1Z999AA10123456784",
    "carrierCode" : "UPS"
  }]
}
</code></pre>
  </div>
</div>

</div>
<div style="display:none" class="notEnvironmentSpecificKeys">
<ul role="tablist" class="nav nav-tabs">
  <li class="nav-item"><a class="active nav-link" href="#button_widget_php_nesk" data-toggle="tab" aria-controls="button_widget_php" role="tab">PHP</a></li>
  <li class="nav-item"><a class="nav-link"  href="#button_widget_java_nesk" data-toggle="tab" aria-controls="button_widget_java" role="tab">Java</a></li>
  <li class="nav-item"><a class="nav-link"  href="#button_widget_net_nesk" data-toggle="tab" aria-controls="button_widget_net" role="tab">.NET</a></li>
  <li class="nav-item"><a class="nav-link"  href="#button_widget_nodejs_nesk" data-toggle="tab" aria-controls="button_widget_nodejs" role="tab">NodeJS</a></li>
  <li class="nav-item"><a class="nav-link"  href="#button_widget_other_nesk" data-toggle="tab" aria-controls="button_widget_other" role="tab">Other</a></li>
</ul>
<div class="tab-content">
  <div role="tabpanel" class="tab-pane active" id="button_widget_php_nesk">
    <pre><code
>&lt;?php
include 'vendor/autoload.php';

$amazonpay_config = array(
  'public_key_id' => 'MY_PUBLIC_KEY_ID',
  'private_key'   => 'keys/private.pem',
  'region'        => 'US',
  'sandbox'       => false,
  'algorithm' => 'AMZN-PAY-RSASSA-PSS-V2'
);
$payload = array(
  'amazonOrderReferenceId' => 'P00-0000000-0000000',
  'deliveryDetails' => array(array(
      'trackingNumber' => '1Z999AA10123456784',
      'carrierCode' => 'UPS'
  ))
);
try {
  $client = new Amazon\Pay\API\Client($amazonpay_config);
  $result = $client->deliveryTrackers($payload);
  if ($result['status'] === 200) {
      // success
      echo $result['response'] . "\n";
  } else {
    // check the error
    echo 'status=' . $result['status'] . '; response=' . $result['response'] . "\n";
  }
} catch (\Exception $e) {
  // handle the exception
  echo $e . "\n";
}
?>
</code></pre>
  </div>
  <div role="tabpanel" class="tab-pane" id="button_widget_java_nesk">
<pre><code>
AmazonPayResponse response = null;

JSONObject payload = new JSONObject();
JSONObject deliveryDetails = new JSONObject();
JSONArray deliveryDetailsArray = new JSONArray();
deliveryDetails.put("trackingNumber", "1Z999AA10123456784");
deliveryDetails.put("carrierCode", "UPS");
deliveryDetailsArray.add(deliveryDetails);
payload.put("amazonOrderReferenceId", "P00-0000000-0000000");
payload.put("deliveryDetails", deliveryDetailsArray);

try {
    response = client.deliveryTracker(payload);
} catch (AmazonPayClientException e) {
    e.printStackTrace();
}
</code></pre>
  </div>
  <div role="tabpanel" class="tab-pane" id="button_widget_net_nesk">
 <pre><code
>// prepare the request
var request = new DeliveryTrackerRequest
(
    objectId: "P00-0000000-0000000", // ChargePermissionID or OrderReferenceID
    objectIsChargePermission: true,  // true if above is ChargePermissionID, false otherwise 
    trackingNumber: "1Z999AA10123456784", 
    carrierCode: "UPS"
);
// generate the button signature
var result = client.SendDeliveryTrackingInformation(request);
// check if API call was successful
if (!result.Success)
{
    // do something, e.g. throw an error
}

return result;
  
  </code></pre>
  </div>
  <div role="tabpanel" class="tab-pane" id="button_widget_nodejs_nesk">
 <pre><code
>const fs = require('fs');
const Client = require('../src/client');

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

const payload = {
    amazonOrderReferenceId: 'P00-0000000-0000000',
    deliveryDetails: [{
        trackingNumber: '1Z999AA10123456789',
        carrierCode: 'UPS'
    }]
};

const testPayClient = new Client.AmazonPayClient(config);
const response = testPayClient.deliveryTrackers(payload);
</code></pre>
  </div>
   <div role="tabpanel" class="tab-pane" id="button_widget_other_nesk">

<pre><code>
POST /live/v2/deliveryTrackers HTTP/1.1
Host: pay-api.amazon.com
Accept: application/json
Authorization: AMZN-PAY-RSASSA-PSS-V2 PublicKeyId=f4fc06fc-c5a7-11e7-abc4-cec278b6b50a, SignedHeaders=content-type;x-amz-pay-date;x-amz-pay-region, Signature=4164128ec5d1b9da1700167ab2ccda8125f472c8bb9de447cebf5d741ee317c8       
X-Amz-Pay-Date: 20190305T024410Z
Content-type: application/json

{
    "amazonOrderReferenceId" : "P00-0000000-0000000",
    "deliveryDetails" : [{
    "trackingNumber" : "1Z999AA10123456784",
    "carrierCode" : "UPS"
  }]
}
</code></pre>
  </div>
</div>

</div>

#### Request parameters

<table width="100%" border="1">
    <tbody>
        <tr id=''>
            <td id='s:ERL9CAO0JHD;ERL9CA2r6qD' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>Name
                <br /></td>
            <td id='s:ERL9CAO0JHD;ERL9CAZAZrc' style='vertical-align: top; font-weight: bold; width: 20%;' class='bold'>Location
                <br /></td>
            <td id='s:ERL9CAO0JHD;ERL9CAoRgfP' style='vertical-align: top; font-weight: bold; width: 50%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id=''>
            <td id='s:ERL9CAMViVA;ERL9CA2r6qD' style='vertical-align: top;'>amazonOrderReferenceId<br> <i>- or -</i> <br>chargePermissionId<br><b>(required)</b><br><br>Type: string
                <br /></td>
            <td id='s:ERL9CAMViVA;ERL9CAZAZrc' style='vertical-align: top;'>Body
                <br /></td>
            <td id='s:ERL9CAMViVA;ERL9CAoRgfP' style='vertical-align: top;'>The Amazon Order Reference ID or Charge Permission ID associated with the order for which the shipments need to be tracked
                <br /></td>
        </tr>
        <tr id=''>
            <td id='s:ERL9CAvm2Or;ERL9CAFccoh' style='vertical-align: top;'>carrierCode<br><b>(required)</b><br><br>Type: string
                <br /></td>
            <td id='s:ERL9CAvm2Or;ERL9CAjQdu4' style='vertical-align: top;'>Body
                <br /></td>
            <td id='s:ERL9CAvm2Or;ERL9CAxmCJ7' style='vertical-align: top;'>The shipping company code used for delivering goods to the customer. <a href="https://d2bvfbw64wr20e.cloudfront.net/Alexa/Delivery+Notifications/amazon-pay-delivery-tracker-supported-carriers-v2.csv" target="_blank" rel="noopener noreferrer">Download carrierCode list</a>
                <br /></td>
        </tr>
        <tr id=''>
            <td id='s:ERL9CAVOprL;ERL9CA2r6qD' style='vertical-align: top;'>trackingNumber<br><b>(required)</b><br><br>Type: string
                <br /></td>
            <td id='s:ERL9CAVOprL;ERL9CAZAZrc' style='vertical-align: top;'>Body
                <br /></td>
            <td id='s:ERL9CAVOprL;ERL9CAoRgfP' style='vertical-align: top;'>The tracking number for the shipment provided by the shipping company
                <br /></td>
        </tr>       
    </tbody>
</table>

#### Response

Returns <a href="https://restfulapi.net/http-status-200-ok" target="_blank" rel="noopener noreferrer">HTTP 200 status response code</a> if the operation was successful. 

```
{
    "amazonOrderReferenceId": "P00-0000000-0000000",
    "deliveryDetails": [{
        "trackingNumber": "1Z999AA10123456784",
        "carrierCode": "UPS"
    }]
}
```

#### Error codes

<table width="100%" border="1">
    <tbody>
        <tr id=''>
            <td id='' style='vertical-align: top; font-weight: bold; width: 30%;' class='bold'>HTTP status code
                <br /></td>
            <td id='' style='vertical-align: top; font-weight: bold; width: 20%;' class='bold'>Reason code
                <br /></td>
            <td id='' style='vertical-align: top; font-weight: bold; width: 50%;' class='bold'>Description
                <br /></td>
        </tr>
        <tr id=''>
            <td id='' style='vertical-align: top;'><br>400 BAD_REQUEST
                <br /></td>
            <td id='' style='vertical-align: top;'><br>InvalidInputFormat
                <br /></td>
            <td id='' style='vertical-align: top;'>The token provided is expired, revoked, malformed, or invalid for some other reason
                <br /></td>
        </tr>
        <tr id=''>
            <td id='' style='vertical-align: top;'><br>400 BAD_REQUEST
                <br /></td>
            <td id='' style='vertical-align: top;'><br>InvalidParameterValue
                <br /></td>
            <td id='' style='vertical-align: top;'>The <code>amazonOrderReferenceId</code> that you submitted in this request is invalid
                <br /></td>
        </tr>
        <tr id=''>
            <td id='' style='vertical-align: top;'><br>400 BAD_REQUEST
                <br /></td>
            <td id='' style='vertical-align: top;'><br>InvalidParameterValue
                <br /></td>
            <td id='' style='vertical-align: top;'>The <code>trackingNumber</code> or <code>carrierCode</code> that you submitted in this request is invalid
                <br /></td>
        </tr>
    </tbody>
</table>

Generic errors can be found <a href="../amazon-pay-api-v2/error-handling.md" target="_blank" rel="noopener noreferrer">here</a>. 






