Push Notifications - Tracking a Shipment

Push Notifications (WebHook) is a Tracking feature enabled by Amazon Shipping which helps shippers/integrators to automatically receive shipment tracking updates for a package as they become available, without the need to make any external API calls.

The push notifications feature allows developers (shippers/integrators) to subscribe to Amazon tracking updates via their webhook URL endpoint. At present developers will be manually onboarded to receiving push notifications, however Amazon is working to enable self-service API subscriptions.

Steps to Subscribe to Push Notification Feature

  1. The shipper/integrator needs to provide their
    • Webhook URL
    • Authentication Mechanism
    • Shipper Account ID or Shipping Party Account ID (for whom push notifications are being setup)
    • Point of contact emails.
  2. Once these details are shared with the Account Manager they will be able to request webhook subscription setup.
  3. The Account Manager will internally coordinate configuring and activating the subscription for notifications.

Supported Authentication Mechanisms

One of the following must be enabled by the Shipper/Integrator:

#MethodDescriptionExample
1API KeyA token sent by Amazon in the request headers when delivering tracking information to your webhook URL.X-API-KEY: abcdef12345
2Query ParameterA key-value pair passed in the URL. Useful when you want to express a request entirely in a URL.https://example.com/webhook?X-Amz-Credential=<your-access-key-id>
3Username & PasswordA key-value pair passed in the header to authenticate the incoming request via username and password.Basic Auth header
4OAuth 2.0Open Authorization framework. Amazon obtains an access token via OAuth 2.0 Client Credentialsflow and presents it when calling your webhook.Bearer token in Authorization header

Push notifications event follows this envelope structure with detail and few metadata fields:

detail Object

NameDescriptionSchema
shippingPartyAccountIdUnique identifier of the shipper accountstring
trackingIdTracking ID for the container for which tracking events are requested.TrackingId
eventTimeThe ISO 8601 formatted timestamp of the event.
It can includes local timezone offset (e.g., 2026-06-15T14:22:00+01:00) upon specific request
string (date-time)
statusHigh-level status of the tracked shipment.Status (enum)
alternateLegTrackingIdThe carrier generated reverse identifier for a returned package in a purchased shipment. Empty for non-return shipments.AlternateLegTrackingId
eventCodeThe tracking event type.EventCode (enum)
appIdThe application id configured for webhook (optional)string
shipmentTypeIndicates whether the event is for the forward or reverse leg. Values: FORWARD, RETURN.shipmentType
trackingDetailCodesContains additional details related to the shipment status.trackingDetailCodes
promisedDeliveryDateThe date the package is expected to be delivered.string (date-time)
locationLocation details of the tracking event. Always present; sub-fields may be null.Object
proofOfDeliveryProof of delivery details. Present only for Delivered events when POD data is available. Otherwise null.Object | null
versionPayload schema version.integer
timeToLiveTTL value for the event.integer

⚠️

Important: Ensure your webhook parser handles additional fields gracefully. We periodically enhance the payload with new attributes to make notifications more informative — these additions are backward-compatible, but if your parser is strict (e.g., fails on unrecognised fields), it may break when new fields are introduced. A flexible/lenient JSON parser that ignores unknown properties is recommended.

Location Object

The location object is always present in every push notification event. When the carrier provides node/facility data, fields are populated. Otherwise, all fields are null.

FieldTypeDescription
location.cityString | nullCity where the event occurred.
location.stateOrRegionString | nullState or region of the event.
location.postalCodeString | nullPostal code of the event location.
location.countryCodeString | nullISO 3166-1 alpha-2 country code.

Example — Location populated:

"location": {
  "city": "Crest Hill",
  "countryCode": "US",
  "postalCode": "60441",
  "stateOrRegion": "IL"
}

Example — Location unavailable:

"location": {
  "city": null,
  "stateOrRegion": null,
  "postalCode": null,
  "countryCode": null
}

Note: Certain event codes — including ReadyForReceive and Delivered — may return all null location fields.
For Delivered events, use the proofOfDelivery.deliveryLocationCoordinates (GPS coordinates) for precise delivery confirmation instead.

Proof of Delivery (POD) Object

The proofOfDelivery object is present only on Delivered events when POD data is captured. It is null for non-delivery events, and may also be null for Delivered events where no proof was collected (e.g., safe place delivery without photo).

FieldTypeDescription
proofOfDelivery.deliveryImageURLString | nullURL of the photo taken at delivery. Valid for 3 days from event time.
proofOfDelivery.signatureImageURLString | nullURL of the recipient's signature image. Valid for 6 days from event time.
proofOfDelivery.deliveryLocationCoordinatesObject | nullGPS coordinates of the delivery location.
proofOfDelivery.deliveryLocationCoordinates.latitudeString | nullLatitude of delivery location.
proofOfDelivery.deliveryLocationCoordinates.longitudeString | nullLongitude of delivery location.
proofOfDelivery.receivedByString | nullName of the person who received the package.

Important: Image URLs are time-limited. Download or cache images promptly:

Example — POD with all fields:

"proofOfDelivery": {
  "deliveryImageURL": "https://shipping-delivery-images.amazon.com/img/abc123...",
  "signatureImageURL": "https://shipping-delivery-images.amazon.com/sig/def456...",
  "deliveryLocationCoordinates": {
    "latitude": "28.6139",
    "longitude": "77.2090"
  },
  "receivedBy": "John Smith"
}

Example — POD with partial data (no signature):

"proofOfDelivery": {
  "deliveryImageURL": "https://shipping-delivery-images.amazon.com/img/abc123...",
  "signatureImageURL": null,
  "deliveryLocationCoordinates": {
    "latitude": "28.6139",
    "longitude": "77.2090"
  },
  "receivedBy": null
}

Full Payload Examples

Example 1: InTransit event with location

{
  "version": "0",
  "id": "a3c91f2e-8b04-4d7a-b6e2-1f9a3c5d8e7b",
  "detail-type": "Tracking Detail",
  "source": "AmazonShipping",
  "account": "434519225125",
  "time": "2026-06-14T22:10:00Z",
  "region": "eu-west-1",
  "resources": [],
  "detail": {
    "shippingPartyAccountId": "A1QWXXXXX0BXXI",
    "trackingId": "TBA123456789000",
    "eventTime": "2026-06-14T23:10:00+01:00",
    "status": "InTransit",
    "alternateLegTrackingId": "",
    "eventCode": "ArrivedAtCarrierFacility",
    "appId": "amzn1.sp.solution.4622520d-ef11-4366-aa17-5ff8bb0b9aea",
    "shipmentType": "FORWARD",
    "trackingDetailCodes": [],
    "promisedDeliveryDate": "2026-06-16T20:00:00Z",
    "location": {
      "city": "Crest Hill",
      "countryCode": "US",
      "postalCode": "60441",
      "stateOrRegion": "IL"
    },
    "proofOfDelivery": null,
    "version": 2,
    "timeToLive": 1979569000
  }
}

Example 2: Delivered event with location and POD

{
  "version": "0",
  "id": "65b79d6b-6a01-40da-8f3f-082c5f75364e",
  "detail-type": "Tracking Detail",
  "source": "AmazonShipping",
  "account": "434519225125",
  "time": "2026-06-15T14:22:00Z",
  "region": "eu-west-1",
  "resources": [],
  "detail": {
    "shippingPartyAccountId": "A1QWXXXXX0BXXI",
    "trackingId": "TBA123456789000",
    "eventTime": "2026-06-15T19:52:00+05:30",
    "status": "Delivered",
    "alternateLegTrackingId": "",
    "eventCode": "Delivered",
    "appId": "amzn1.sp.solution.4622520d-ef11-4366-aa17-5ff8bb0b9aea",
    "shipmentType": "FORWARD",
    "trackingDetailCodes": ["DeliveredToPorch"],
    "promisedDeliveryDate": "2026-06-16T20:00:00Z",
    "location": {
      "city": "Crest Hill",
      "countryCode": "US",
      "postalCode": "60441",
      "stateOrRegion": "IL"
    },
    "proofOfDelivery": {
      "deliveryImageURL": "https://shipping-delivery-images.amazon.com/img/abc123...",
      "signatureImageURL": "https://shipping-delivery-images.amazon.com/sig/def456...",
      "deliveryLocationCoordinates": {
        "latitude": "28.6139",
        "longitude": "77.2090"
      },
      "receivedBy": "Test User"
    },
    "version": 2,
    "timeToLive": 1979569000
  }
}

Example 3: Delivered event without POD (safe place delivery)

{
  "version": "0",
  "id": "2d1cf554-e7f0-2362-6b2d-dd36bd4677e2",
  "detail-type": "Tracking Detail",
  "source": "AmazonShipping",
  "account": "434519225125",
  "time": "2026-06-15T16:45:00Z",
  "region": "eu-west-1",
  "resources": [],
  "detail": {
    "shippingPartyAccountId": "A1QWXXXXX0BXXI",
    "trackingId": "TBA987654321000",
    "eventTime": "2026-06-15T17:45:00+01:00",
    "status": "Delivered",
    "alternateLegTrackingId": "",
    "eventCode": "Delivered",
    "appId": "amzn1.sp.solution.4622520d-ef11-4366-aa17-5ff8bb0b9aea",
    "shipmentType": "FORWARD",
    "trackingDetailCodes": ["DeliveredToPorch"],
    "promisedDeliveryDate": "2026-06-16T20:00:00Z",
    "location": {
      "city": "Crest Hill",
      "countryCode": "US",
      "postalCode": "60441",
      "stateOrRegion": "IL"
    },
    "proofOfDelivery": null,
    "version": 2,
    "timeToLive": 1979569000
  }
}

Integration Best Practices

Handling nullable fields

  • The location object is always present but its sub-fields may all be null.
  • The proofOfDelivery object is null for non-delivery events and may be null even for Delivered events if no proof was captured.

Image URL expiry

Image TypeValidity
Delivery photo (deliveryImageURL)3 days from event time
Signature image (signatureImageURL)6 days from event time

Download or cache images immediately upon receiving the notification. Expired URLs cannot be regenerated.

Backward compatibility

  • The location and proofOfDelivery fields are additive. Existing integrations that do not parse these fields will continue to function without changes.
  • New fields may be added to the payload in future — design your parser to ignore unknown fields.

Timezone handling

  • eventTime can include the local timezone offset (e.g., +05:30, +01:00, -05:00) — however, this is enabled on a per-account basis via additional configuration. By default, eventTime is in UTC Zulu (Z).
  • The EventBridge envelope time field always remains in UTC.
  • To enable local timezone offset, contact your Amazon Account Manager.

FAQs

Onboarding & Subscription
1. What is the need for push notifications?

Using push notifications helps shippers to automatically receive shipment status updates for a package as they become available, without the need to make any external calls. Using the push mechanism additionally helps to minimize throttling risks.

2. Who can enable Push Notification Tracking feature?

3rd Party Integrators and direct integrated shippers who are using Shipping V2 API to create shipments for Amazon Shipping carrier can use this feature to get tracking notifications and updates of their shipments.

3. What details does the Shipper/Integrator need to provide to enable Push Notifications?
DetailDescriptionExample
Webhook URLYour HTTPS endpoint for receiving notificationshttps://tracking.notification.xxx/webhook/amazon-shipping/
Authentication MethodCredentials for one of the 4 supported auth typesAPI Key: 93GXXXXXXAhq$XXX
Contact Email AddressTechnical contact to receive alerts if webhook health is bad[email protected]
Shipping Account DetailsCustomer's Shipping Account ID or NameName: NewShipper, SPID: AC123TY7890
Application ID (Optional)AppId from Solution Provider Portal / Seller Centralamzn1.sp.solution.xx3gh3fc-xx12-4z74-c2c4-u1234567890r
4. Are HTTPS webhooks required?

Yes. HTTPS is a mandatory requirement for webhook URLs. Amazon will only accept and configure HTTPS-enabled webhook URLs to ensure secure communication and protect sensitive tracking data during transmission.

5. How long does it take to enable push notifications?

Push Notifications are configured via our tech team. You will receive a response within 5 business days.

6. How can a Shipper/Integrator request Push Notification Tracking?

Push Notifications can only be enabled for orders shipped with Amazon Shipping. As the subscription process is manual as of today, please contact your Amazon Account Manager for further assistance to enable Push Notification Tracking feature.


Payload Schema & Fields
7. Is there a difference in the available fields between the pull API and push notifications?

No — as of Q2 2026, Push Notifications now include both location and proofOfDelivery objects, achieving full parity with the Tracking API (pull). The only structural difference remains: the pull API response includes the full event history for every call, while push notifications are sent per-event and contain only that single event.

8. Is there a difference in the tracking data between the pull API and push notifications?

There is no difference in schema or information — both use the same fields, enums, and data structures (location, proofOfDelivery, eventCode, status, etc.).

The difference is in scope:

  • Tracking API (pull): Returns the full accumulated event history for a shipment — every scan event throughout the entire journey in a single response.
  • Push Notifications: Delivers a single event at the point it occurs. Each notification contains only that one scan event's details.

In short: same data, same schema — but the Tracking API gives you the complete timeline, while Push Notifications give you each event in real time as it happens.

9. Where can I find a list of tracking status and event codes?

Event Codes and tracking status list is available in the API reference:

10. Does `eventTime` include local timezone offset?

The eventTime field can include the local timezone offset in ISO 8601 format — however, this is currently enabled on a per-account basis via additional configuration. The format remains ISO 8601 regardless:

  • With offset: 2026-06-15T19:52:00+05:30
  • Without offset (default): 2026-06-15T14:22:00Z

If you require local timezone offset in your push notification events, please contact your Amazon Account Manager to request enablement.

11. Is the `location` object always present in the payload?

Yes. The location object is included in every push notification event. However, when the carrier does not provide node/facility data for an event, all fields within location (city, stateOrRegion, postalCode, countryCode) will be null.

12. Can some location fields be populated while others are `null`?

Yes. For example, countryCode may be available while city and postalCode are null. Do not assume that one populated field guarantees the others.

13. Which events typically have location data populated?

Events associated with a physical facility or delivery point (e.g., ArrivedAtCarrierFacility, OutForDelivery, Delivered) are most likely to have location data. Early lifecycle events (e.g., ReadyForReceive) often have null location fields.

14. Is location data available for all marketplaces?

Yes. Location data is available across US, UK, FR, IT, ES, and IN. Population depends on carrier-provided data, not marketplace.


Proof of Delivery (POD) & Image Data
15. When is the `proofOfDelivery` object present?

Only on Delivered events where proof of delivery was captured. For non-delivery events, or deliveries where no proof was collected (e.g., safe place delivery without a photo), the field is null.

16. What does the POD object include?
FieldDescription
deliveryImageURLPhoto taken at delivery (valid for 3 days)
signatureImageURLRecipient's signature image (valid for 6 days)
deliveryLocationCoordinates.latitudeGPS latitude of delivery point
deliveryLocationCoordinates.longitudeGPS longitude of delivery point
receivedByName of the person who received the package

All fields are nullable — availability depends on the delivery workflow for each package.

17. Will all Delivered events have POD data?

No. POD availability depends on the delivery workflow. Not all deliveries require a photo or signature. If no proof was captured, proofOfDelivery will be null.

18. What is the validity period for image URLs?
Image TypeValidity
Delivery photo (deliveryImageURL)3 days from event time
Signature image (signatureImageURL)6 days from event time

Download or cache images immediately upon receiving the notification. Expired URLs cannot be regenerated.

19. Can I get POD data without subscribing to push notifications?

Yes. POD data is also available via the Tracking API. Push Notifications provide the same data in real-time without polling.

20. What does `receivedBy` contain?

The name of the person who received the package, as captured by the delivery driver. This field is null if the recipient's name was not recorded (e.g., unattended delivery).

21. Are GPS coordinates (`deliveryLocationCoordinates`) always available on POD events?

No. GPS coordinates are captured when the delivery driver's device provides location data at the point of delivery. The field may be null if GPS was unavailable.

22. What is the difference between `location` and `proofOfDelivery.deliveryLocationCoordinates`?
locationproofOfDelivery.deliveryLocationCoordinates
PurposeWhere a tracking event occurred (facility, hub, delivery area)Exact GPS coordinates where the package was physically delivered
Present onEvery eventOnly Delivered events where GPS was captured
Data typeAddress-level: city, stateOrRegion, postalCode, countryCodeCoordinates: latitude, longitude
SourceCarrier node/facility dataDelivery driver's device GPS
Use caseTrack shipment journey across locationsConfirm exact delivery drop-off point

Troubleshooting
23. In the event of a system outage, can previous notifications be requested?

Yes. In the event of a system outage, shippers can request previous notifications through two methods:

  1. Using the existing pull API to retrieve previous tracking information
  2. Requesting retriggering of push notifications for a specific timeline

When retriggering push notifications, they will be sent based on the timeline criteria only — not for specific event codes or tracking IDs.

24. My webhook is returning 401 Unauthorized — what's wrong?

Common causes:

  1. API Key mismatch — Verify the key-value pair matches what was configured during onboarding.
  2. OAuth token expired — Ensure your OAuth endpoint issues tokens with sufficient TTL.
  3. Username/Password incorrect — Verify the Basic Auth credentials match your endpoint's configuration.
25. Events are arriving out of order — how should I handle this?

Network latency and retry sequencing may cause events to arrive out of chronological order. Always use the eventTime field to sort events — not the order of delivery. Maintain a local event store keyed by trackingId and sort by eventTime.

26. I'm not receiving any events after subscription — what should I check?
  1. Verify your endpoint is publicly accessible (not behind a VPN or firewall)
  2. Ensure your endpoint returns HTTP 2xx for POST requests
  3. Check that your authentication credentials are valid and accessible
  4. Contact your Amazon Account Manager to verify your subscription is active and enabled
27. Why are all `location` fields `null` for some events?

This is expected behavior. The carrier does not provide node/facility data for every event. Specifically:

  • ReadyForReceive — typically null (label created, no physical scan yet)
  • Delivered — may be null if the carrier doesn't map the delivery address to a node

For Delivered events with null location, use proofOfDelivery.deliveryLocationCoordinates (GPS) instead.


Backward Compatibility & Migration
28. Are the `location` and `proofOfDelivery` additions breaking changes?

No. Both are additive fields. Existing integrations that do not parse these fields will continue to function without changes. No updates to webhook subscription or endpoint configuration are required.

29. Will new fields be added to the payload in future?

Yes. The Push Notification payload will continue to evolve toward full Tracking API parity. Future additions will be backward-compatible (additive only). Design your parser to ignore unknown fields rather than failing on them.

30. How will I be notified of upcoming schema changes?

Schema changes are announced via: Developer Docs Feed

  • Please subscribe to our RSS feeds Developer Docs RSS Feed
  • Email communication to your registered technical contact
  • Pre-launch announcements with advance notice for significant changes
31. I'm migrating from polling the Tracking API — what changes?
AspectTracking API (polling)Push Notifications
DeliveryOn-demand (you request)Real-time (events pushed to you)
SchemaIdenticalIdentical
LatencyDepends on polling intervalNear real-time (seconds)
Rate limitsSubject to API throttlingNo rate limits on receiving
Event scopeFull event history per callSingle event per notification
POD URLsSame validity (3d photo, 6d signature)Same validity (3d photo, 6d signature)

Did this page help you?