Place a Fulfillment Order

Learn how to use the Fulfillment Outbound API.

Step 1. Get batch delivery offers

Call getOffers to retrieve real-time delivery estimates for one or more products. getOffers accepts an items array so you can query multiple SKUs in a single request.

Use destination.deliveryAddress with countryCode and postalCode for postal-code resolution, or destination.ipAddress for approximate location-based resolution.

📘

Note

getOffers is optimized for pre-checkout delivery messaging (for example, "Arrives by Saturday"). To validate a full order across multiple line items and retrieve fulfillment fees, use getOrderPreview instead.

The response contains per-item results in the offers array, and per-item constraints in the constraints array when a service tier is unavailable. If offers is empty for an item, the SKU is not fulfillable for any requested tier. Use expiryTime to refresh stale estimates at checkout.

Step 2. Preview delivery options

Call getOrderPreview to retrieve available ship speeds, estimated delivery windows, and fulfillment fees. Service configuration is specified inside fulfillmentConfiguration. Omit fulfillmentConfiguration.serviceLevel.serviceTiers to return previews for all available tiers in a single call.

The response contains plannedShipments, each with an offers array. Each offer includes a deliveryInterval, a new shipInterval (estimated window when the shipment leaves the fulfillment center), and estimatedPrice. If a SKU is out of stock, a constraints entry describes the issue.

Step 3. Create a Fulfillment Order

Call createOrder to submit the fulfillment request. All configurations are nested under fulfillmentConfiguration.

Set fulfillmentConfiguration.action to SHIP to release immediately, or HOLD to reserve without shipping. Set fulfillmentConfiguration.policy to FILL_ALL_AVAILABLE to ship available inventory, FILL_OR_KILL to cancel the entire order if any item is unavailable, or FILL_ALL to wait until all items are in stock.

⚠️ Important: orderId must be unique within your seller account and cannot exceed 40 characters. Submitting a duplicate orderId results in an OrderAlreadyExists error.

Services that include packaging options (packagingOption), overbox preferences (overbox), and packing slips must be specified at order creation time in fulfillmentConfiguration.services. They cannot be modified after the order is submitted.

Step 4. Validate the order

Call getOrder to validate that fulfillmentConfiguration.action is SHIP and status is PROCESSING.

A successful response returns the full order. Add ?shipments=EXCLUDE for a lighter response when only order-level status is needed. The shipments array is empty at this stage and populates once Amazon creates a shipment.


Did this page help you?