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
getOffersis optimized for pre-checkout delivery messaging (for example, "Arrives by Saturday"). To validate a full order across multiple line items and retrieve fulfillment fees, usegetOrderPreviewinstead.
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:
orderIdmust be unique within your seller account and cannot exceed 40 characters. Submitting a duplicateorderIdresults in anOrderAlreadyExistserror.
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.
Updated about 4 hours ago

