No rates is a success response with an empty list, and a checkout without a selected rate can never be paid. A shipping method that does not apply is left out of the list, so first work through why a method does not appear: the method is inactive or has no shipping categories; a product has no shipping category and no default is set; one product's category is not covered by the method, which removes the method for the whole order; for pickup, the warehouse is not one of the method's; or the method's template failed, or ran without calling rates.create for this order. Then:
- The shipping call answered 500. With tax switched on, creating shipping also calculates tax, so a tax provider that fails or cannot be reached stops shipping from being saved. The failed result is cached for up to an hour (when a provider is down).
- The address is incomplete or in the wrong form.
countryName,addressLine1andpostcodeare required, andcountryNameis the full name,Australia, notAU. A method template that compares country codes matches nothing. - The rates expired. A rate lasts an hour (the Shipping rate Lifetime setting). A shopper who comes back later must have shipping created again.
- Zones were expected to choose the method. Shipping zones are read by nothing. A method meant for one region must check the address in its own template.
- The page reads the rates from the wrong place. Rates belong to a fulfilment: they are at
fulfillments[].shippingRatesin the response.