Launch Announcement: Amazon Shipping Error Code Enhancement - Phase 1 (WW)
In May 2026, Amazon Shipping will introduce enhanced, standardised error codes and messages across GetRatesV2, PurchaseShipment and OneClickShipment APIs worldwide.
Summary
This launch delivers standardised error codes with actionable messages across the Amazon Shipping V2 API. Each error now includes a concise, actionable message appended with an identifier from defined families — A-xxx, D-xxx, S-xxx.
| API | Total Error Codes | Updated | New | HTTP Status Codes Used |
|---|---|---|---|---|
| GetRatesV2 | 35 | 30 | 5 | 200 (ineligibility), 400, 403, 500 |
| OneClickShipment | 46 | 36 | 10 | 400, 403, 422*, 500 |
| PurchaseShipment | 1 | 1 | 0 | 400 |
Key difference: GetRatesV2 also surfaces service-eligibility issues (no slots, promise miss, no coverage, etc.) as HTTP 200 responses with ineligible rates in the
ineligibleRatesarray along with HTTP 400 statuses while OneClickShipment surfaces the same scenarios with HTTP 422 and HTTP 400 error responses.
What is changing?
The error identifiers are useful for debugging and support ticket correlation. A future release will introduce stable, descriptive codes in the code field for programmatic use.
The changes apply to both the GetRatesV2 and OneClickShipment APIs, but the response paths differ:
For OneClickShipment — every error in the errors[x].details field now includes:
- A unique error identifier (e.g.,
D-701,A-301,S-503) - A concise, actionable message following the format: what went wrong + how to fix it + (identifier)
- Proper HTTP status codes: 400 (input error), 403 (auth failure), 422 (valid syntax but unprocessable), 500 (server-side)
For GetRatesV2 — in addition to the above error response format (400, 403, 500):
- Service-eligibility issues are returned as HTTP 200 in the
ineligibleRates[x].ineligibilityReasonsarray - Each ineligibility reason now includes the same standardised message and identifier in the
messagefield - The
codefield contains theineligibilityReasonCodeenum value (e.g.,NoSlotsFound,MISSES_PROMISE)
Which marketplaces are affected?
This change applies to all marketplaces worldwide (US, UK, FR, IT, ES, IN).
Who is affected?
Developers who integrate with the Amazon Shipping V2 API (GetRatesV2 and OneClickShipment) are affected. This is particularly relevant for applications that:
- Parse the
errors[x].detailsfield for error handling logic - Parse the
ineligibleRates[x].ineligibilityReasons[x].messagefield (GetRatesV2) - Reference error identifiers in the details field for troubleshooting (e.g.,
D-505,A-306) - Display error messages to end users
What action is required?
Recommended:
- Review the updated error messages in the details field for improved troubleshooting context.
- The error identifiers are useful for debugging and support ticket correlation.
- If you previously referenced old identifiers (e.g., S-505, A-200), note the prefix corrections in the table below.
- A future release will introduce stable, descriptive codes in the code field for programmatic use.
Not Required Immediately:
- This update is backward compatible at the schema level. The
errorsarray structure (code,message,details) remains unchanged. Only the content of thedetailsfield is enhanced.
Error Code Reference — GetRatesV2 API
The following error codes apply to the GetRatesV2 API (POST /shipping/v2/shipments/rates)
Important: In addition to standard HTTP error responses (400, 403, 500), the GetRatesV2 API also surfaces certain scenarios as HTTP 200 with ineligible rates. These are returned in the
ineligibleRates[x].ineligibilityReasonsarray within a successful response, indicating why a specific service/rate is not available.
Response Structure — Error (400/403/500)
{
"errors": [{
"code": "InvalidInput",
"message": "Invalid input.",
"details": "Package dimensions exceed the allowable limits. Please refer to API documentation for allowable limits. (D-400)"
}]
}
Response Structure — Ineligible Rate (200)
{
"payload": {
"rates": [...],
"ineligibleRates": [{
"serviceId": "SWA-UK-PRIME-PREM",
"serviceName": "Amazon Shipping One Day",
"carrierId": "AMZN_UK",
"carrierName": "Amazon Shipping",
"ineligibilityReasons": [{
"code": "NoSlotsFound",
"message": "No pickup slots available. Please adjust pickup time. (S-503)"
}]
}]
}
}
Complete Error Code Table
200 — Ineligibility Reasons (Ineligible Rates)
These are returned within a successful HTTP 200 response as part of the ineligibleRates array. They indicate why a specific rate/service is not available but do not prevent the API call from succeeding.
| Scenario | Identifier | ineligibilityReasons[x].code (No Change) | ineligibilityReasons[x].message | Change Type |
|---|---|---|---|---|
| Package dimensions not configured | D-400 | DIMENSIONS_NOT_CONFIGURED | Package dimensions exceed allowable limits. Please refer to API documentation for allowable limits. (D-400) | Improved |
| No pickup slots available | S-503 | NoSlotsFound | No pickup slots available. Please adjust pickup time. (S-503) | Improved |
| Delivery promise cannot be met | S-400 | NoEligiblePromiseFound | No shipping service available for these shipment attributes. Please validate inputs. (S-400) | Improved |
| No eligible service for shipment attributes | A-306 | UnableToFindAnyMethods | No shipping services available for recipient address. Please verify address or contact support. (A-306) | Improved |
| Package dimensions exceed carrier limit | D-411 | SPOT_DIMENSIONS_INVALID | Package dimensions exceed the allowed limits. Please refer to API documentation for allowable limits. (D-411) | Improved |
| No rate/price found for shipment | S-410 | SPOT_NO_PRICE_FOUND | No rate available for this shipment. Service may expand. Please retry later or use a different carrier. (S-410) | Improved |
| No coverage or VAS unavailable | S-301 | NO_COVERAGE_OR_REQUESTED_VAS_UNAVAILABLE | No coverage or requested VAS unavailable. Please remove VAS. (S-301) | Improved |
| Package weight exceeds carrier limit | D-412 | SPOT_WEIGHT_INVALID | Package weight exceeds allowed limit. Please refer to API documentation for allowable limits. (D-412) | Improved |
| Destination country not supported | A-406 | DESTINATION_COUNTRY_NOT_ALLOWED | Destination country not supported. Please check API documentation for supported countries or contact support. (A-406) | New |
| No shipping service for recipient address | A-305 | ROUTE_NOT_FOUND | No shipping services for recipient address. Please verify address or contact support. (A-305) | Improved |
| Delivery promise cannot be met (promise miss) | S-200 | MISSES_PROMISE | Cannot meet delivery promise via Amazon Shipping. Please use a different carrier for this order. (S-200) | Improved |
| Pickup date before account start date | S-502 | PICKUP_SLOT_BEFORE_START_DATE | Pickup date is before your account's start date. Please select a later pickup date or contact support. (S-502) | Improved |
400 — Shipper Input Errors
| Scenario | Identifier | Details Message | Change Type |
|---|---|---|---|
| Invalid package reference ID | D-701 | Invalid packageClientReferenceId. Please refer to API documentation. (D-701) | Improved |
| Invalid currency in request | D-702 | Invalid currency code. Please refer to API documentation for supported currency codes. (D-702) | Improved |
| Items weight exceeds package weight | D-703 | Total items weight exceeds package weight. Please refer to API documentation for allowable limits. (D-703) | Improved |
| Invalid delivery address | D-704 | Invalid shipTo address. Please verify the address fields. (D-704) | Improved |
| Ship date in the past | D-505 | Ship date is in the past. Please select a future date. (D-505) | Improved |
| Ship date too far in future | D-504 | Ship date is too far in the future. Please select a closer date. (D-504) | Improved |
| Package dimensions/weight exceed limits | D-400 | Package dimensions exceed the allowable limits. Please refer to API documentation for allowable limits. (D-400) | Improved |
| Package dimensions exceed carrier limit | D-411 | Package dimensions exceed allowed limits. Please refer to API documentation for allowable limits. (D-411) | Improved |
| Package weight exceeds carrier limit | D-412 | Package weight exceeds allowed limit. Please refer to API documentation for allowable limits. (D-412) | Improved |
| Incompatible value-added services selected | S-302 | Incompatible value-added services selected. Please cross check the VAS combinations and choose only one VAS per label. (S-302) | Improved |
| Shipment ineligible for requested VAS | S-304 | Shipment does not meet VAS eligibility criteria. Please adjust shipment attributes or remove VAS. (S-304) | Improved |
| Account not enabled for dangerous goods | S-404 | Account not onboarded for dangerous goods. Please activate DG for your shipping account or contact support. (S-404) | Improved |
| Dangerous goods not supported for destination | S-405 | Dangerous goods shipments are not supported for this destination address or postcode. (S-405) | Improved |
| Pickup address not registered | A-302 | Pickup address not registered. Please register your address or contact your account manager or support. (A-302) | Improved |
| Pickup not available at this location | A-900 | Pickup not available at this address. Register the new warehouse address or use an available pickup address. (A-900) | Improved |
| Invalid or missing HS code for destination | S-406 | Invalid HS code or no HS code provided. Please refer to API documentation. (S-406) | New |
| Invalid or missing item value | S-407 | Invalid Item value or no Item value provided. Please refer to API documentation. (S-407) | New |
| Invalid or missing item description | S-408 | Invalid Item description or no Item description provided. Please refer to API documentation. (S-408) | New |
| Shipment cannot be processed | S-700 | We apologize for the inconvenience. We are unable to process this shipment. (Code: S-700) | New |
403 — Authentication Errors
| Scenario | Identifier | Details Message | Change Type |
|---|---|---|---|
| Authentication failure | A-101 | Access denied for this account. Please contact support. (A-101) | New |
500 — Server-Side Errors
| Scenario | Identifier | Details Message | Change Type |
|---|---|---|---|
| No shipping service for recipient address (coverage) | A-305 | No shipping service for recipient address. Please verify address or contact support. (A-305) | Improved |
| Internal service error | S-900 | Internal service error. Please contact support for assistance. (S-900) | Improved |
Error Code Reference — PurchaseShipment API
The following error codes apply to the PurchaseShipment: API ( POST /shipping/v2/shipments)
The PurchaseShipment API shares the same response structure as OneClickShipment. Currently, one standardised error code applies specifically to this endpoint:
400 — Shipper Input Errors
| Scenario | Identifier | Details Message | Change Type |
|---|---|---|---|
| Expired or invalid rate ID | D-705 | Rate ID is invalid or expired. Please fetch a new rate. (D-705) | Improved |
Note: PurchaseShipment requires a valid
rateIdobtained from a prior GetRatesV2 call. If the rate has expired or is invalid, the API returns a 400 with identifier D-705.
Error Code Reference — OneClickShipment API
The following error codes apply to the OneClickShipment API (POST /shipping/v2/oneClickShipment).
Response Structure
{
"errors": [{
"code": "InvalidInput",
"message": "Invalid input.",
"details": "Package dimensions exceed the allowable limits. Please refer to API documentation for allowable limits. (D-400)"
}]
}
Complete Error Code Table
400 — Shipper Input Errors
| Scenario | Identifier | Details Message | Change Type |
|---|---|---|---|
| Invalid package reference ID | D-701 | Invalid packageClientReferenceId. Please refer to API documentation. (D-701) | Updated |
| Invalid currency in request | D-702 | Invalid currency code. Please refer to API documentation for supported currency codes. (D-702) | Updated |
| Items weight exceeds package weight | D-703 | Total items weight exceeds package weight. Please refer to API documentation for allowable limits. (D-703) | Updated |
| Invalid delivery address | D-704 | Invalid shipTo address. Please verify the address fields. (D-704) | Updated |
| Ship date in the past | D-505 | Ship date is in the past. Please select a future date. (D-505) | Updated |
| Ship date too far in future | D-504 | Ship date is too far in the future. Please select a closer date. (D-504) | Updated |
| Package dimensions/weight exceed limits | D-400 | Package dimensions exceed the allowable limits. Please refer to API documentation for allowable limits. (D-400) | Updated |
| Package dimensions exceed carrier limit | D-411 | Package dimensions exceed allowed limits. Please refer to API documentation for allowable limits. (D-411) | Updated |
| Package weight exceeds carrier limit | D-412 | Package weight exceeds allowed limit. Please refer to API documentation for allowable limits. (D-412) | Updated |
| Incompatible value-added services selected | S-302 | Incompatible value-added services selected. Please cross check the VAS combinations and choose only one VAS per label. (S-302) | Updated |
| Shipment ineligible for requested VAS | S-304 | Shipment does not meet VAS eligibility criteria. Please adjust shipment attributes or remove VAS. (S-304) | Updated |
| Account not enabled for dangerous goods | S-404 | Account not onboarded for dangerous goods. Please activate DG for your shipping account or contact support. (S-404) | Updated |
| Pickup address not registered | A-302 | Pickup address not registered. Please register your address or contact your account manager or support. (A-302) | Updated |
| Pickup not available at this location | A-900 | Pickup not available at this address. Register the new warehouse address or use an available pickup address. (A-900) | Updated |
| Invalid or missing HS code for destination | S-406 | Invalid HS code or no HS code provided. Please refer to API documentation. (S-406) | New |
| Invalid or missing item value | S-407 | Invalid Item value or no Item value provided. Please refer to API documentation. (S-407) | New |
| Invalid or missing item description | S-408 | Invalid Item description or no Item description provided. Please refer to API documentation. (S-408) | New |
403 — Authentication Errors
| Scenario | Identifier | Details Message | Change Type |
|---|---|---|---|
| Authentication failure | A-101 | Access denied for this account. Please contact support. (A-101) | New |
422 — Valid Syntax, Unprocessable
| Scenario | Identifier | Details Message | Change Type |
|---|---|---|---|
| Requested VAS not available in region | S-303 | Requested VAS not available in this region. Please remove VAS. (S-303) | Updated |
| Account not active for MFN shipments | A-104 | Account not active for MFN shipments. Please complete MFN onboarding or contact support. (A-104) | New |
| Account not active for Off-Amazon shipments | A-105 | Account not active for OFF-Amazon shipments. Please complete OFF-Amazon onboarding or contact support. (A-105) | New |
| Dangerous goods not supported for destination | S-405 | Dangerous goods shipments are not supported for this destination address or postcode. (S-405) | Updated |
| Invalid platform-to-shipper account linkage | S-600 | Invalid integrator-shipper account relationship. Please verify account setup or contact support. (S-600) | Updated |
| Application not configured for pickup scheduling | S-601 | Application not configured for pickups. Please contact support to complete setup. (S-601) | Updated |
| Pickup date before account start date | S-502 | Pickup date is before your account's start date. Please select a later pickup date or contact support. (S-502) | Updated |
| Account paused | S-501 | Account is paused. Please wait for pause period to end or contact support to resume. (S-501) | Updated |
| Account suspended | S-500 | Account is suspended. Please visit Amazon Shipping website for account status or contact support. (S-500) | Updated |
| Pickup address does not match registered address | A-301 | Pickup address does not match registered address. Please verify your pickup address or contact your account manager. (A-301) | Updated |
| Insufficient credit balance | A-303 | Insufficient credit balance. Please add funds to your account or contact your account manager or support. (A-303) | Updated |
| Account not authorized for shipment type | A-500 | Account not authorized for this shipment type. Please contact support to update permissions. (A-500) | Updated |
| Account billing setup incompatible | A-600 | Account not authorized for credit-based invoicing. Please review payment preferences or contact support. (A-600) | Updated |
| Account not active or not fully onboarded | A-700 | Account not active or not fully onboarded. Please check account status or contact support. (A-700) | Updated |
| Account offboarded | A-106 | Account has been offboarded. Please re-onboard or contact support to restore access. (A-106) | New |
| Pickup address not registered for this account | A-304 | Pickup address not registered with us. Please register your address or contact your account manager or support. (A-304) | New |
| Origin postal code outside service area | A-800 | Origin postal code outside pickup service area. Please use a supported location or contact support. (A-800) | Updated |
| No rate available for shipment | S-410 | No rate available for this shipment. Service may expand. Please retry later or use a different carrier. (S-410) | Updated |
| No pickup slots available | S-503 | No pickup slots available. Please adjust pickup time. (S-503) | Updated |
| Delivery promise cannot be met | S-200 | Cannot meet delivery promise via Amazon Shipping. Please use a different carrier for this order. (S-200) | Updated |
| No eligible service for shipment attributes | S-400 | No shipping service available for these shipment attributes. Please validate inputs. (S-400) | Updated |
| No shipping service for recipient address | A-306 | No shipping services available for recipient address. Please verify address or contact support. (A-306) | Updated |
| No coverage or VAS unavailable | S-301 | No coverage or requested VAS unavailable. Please remove VAS. (S-301) | Updated |
| Destination country not supported | A-406 | Destination country not supported. Please check API documentation for supported countries or contact support. (A-406) | New |
| Shipment cannot be processed | S-700 | We apologize for the inconvenience. We are unable to process this shipment. (Code: S-700) | New |
500 — Server-Side Errors
| Scenario | Identifier | Details Message | Change Type |
|---|---|---|---|
| No shipping service for recipient address (coverage) | A-305 | No shipping service for recipient address. Please verify address or contact support. (A-305) | Updated |
| Internal service error | S-900 | Internal service error. Please contact support for assistance. (S-900) | Updated |
Note: These identifiers are provided for reference and troubleshooting. Identifier prefixes and numbering may evolve in future phases as the error framework matures. A future release will introduce stable, descriptive text-based codes in the code field for programmatic use.
OneClickShipment — Multi-Error Response Behaviour
The OneClickShipment API evaluates multiple eligibility conditions simultaneously. When a single request triggers errors that would individually map to different HTTP status codes (400, 422, 500), only one HTTP status code can be returned per response. The following priority determines which status code is surfaced:
HTTP Status Priority (Highest → Lowest)
| Priority | HTTP Status | Rationale |
|---|---|---|
| 1 (highest) | 400 | Shipper input error — fixable by the developer immediately |
| 2 | 422 | Account/config issue — requires shipper action or support ticket |
| 3 | 500 | Server-side error — requires Amazon-side investigation |
Multi-Error Scenarios
| Error Combination | HTTP Status Returned | Developer Guidance |
|---|---|---|
| 400 + 422 | 400 | Fix input errors first. Once resolved, 422 issues (if still present) will surface on retry. |
| 400 + 422 + 500 | 400 | Fix input errors first. Remaining issues will surface sequentially on retry. |
| 400 + 500 | 400 | Fix input errors first. If 500 persists on retry, contact support. |
| 422 + 500 | 422 | Resolve account/config issues first. If 500 persists on retry, contact support. |
| 500 only | 500 | Server-side error. Spectrum overrides to generic "Internal Server Exception". Retry or contact support. |
Response Structure — Multi-Error
When multiple errors are present, the errors array contains all applicable error codes regardless of their individual HTTP status category. The HTTP status of the response reflects the highest-priority error per the table above.
{
"errors": [
{
"code": "InvalidInput",
"message": "Invalid input.",
"details": "Ship date is in the past. Please select a future date. (D-505)"
},
{
"code": "InvalidInput",
"message": "Invalid input.",
"details": "No pickup slots available. Please adjust pickup time. (S-503)"
},
{
"code": "InvalidInput",
"message": "Invalid input.",
"details": "Account is paused. Please wait for pause period to end or contact support to resume. (S-501)"
}
]
}
In this example: D-505 is a 400-level error, S-503 and S-501 are 422-level errors. The response HTTP status is 400 (highest priority). The developer should fix the ship date first; on retry, the 422 issues will surface if still applicable.
Key Takeaway
Developers should fix errors in priority order: input errors (400) first, then account/config issues (422). Server errors (500) that persist after fixing client-side issues should be raised to support. This approach ensures coherent resolution — fix your side first, then escalate what requires Amazon-side action.
Note: This multi-error behaviour is analogous to GetRatesV2's
ineligibleRatesarray, where multiple ineligibility reasons are returned in a single 200 response. For OneClick, instead of surfacing them as 200 ineligibility reasons, they are returned as errors within theerrorsarray under a single prioritised HTTP status code.
Error Identifier Prefix Corrections
The following error scenarios have had their identifier prefix corrected to align with the error family classification:
| Scenario | Old Identifier | New Identifier | Reason |
|---|---|---|---|
| Ship date in the past | S-505 | D-505 | Ship date is input data, not a service issue |
| Ship date too far in future | S-504 | D-504 | Ship date is input data, not a service issue |
| Package dimensions/weight exceed limits | S-400 | D-400 | Package dimensions/weight are input data |
| Package dimensions exceed carrier limit | S-411 | D-411 | Package dimensions are input data |
| Package weight exceeds carrier limit | S-412 | D-412 | Package weight is input data |
| Delivery promise cannot be met | A-200 | S-200 | Delivery promise miss is a service/network limitation |
| No eligible service for shipment attributes | A-400 | S-400 | Service availability constraint, not address |
HTTP Status Code Logic
| HTTP Code | Meaning | Action |
|---|---|---|
| 200 | Success with ineligible rates | Parse ineligibleRates array for service-specific reasons |
| 400 | Shipper input error | Fix request data and retry |
| 403 | Authentication/authorization failure | Verify credentials and headers |
| 422 | Valid syntax but unprocessable | Requires account/config action or indicates a service-side constraint |
| 500 | Server-side error | Retry or contact support |
Example: Before and After
Before (Generic):
{
"errors": [{
"code": "InvalidInput",
"message": "Invalid input.",
"details": "No offerings found for the given request. Either it is out of coverage or dimensions or weight are not supported"
}]
}
After (Specific):
{
"errors": [{
"code": "InvalidInput",
"message": "Invalid input.",
"details": "No pickup slots available. Please adjust pickup time. (S-503)"
}]
}
After (Specific — GetRatesV2 Ineligible Rate):
{
"payload": {
"rates": [...],
"ineligibleRates": [{
"serviceId": "SWA-UK-PRIME-PREM",
"serviceName": "Amazon Shipping One Day",
"carrierId": "AMZN_UK",
"carrierName": "Amazon Shipping",
"ineligibilityReasons": [{
"code": "NoSlotsFound",
"message": "No pickup slots available. Please adjust pickup time. (S-503)"
}]
}]
}
}
FAQs
-
Will my existing integration break?
No. Theerrorsarray structure (code,message,details) remains unchanged. Thecodeandmessagefields retain their current values. Only the content of thedetailsfield (andineligibilityReasons[x].messagefor GetRatesV2) is enhanced with standardised, actionable messages and error identifiers. -
What is the difference between "Updated" and "New" error codes?
- Updated: These error codes already exist in the API. Their messages have been rewritten to be more specific, actionable, and standardised. A unique error identifier has been added or corrected.
- New: These error codes were not previously surfaced to API consumers. They were either returned as generic
S-900/InvalidInputor not exposed at all. They now have distinct, specific messages.
-
I match on specific strings in the
detailsfield. Will this break?
Yes — if you perform exact string matching on thedetailsfield, your logic will need to be updated. The error identifiers appended to messages (e.g., D-701, S-503) are provided for reference and troubleshooting purposes. A future release will introduce stable, descriptive text-based codes in the code field, which will be the recommended field for programmatic error handling. -
Are these error codes the same across GetRatesV2 and OneClickShipment?
The error identifiers are the same for the same scenario. However, the response path differs: GetRatesV2 returns service-eligibility issues as HTTP 200 ineligible rates, while OneClickShipment returns them as HTTP 422 errors. Input validation errors (400) and auth errors (403) behave identically across both APIs. -
What does the
codefield contain now?
Thecodefield (e.g.,"InvalidInput","Unauthorized") remains unchanged in this release. It continues to reflect the HTTP status category. The specific, actionable error information is in thedetailsfield. A future release will introduce descriptive text-based codes in thecodefield. -
Will more error codes be added in future?
Yes. This is Phase 1 of a multi-phase initiative. Future phases will expand coverage, improve downstream error propagation, and introduce enhanced logging. -
How should I handle the 422 status code?
A422response means your request syntax is valid but cannot be processed — typically due to account configuration, onboarding status, or service constraints. These are not retryable by simply resending the same request. Review thedetailsmessage for the specific action required. Note: 422 applies to OneClickShipment only; GetRatesV2 does not return 422. -
How do I parse ineligibility reasons in GetRatesV2?
Check theineligibleRatesarray in the response payload. Each entry contains anineligibilityReasonsarray with acode(enum value) andmessage(standardised text with identifier). The identifiers are useful for troubleshooting.
