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
- 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.
- Once these details are shared with the Account Manager they will be able to request webhook subscription setup.
- 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:
| # | Method | Description | Example |
|---|---|---|---|
| 1 | API Key | A token sent by Amazon in the request headers when delivering tracking information to your webhook URL. | X-API-KEY: abcdef12345 |
| 2 | Query Parameter | A 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> |
| 3 | Username & Password | A key-value pair passed in the header to authenticate the incoming request via username and password. | Basic Auth header |
| 4 | OAuth 2.0 | Open 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 and few metadata fields:detail Object
detail Object| Name | Description | Schema |
|---|---|---|
| shippingPartyAccountId | Unique identifier of the shipper account | string |
| trackingId | Tracking ID for the container for which tracking events are requested. | TrackingId |
| eventTime | The 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) |
| status | High-level status of the tracked shipment. | Status (enum) |
| alternateLegTrackingId | The carrier generated reverse identifier for a returned package in a purchased shipment. Empty for non-return shipments. | AlternateLegTrackingId |
| eventCode | The tracking event type. | EventCode (enum) |
| appId | The application id configured for webhook (optional) | string |
| shipmentType | Indicates whether the event is for the forward or reverse leg. Values: FORWARD, RETURN. | shipmentType |
| trackingDetailCodes | Contains additional details related to the shipment status. | trackingDetailCodes |
| promisedDeliveryDate | The date the package is expected to be delivered. | string (date-time) |
| location | Location details of the tracking event. Always present; sub-fields may be null. | Object |
| proofOfDelivery | Proof of delivery details. Present only for Delivered events when POD data is available. Otherwise null. | Object | null |
| version | Payload schema version. | integer |
| timeToLive | TTL 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.
| Field | Type | Description |
|---|---|---|
location.city | String | null | City where the event occurred. |
location.stateOrRegion | String | null | State or region of the event. |
location.postalCode | String | null | Postal code of the event location. |
location.countryCode | String | null | ISO 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
ReadyForReceiveandDelivered— may return allnulllocation fields.
ForDeliveredevents, use theproofOfDelivery.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).
| Field | Type | Description |
|---|---|---|
proofOfDelivery.deliveryImageURL | String | null | URL of the photo taken at delivery. Valid for 3 days from event time. |
proofOfDelivery.signatureImageURL | String | null | URL of the recipient's signature image. Valid for 6 days from event time. |
proofOfDelivery.deliveryLocationCoordinates | Object | null | GPS coordinates of the delivery location. |
proofOfDelivery.deliveryLocationCoordinates.latitude | String | null | Latitude of delivery location. |
proofOfDelivery.deliveryLocationCoordinates.longitude | String | null | Longitude of delivery location. |
proofOfDelivery.receivedBy | String | null | Name 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
locationobject is always present but its sub-fields may all benull. - The
proofOfDeliveryobject isnullfor non-delivery events and may benulleven forDeliveredevents if no proof was captured.
Image URL expiry
| Image Type | Validity |
|---|---|
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
locationandproofOfDeliveryfields 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
eventTimecan 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,eventTimeis in UTC Zulu (Z).- The EventBridge envelope
timefield 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?
| Detail | Description | Example |
|---|---|---|
| Webhook URL | Your HTTPS endpoint for receiving notifications | https://tracking.notification.xxx/webhook/amazon-shipping/ |
| Authentication Method | Credentials for one of the 4 supported auth types | API Key: 93GXXXXXXAhq$XXX |
| Contact Email Address | Technical contact to receive alerts if webhook health is bad | [email protected] |
| Shipping Account Details | Customer's Shipping Account ID or Name | Name: NewShipper, SPID: AC123TY7890 |
| Application ID (Optional) | AppId from Solution Provider Portal / Seller Central | amzn1.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?
| Field | Description |
|---|---|
deliveryImageURL | Photo taken at delivery (valid for 3 days) |
signatureImageURL | Recipient's signature image (valid for 6 days) |
deliveryLocationCoordinates.latitude | GPS latitude of delivery point |
deliveryLocationCoordinates.longitude | GPS longitude of delivery point |
receivedBy | Name 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 Type | Validity |
|---|---|
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`?
location | proofOfDelivery.deliveryLocationCoordinates | |
|---|---|---|
| Purpose | Where a tracking event occurred (facility, hub, delivery area) | Exact GPS coordinates where the package was physically delivered |
| Present on | Every event | Only Delivered events where GPS was captured |
| Data type | Address-level: city, stateOrRegion, postalCode, countryCode | Coordinates: latitude, longitude |
| Source | Carrier node/facility data | Delivery driver's device GPS |
| Use case | Track shipment journey across locations | Confirm 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:
- Using the existing pull API to retrieve previous tracking information
- 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:
- API Key mismatch — Verify the key-value pair matches what was configured during onboarding.
- OAuth token expired — Ensure your OAuth endpoint issues tokens with sufficient TTL.
- 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?
- Verify your endpoint is publicly accessible (not behind a VPN or firewall)
- Ensure your endpoint returns HTTP 2xx for POST requests
- Check that your authentication credentials are valid and accessible
- 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— typicallynull(label created, no physical scan yet)Delivered— may benullif 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?
| Aspect | Tracking API (polling) | Push Notifications |
|---|---|---|
| Delivery | On-demand (you request) | Real-time (events pushed to you) |
| Schema | Identical | Identical |
| Latency | Depends on polling interval | Near real-time (seconds) |
| Rate limits | Subject to API throttling | No rate limits on receiving |
| Event scope | Full event history per call | Single event per notification |
| POD URLs | Same validity (3d photo, 6d signature) | Same validity (3d photo, 6d signature) |
Updated about 1 month ago
