improved

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.

APITotal Error CodesUpdatedNewHTTP Status Codes Used
GetRatesV235305200 (ineligibility), 400, 403, 500
OneClickShipment463610400, 403, 422*, 500
PurchaseShipment110400

Key difference: GetRatesV2 also surfaces service-eligibility issues (no slots, promise miss, no coverage, etc.) as HTTP 200 responses with ineligible rates in the ineligibleRates array 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].ineligibilityReasons array
  • Each ineligibility reason now includes the same standardised message and identifier in the message field
  • The code field contains the ineligibilityReasonCode enum 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].details field for error handling logic
  • Parse the ineligibleRates[x].ineligibilityReasons[x].message field (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 errors array structure (code, message, details) remains unchanged. Only the content of the details field 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].ineligibilityReasons array 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.

ScenarioIdentifierineligibilityReasons[x].code (No Change)ineligibilityReasons[x].messageChange Type
Package dimensions not configuredD-400DIMENSIONS_NOT_CONFIGUREDPackage dimensions exceed allowable limits. Please refer to API documentation for allowable limits. (D-400)Improved
No pickup slots availableS-503NoSlotsFoundNo pickup slots available. Please adjust pickup time. (S-503)Improved
Delivery promise cannot be metS-400NoEligiblePromiseFoundNo shipping service available for these shipment attributes. Please validate inputs. (S-400)Improved
No eligible service for shipment attributesA-306UnableToFindAnyMethodsNo shipping services available for recipient address. Please verify address or contact support. (A-306)Improved
Package dimensions exceed carrier limitD-411SPOT_DIMENSIONS_INVALIDPackage dimensions exceed the allowed limits. Please refer to API documentation for allowable limits. (D-411)Improved
No rate/price found for shipmentS-410SPOT_NO_PRICE_FOUNDNo rate available for this shipment. Service may expand. Please retry later or use a different carrier. (S-410)Improved
No coverage or VAS unavailableS-301NO_COVERAGE_OR_REQUESTED_VAS_UNAVAILABLENo coverage or requested VAS unavailable. Please remove VAS. (S-301)Improved
Package weight exceeds carrier limitD-412SPOT_WEIGHT_INVALIDPackage weight exceeds allowed limit. Please refer to API documentation for allowable limits. (D-412)Improved
Destination country not supportedA-406DESTINATION_COUNTRY_NOT_ALLOWEDDestination country not supported. Please check API documentation for supported countries or contact support. (A-406)New
No shipping service for recipient addressA-305ROUTE_NOT_FOUNDNo shipping services for recipient address. Please verify address or contact support. (A-305)Improved
Delivery promise cannot be met (promise miss)S-200MISSES_PROMISECannot meet delivery promise via Amazon Shipping. Please use a different carrier for this order. (S-200)Improved
Pickup date before account start dateS-502PICKUP_SLOT_BEFORE_START_DATEPickup date is before your account's start date. Please select a later pickup date or contact support. (S-502)Improved

400 — Shipper Input Errors

ScenarioIdentifierDetails MessageChange Type
Invalid package reference IDD-701Invalid packageClientReferenceId. Please refer to API documentation. (D-701)Improved
Invalid currency in requestD-702Invalid currency code. Please refer to API documentation for supported currency codes. (D-702)Improved
Items weight exceeds package weightD-703Total items weight exceeds package weight. Please refer to API documentation for allowable limits. (D-703)Improved
Invalid delivery addressD-704Invalid shipTo address. Please verify the address fields. (D-704)Improved
Ship date in the pastD-505Ship date is in the past. Please select a future date. (D-505)Improved
Ship date too far in futureD-504Ship date is too far in the future. Please select a closer date. (D-504)Improved
Package dimensions/weight exceed limitsD-400Package dimensions exceed the allowable limits. Please refer to API documentation for allowable limits. (D-400)Improved
Package dimensions exceed carrier limitD-411Package dimensions exceed allowed limits. Please refer to API documentation for allowable limits. (D-411)Improved
Package weight exceeds carrier limitD-412Package weight exceeds allowed limit. Please refer to API documentation for allowable limits. (D-412)Improved
Incompatible value-added services selectedS-302Incompatible value-added services selected. Please cross check the VAS combinations and choose only one VAS per label. (S-302)Improved
Shipment ineligible for requested VASS-304Shipment does not meet VAS eligibility criteria. Please adjust shipment attributes or remove VAS. (S-304)Improved
Account not enabled for dangerous goodsS-404Account not onboarded for dangerous goods. Please activate DG for your shipping account or contact support. (S-404)Improved
Dangerous goods not supported for destinationS-405Dangerous goods shipments are not supported for this destination address or postcode. (S-405)Improved
Pickup address not registeredA-302Pickup address not registered. Please register your address or contact your account manager or support. (A-302)Improved
Pickup not available at this locationA-900Pickup 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 destinationS-406Invalid HS code or no HS code provided. Please refer to API documentation. (S-406)New
Invalid or missing item valueS-407Invalid Item value or no Item value provided. Please refer to API documentation. (S-407)New
Invalid or missing item descriptionS-408Invalid Item description or no Item description provided. Please refer to API documentation. (S-408)New
Shipment cannot be processedS-700We apologize for the inconvenience. We are unable to process this shipment. (Code: S-700)New

403 — Authentication Errors

ScenarioIdentifierDetails MessageChange Type
Authentication failureA-101Access denied for this account. Please contact support. (A-101)New

500 — Server-Side Errors

ScenarioIdentifierDetails MessageChange Type
No shipping service for recipient address (coverage)A-305No shipping service for recipient address. Please verify address or contact support. (A-305)Improved
Internal service errorS-900Internal 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

ScenarioIdentifierDetails MessageChange Type
Expired or invalid rate IDD-705Rate ID is invalid or expired. Please fetch a new rate. (D-705)Improved

Note: PurchaseShipment requires a valid rateId obtained 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

ScenarioIdentifierDetails MessageChange Type
Invalid package reference IDD-701Invalid packageClientReferenceId. Please refer to API documentation. (D-701)Updated
Invalid currency in requestD-702Invalid currency code. Please refer to API documentation for supported currency codes. (D-702)Updated
Items weight exceeds package weightD-703Total items weight exceeds package weight. Please refer to API documentation for allowable limits. (D-703)Updated
Invalid delivery addressD-704Invalid shipTo address. Please verify the address fields. (D-704)Updated
Ship date in the pastD-505Ship date is in the past. Please select a future date. (D-505)Updated
Ship date too far in futureD-504Ship date is too far in the future. Please select a closer date. (D-504)Updated
Package dimensions/weight exceed limitsD-400Package dimensions exceed the allowable limits. Please refer to API documentation for allowable limits. (D-400)Updated
Package dimensions exceed carrier limitD-411Package dimensions exceed allowed limits. Please refer to API documentation for allowable limits. (D-411)Updated
Package weight exceeds carrier limitD-412Package weight exceeds allowed limit. Please refer to API documentation for allowable limits. (D-412)Updated
Incompatible value-added services selectedS-302Incompatible value-added services selected. Please cross check the VAS combinations and choose only one VAS per label. (S-302)Updated
Shipment ineligible for requested VASS-304Shipment does not meet VAS eligibility criteria. Please adjust shipment attributes or remove VAS. (S-304)Updated
Account not enabled for dangerous goodsS-404Account not onboarded for dangerous goods. Please activate DG for your shipping account or contact support. (S-404)Updated
Pickup address not registeredA-302Pickup address not registered. Please register your address or contact your account manager or support. (A-302)Updated
Pickup not available at this locationA-900Pickup 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 destinationS-406Invalid HS code or no HS code provided. Please refer to API documentation. (S-406)New
Invalid or missing item valueS-407Invalid Item value or no Item value provided. Please refer to API documentation. (S-407)New
Invalid or missing item descriptionS-408Invalid Item description or no Item description provided. Please refer to API documentation. (S-408)New

403 — Authentication Errors

ScenarioIdentifierDetails MessageChange Type
Authentication failureA-101Access denied for this account. Please contact support. (A-101)New

422 — Valid Syntax, Unprocessable

ScenarioIdentifierDetails MessageChange Type
Requested VAS not available in regionS-303Requested VAS not available in this region. Please remove VAS. (S-303)Updated
Account not active for MFN shipmentsA-104Account not active for MFN shipments. Please complete MFN onboarding or contact support. (A-104)New
Account not active for Off-Amazon shipmentsA-105Account not active for OFF-Amazon shipments. Please complete OFF-Amazon onboarding or contact support. (A-105)New
Dangerous goods not supported for destinationS-405Dangerous goods shipments are not supported for this destination address or postcode. (S-405)Updated
Invalid platform-to-shipper account linkageS-600Invalid integrator-shipper account relationship. Please verify account setup or contact support. (S-600)Updated
Application not configured for pickup schedulingS-601Application not configured for pickups. Please contact support to complete setup. (S-601)Updated
Pickup date before account start dateS-502Pickup date is before your account's start date. Please select a later pickup date or contact support. (S-502)Updated
Account pausedS-501Account is paused. Please wait for pause period to end or contact support to resume. (S-501)Updated
Account suspendedS-500Account is suspended. Please visit Amazon Shipping website for account status or contact support. (S-500)Updated
Pickup address does not match registered addressA-301Pickup address does not match registered address. Please verify your pickup address or contact your account manager. (A-301)Updated
Insufficient credit balanceA-303Insufficient credit balance. Please add funds to your account or contact your account manager or support. (A-303)Updated
Account not authorized for shipment typeA-500Account not authorized for this shipment type. Please contact support to update permissions. (A-500)Updated
Account billing setup incompatibleA-600Account not authorized for credit-based invoicing. Please review payment preferences or contact support. (A-600)Updated
Account not active or not fully onboardedA-700Account not active or not fully onboarded. Please check account status or contact support. (A-700)Updated
Account offboardedA-106Account has been offboarded. Please re-onboard or contact support to restore access. (A-106)New
Pickup address not registered for this accountA-304Pickup address not registered with us. Please register your address or contact your account manager or support. (A-304)New
Origin postal code outside service areaA-800Origin postal code outside pickup service area. Please use a supported location or contact support. (A-800)Updated
No rate available for shipmentS-410No rate available for this shipment. Service may expand. Please retry later or use a different carrier. (S-410)Updated
No pickup slots availableS-503No pickup slots available. Please adjust pickup time. (S-503)Updated
Delivery promise cannot be metS-200Cannot meet delivery promise via Amazon Shipping. Please use a different carrier for this order. (S-200)Updated
No eligible service for shipment attributesS-400No shipping service available for these shipment attributes. Please validate inputs. (S-400)Updated
No shipping service for recipient addressA-306No shipping services available for recipient address. Please verify address or contact support. (A-306)Updated
No coverage or VAS unavailableS-301No coverage or requested VAS unavailable. Please remove VAS. (S-301)Updated
Destination country not supportedA-406Destination country not supported. Please check API documentation for supported countries or contact support. (A-406)New
Shipment cannot be processedS-700We apologize for the inconvenience. We are unable to process this shipment. (Code: S-700)New

500 — Server-Side Errors

ScenarioIdentifierDetails MessageChange Type
No shipping service for recipient address (coverage)A-305No shipping service for recipient address. Please verify address or contact support. (A-305)Updated
Internal service errorS-900Internal 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)

PriorityHTTP StatusRationale
1 (highest)400Shipper input error — fixable by the developer immediately
2422Account/config issue — requires shipper action or support ticket
3500Server-side error — requires Amazon-side investigation

Multi-Error Scenarios

Error CombinationHTTP Status ReturnedDeveloper Guidance
400 + 422400Fix input errors first. Once resolved, 422 issues (if still present) will surface on retry.
400 + 422 + 500400Fix input errors first. Remaining issues will surface sequentially on retry.
400 + 500400Fix input errors first. If 500 persists on retry, contact support.
422 + 500422Resolve account/config issues first. If 500 persists on retry, contact support.
500 only500Server-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 ineligibleRates array, 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 the errors array 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:

ScenarioOld IdentifierNew IdentifierReason
Ship date in the pastS-505D-505Ship date is input data, not a service issue
Ship date too far in futureS-504D-504Ship date is input data, not a service issue
Package dimensions/weight exceed limitsS-400D-400Package dimensions/weight are input data
Package dimensions exceed carrier limitS-411D-411Package dimensions are input data
Package weight exceeds carrier limitS-412D-412Package weight is input data
Delivery promise cannot be metA-200S-200Delivery promise miss is a service/network limitation
No eligible service for shipment attributesA-400S-400Service availability constraint, not address

HTTP Status Code Logic

HTTP CodeMeaningAction
200Success with ineligible ratesParse ineligibleRates array for service-specific reasons
400Shipper input errorFix request data and retry
403Authentication/authorization failureVerify credentials and headers
422Valid syntax but unprocessableRequires account/config action or indicates a service-side constraint
500Server-side errorRetry 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

  1. Will my existing integration break?
    No. The errors array structure (code, message, details) remains unchanged. The code and message fields retain their current values. Only the content of the details field (and ineligibilityReasons[x].message for GetRatesV2) is enhanced with standardised, actionable messages and error identifiers.

  2. 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 / InvalidInput or not exposed at all. They now have distinct, specific messages.
  3. I match on specific strings in the details field. Will this break?
    Yes — if you perform exact string matching on the details field, 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.

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

  5. What does the code field contain now?
    The code field (e.g., "InvalidInput", "Unauthorized") remains unchanged in this release. It continues to reflect the HTTP status category. The specific, actionable error information is in the details field. A future release will introduce descriptive text-based codes in the code field.

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

  7. How should I handle the 422 status code?
    A 422 response 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 the details message for the specific action required. Note: 422 applies to OneClickShipment only; GetRatesV2 does not return 422.

  8. How do I parse ineligibility reasons in GetRatesV2?
    Check the ineligibleRates array in the response payload. Each entry contains an ineligibilityReasons array with a code (enum value) and message (standardised text with identifier). The identifiers are useful for troubleshooting.