---
updatedAt: 2026-10-30T17:15:50.000Z
agentTools:
  siteIndex: https://developer-docs.amazon/llms.txt
  projectIndex: https://developer-docs.amazon/sp-api/llms.txt
---

# Fulfill seller-fulfilled Prime and non-Prime orders

Learn how to use the Merchant Fulfillment API to fulfill seller-fulfilled Prime and non-Prime orders.

Learn how to use the Merchant Fulfillment API to fulfill seller-fulfilled Prime and non-Prime orders. This workflow is meant to supplement an order fulfillment system. The order fulfillment system retrieves scheduled order reports that use the Reports service. Incoming orders that are not fulfilled using the workflow described here must be fulfilled by the seller using a different method.

## Prerequisites

To complete this tutorial, you need:

* Authorization from the selling partner for whom you are making calls. For more information, refer to [Authorizing Selling Partner API applications](https://developer-docs.amazon.com/sp-api/docs/authorizing-selling-partner-api-applications).
* The [Direct-to-Consumer Shipping (Restricted)](https://developer-docs.amazon.com/sp-api/docs/roles-in-the-selling-partner-api#direct-to-consumer-shipping-restricted) role assigned to your developer profile.
* The [Direct-to-Consumer Shipping (Restricted)](https://developer-docs.amazon.com/sp-api/docs/roles-in-the-selling-partner-api#direct-to-consumer-shipping-restricted) role selected in the app registration page for your application.
* Sellers who use an application that you develop based on this workflow must add the following columns to their order reports. To add this data, sellers can use the optional columns area of the <span class="notranslate">**Add or remove order report columns**</span> in Seller Central.
  * Incoming XML order reports must contain `IsPrime` and `LatestShipDate`.
  * Incoming flat file order reports must contain `is-prime` and `latest-ship-date`.

## Step 1. Identify orders and retrieve information

Identify new orders by monitoring [`ORDER_CHANGE`](https://developer-docs.amazon.com/sp-api/docs/notification-type-values#order_change) notifications. To subscribe to this notification, refer to [Tutorial: Subscribe to the ORDER\_CHANGE Notification](https://developer-docs.amazon.com/sp-api/docs/tutorial-subscribe-to-order-change-notification). Alternatively, you can identify new orders from incoming order reports.

Retrieve the order information through the Orders API. Prime orders have the `IsPrime` attribute marked as `true`. Make sure that the `FulfillmentChannels` attribute is `MFN`.

Do not use the `FulfillmentServiceLevel` attribute or the `ship-service-level` column in order reports to identify Prime orders.

**Code Sample:**

[block:tutorial-tile]
{
  "backgroundColor": "#232f3e",
  "emoji": "🐕",
  "id": "64da85507e9e01003fb6c1a8",
  "link": "https://developer-docs.amazon.com/sp-api/recipes/fetch-order-information",
  "slug": "fetch-order-information",
  "title": "Fetch order information"
}
[/block]

## Step 2. Determine the latest ship date for the Prime orders

Use the `LatestShipDate` attribute or the `latest-ship-date` column from a flat file order report to determine the date by which the Prime orders need to be shipped.

## Step 3. Check inventory and validate order

Check the inventory number and make sure that the received order is ready for fulfillment.

**Code Sample:**

[block:tutorial-tile]
{
  "backgroundColor": "#232f3e",
  "emoji": "🗃️",
  "id": "64da85507e9e01003fb6c1a6",
  "link": "https://developer-docs.amazon.com/sp-api/recipes/check-inventory-data",
  "slug": "check-inventory-data",
  "title": "Check inventory data"
}
[/block]

## Step 4. Get shipping service offers

Call the [`getEligibleShipmentServices`](https://developer-docs.amazon.com/sp-api/reference/geteligibleshipmentservices) operation to get the shipping service offers for the orders identified in [Step 1](https://developer-docs.amazon.com/sp-api/docs/fulfill-orders#step-1-identify-orders-and-retrieve-information), and then select one that matches your priorities (for example, the least expensive or the fastest).

> 📘 Dos and Don'ts when fulfilling seller-fulfilled Prime and non-Prime orders
>
> * Do use the `LatestShipDate` attribute from the Orders API or the `latest-ship-date` value from the order report for the `ShipDate` parameter.
> * Don't specify the `MustArriveByDate` parameter, because this parameter limits the number of shipping service offers that are returned.
> * Do save the `ShippingServiceId` value from each shipping service offer that is returned. You use this value for subsequent calls to the [`createShipment`](https://developer-docs.amazon.com/sp-api/reference/createshipment) operation when you create shipments for specific shipping service offers.
> * Do check the included and excluded `Benefits` before you select a shipping service offer.

**Code Samples:**

[block:tutorial-tile]
{
  "backgroundColor": "#232f3e",
  "emoji": "✅",
  "id": "64dac0a1e94e5d00359ad9d5",
  "link": "https://developer-docs.amazon.com/sp-api/recipes/fetch-eligible-shipment-services",
  "slug": "fetch-eligible-shipment-services",
  "title": "Fetch eligible shipment services"
}
[/block]

[block:tutorial-tile]
{
  "backgroundColor": "#232f3e",
  "emoji": "🚢",
  "id": "64da85507e9e01003fb6c1a5",
  "link": "https://developer-docs.amazon.com/sp-api/recipes/get-the-preferred-shipping-service",
  "slug": "get-the-preferred-shipping-service",
  "title": "Get the preferred shipping service"
}
[/block]

## Step 5. (Optional) Declare dangerous goods

If your order contains dangerous goods, they must be declared so they can be handled properly. Dangerous goods attributes are collected on each item. As a shipper, you must provide these attributes. Amazon does not provide a way to find these attributes for your item.

> 📘 Note
>
> Some carriers have additional requirements for shipping dangerous goods. Check with your carrier to ensure that your shipments meet their requirements.

### Request

The following example is a request for Amazon Shipping that includes dangerous goods attributes. For more information on each attribute, refer to the [Merchant Fulfillment API v0 reference](https://developer-docs.amazon.com/sp-api/reference/merchant-fulfillment-v0).

### Request example

```json
{
    "ShipmentRequestDetails": {
        "AmazonOrderId": "903-3489051-5871062",
        "ItemList": [{
            "OrderItemId": "6220427528165",
            "Quantity": 1,
            "IsHazmat": true,
            "LiquidVolume": {
                "Unit": "C",
                "Value": 3
            },
            "DangerousGoodsDetails": {
                "UnitedNationsRegulatoryId": "UN1090",
                "TransportationRegulatoryClass": "3",
                "PackingGroup": "III",
                "PackingInstruction": "PI965_SECTION_IA"
            }
        }],
        "ShipFromAddress": {
            "Name": "John Doe",
            "AddressLine1": "300 Turnbull Ave",
            "Email": "jdoeasdfllkj@yahoo.com",
            "City": "Detroit",
            "StateOrProvinceCode": "MI",
            "PostalCode": "48123",
            "CountryCode": "US",
            "Phone": "7132341234"
        },
        "PackageDimensions": {
            "Length": 10.25,
            "Width": 10.25,
            "Height": 10.25,
            "Unit": "inches"
        },
        "Weight": {
            "Value": 10.25,
            "Unit": "oz"
        },
        "ShippingServiceOptions": {
            "DeliveryExperience": "DeliveryConfirmationWithoutSignature",
            "CarrierWillPickUp": false,
            "CarrierWillPickUpOption": "NoPreference"
        }
    }
}
```

## Step 5a. (Conditional) Provide EU customs product identifiers

> 📘 EU customs requirement
>
> Starting **November 1, 2026**, EU customs requires product identifiers for business-to-consumer (B2C) goods shipped into the EU from outside the EU. The UK is considered non-EU for this requirement.

Check the `RequiresAdditionalSellerInputs` attribute on the shipping service offer you selected in [Step 4](https://developer-docs.amazon.com/sp-api/docs/fulfill-orders#step-4-get-shipping-service-offers). For shipments to the EU from outside the EU, this is commonly `true`, and Amazon requires item-level product identifiers, such as the manufacturer's part number, model number, or a standardized code like EAN, GTIN, UPC, ISBN, or ISSN.

If `RequiresAdditionalSellerInputs` is `true`, call [`getAdditionalSellerInputs`](https://developer-docs.amazon.com/sp-api/reference/getadditionalsellerinputs) to determine which identifiers are required, look up the values from your catalog, listing attributes, or seller or supplier systems, and include them in the `ItemLevelSellerInputsList` for the corresponding item when you call [`createShipment`](https://developer-docs.amazon.com/sp-api/reference/createshipment) in [Step 6](#step-6-create-a-shipment).

For the full workflow, request and response examples, and guidance on sourcing product identifier values, refer to [Include additional seller input data](https://developer-docs.amazon.com/sp-api/docs/include-seller-input-data#example-eu-customs-product-identifiers-for-cross-border-shipments).

## Step 6. Create a shipment

> 📘 Note
>
> This is a restricted operation and requires a Restricted Data Token (RDT) for authorization. Some operations require restrictions because they contain customer PII data. These operations require passing an additional security review. For more information on RDT, refer to the [Tokens API ](https://developer-docs.amazon.com/sp-api/docs/tokens-api)guide.

After you choose the shipment service that best matches your use case, call the [`createShipment`](https://developer-docs.amazon.com/sp-api/reference/createshipment) operation for one of the shipping service offers that was returned in the previous step.

Use the following parameter values:

* `ShipmentRequestDetails`: Use the same values that you included in your [`getEligibleShipmentServices`](https://developer-docs.amazon.com/sp-api/reference/geteligibleshipmentservices) call in [Step 4](https://developer-docs.amazon.com/sp-api/docs/fulfill-orders#step-4-get-shipping-service-offers).

> 🚧 Important
>
> Make sure you include the dangerous goods attributes for your item (refer to [Step 5](https://developer-docs.amazon.com/sp-api/docs/fulfill-orders#step-5-optional-declare-dangerous-goods)). You must declare dangerous goods so that they can be properly handled.
>
> If your shipment ships from outside the EU to an EU address, make sure you include the required product identifiers for each item (refer to [Step 5a](#step-5a-conditional-provide-eu-customs-product-identifiers)). `createShipment` fails with an `InvalidRequest` error if a required identifier is missing.

* `ShippingServiceId`: Use the value associated with this shipping service offer.

The [`createShipment`](https://developer-docs.amazon.com/sp-api/reference/createshipment) operation starts the payment process for shipping, which deducts from the seller's Amazon seller account and confirms the shipment.

> 📘 Save the item list and shipment ID
>
> Save the `ShipmentId` value returned by the [`createShipment`](https://developer-docs.amazon.com/sp-api/reference/createshipment) operation. If the seller wants to print a new label, cancel a shipment, or check shipment status at a later time, the `ShipmentId` is used to identify the shipment. Save the item list along with each shipment ID.

**Code Sample:**

[block:tutorial-tile]
{
  "backgroundColor": "#232f3e",
  "emoji": "🛥️",
  "id": "64da85507e9e01003fb6c1a7",
  "link": "https://developer-docs.amazon.com/sp-api/recipes/create-a-shipment",
  "slug": "create-a-shipment",
  "title": "Create a shipment"
}
[/block]

## Step 7. Extract and print the shipping label

Extract the shipping label from the `Label` attribute returned by the [`createShipment`](https://developer-docs.amazon.com/sp-api/reference/createshipment) operation. Print or store the shipping label.

For more information, refer to [Manipulate shipping labels](https://developer-docs.amazon.com/sp-api/docs/manipulate-shipping-labels).

**Code Samples:**

[block:tutorial-tile]
{
  "backgroundColor": "#232f3e",
  "emoji": "🏷️",
  "id": "64da85507e9e01003fb6c1a3",
  "link": "https://developer-docs.amazon.com/sp-api/recipes/decompress-and-decode-a-shipping-label",
  "slug": "decompress-and-decode-a-shipping-label",
  "title": "Decompress and decode a shipping label"
}
[/block]

[block:tutorial-tile]
{
  "backgroundColor": "#232f3e",
  "emoji": "📃",
  "id": "64da85507e9e01003fb6c1a4",
  "link": "https://developer-docs.amazon.com/sp-api/recipes/generate-a-presigned-url-for-a-shipping-label",
  "slug": "generate-a-presigned-url-for-a-shipping-label",
  "title": "Generate a presigned URL for a shipping label"
}
[/block]

## Step 8. Create shipments for the remaining orders

Repeat [step 3](https://developer-docs.amazon.com/sp-api/docs/fulfill-orders#step-3-check-inventory-and-validate-order) through [step 5a](https://developer-docs.amazon.com/sp-api/docs/fulfill-orders#step-5a-conditional-provide-eu-customs-product-identifiers) until you have created shipments for the orders identified in [step 1](https://developer-docs.amazon.com/sp-api/docs/fulfill-orders#step-1-identify-orders-and-retrieve-information).