Hemi Connectors / Amazon MCF Technical Scope / Create Fulfillment Order

Create Fulfillment Order

Version Date Created / Updated Notes
v1.0 05.03.2025 Bogomil Pavlov First publish
v1.1 20.03.2025 Bogomil Pavlov Delivery Window changes
v1.2 13.05.2025 Bogomil Pavlov Remove Mapping for Per Unit fields, Additional Mappings and State logic
v1.3 09.06.2025 Bogomil Pavlov Additional Validation
v1.4 30.06.2025 Bogomil Pavlov Include featureConstraints

We want to have the following triggers when creating orders to MCF:

Amazon MCF Connector > Create Orders = Yes Order > Order Status = Ready For Shipping Order > Connector Order ID = ““ OR Product In Order > Connector Order ID = ““ Product In Order > Connector Exported = No Order > Connector Error = ““

If we have bundle products we want to include the products which are based on the setup of Amazon MCF Connector > Order Items for Export. The available options are:

-Only Bundle Products -Only Component Products (Default Value) -Both type of products

Please note all products which are not bundles or components are always selected

<v1.3> As additional validation we want to add if we have an order and even one of the products are with missing Product On Orders > Seller to NOT export the order and return an internal error “There are products with missing Seller” </v1.3>

API Docs : https://developer-docs.amazon.com/sp-api/docs/fulfillment-outbound-api-v2020-07-01-reference#createfulfillmentorder

API Call : POST /fba/outbound/2020-07-01/fulfillmentOrders

Sample Request:

POST [https://sellingpartnerapi-na.amazon.com](https://sellingpartnerapi-na.amazon.com/fba/outbound/2020-07-01/features?marketplaceId=ATVPDKIKX0DER)/fba/outbound/2020-07-01/fulfillmentOrders

Body:

{
  "destinationAddress": {
    "addressLine1": "<string>",
    "countryCode": "<string>",
    "stateOrRegion": "<string>",
    "name": "<string>",
    "postalCode": "<string>",
    "addressLine2": "<string>",
    "addressLine3": "<string>",
    "city": "<string>",
    "districtOrCounty": "<string>",
    "phone": "<string>"
  },
  "displayableOrderComment": "<string>",
  "displayableOrderDate": "<dateTime>",
  "displayableOrderId": "<string>",
  "items": [
    {
      "quantity": "<integer>",
      "sellerFulfillmentOrderItemId": "<string>",
      "sellerSku": "<string>",
      "giftMessage": "<string>",
      "displayableComment": "<string>",
      "fulfillmentNetworkSku": "<string>",
      "perUnitDeclaredValue": {
        "currencyCode": "<string>",
        "value": "<string>"
      },
      "perUnitPrice": {
        "currencyCode": "<string>",
        "value": "<string>"
      },
      "perUnitTax": {
        "currencyCode": "<string>",
        "value": "<string>"
      }
    },
    {
      "quantity": "<integer>",
      "sellerFulfillmentOrderItemId": "<string>",
      "sellerSku": "<string>",
      "giftMessage": "<string>",
      "displayableComment": "<string>",
      "fulfillmentNetworkSku": "<string>",
      "perUnitDeclaredValue": {
        "currencyCode": "<string>",
        "value": "<string>"
      },
      "perUnitPrice": {
        "currencyCode": "<string>",
        "value": "<string>"
      },
      "perUnitTax": {
        "currencyCode": "<string>",
        "value": "<string>"
      }
    }
  ],
  "sellerFulfillmentOrderId": "<string>",
  "shippingSpeedCategory": "Standard",
  "marketplaceId": "<string>",
  "deliveryWindow": {
    "endDate": "<dateTime>",
    "startDate": "<dateTime>"
  },
  "deliveryPreferences": {
    "deliveryInstructions": "<string>",
    "dropOffLocation": {
      "type": "BICYCLE_BASKET",
      "attributes": {
        "Loremc57": "<string>",
        "ad_6": "<string>"
      }
    }
  },
  "fulfillmentAction": "Hold",
  "fulfillmentPolicy": "FillAll",
  "codSettings": {
    "isCodRequired": "<boolean>",
    "codCharge": {
      "currencyCode": "<string>",
      "value": "<string>"
    },
    "codChargeTax": {
      "currencyCode": "<string>",
      "value": "<string>"
    },
    "shippingCharge": {
      "currencyCode": "<string>",
      "value": "<string>"
    },
    "shippingChargeTax": {
      "currencyCode": "<string>",
      "value": "<string>"
    }
  },
  "shipFromCountryCode": "<string>",
  "notificationEmails": [
    "<string>",
    "<string>"
  ],
  "featureConstraints": [
    {
      "featureName": "<string>",
      "featureFulfillmentPolicy": "Required"
    },
    {
      "featureName": "<string>",
      "featureFulfillmentPolicy": "Required"
    }
  ],
  "paymentInformation": [
    {
      "paymentTransactionId": "<string>",
      "paymentMode": "<string>",
      "paymentDate": "<dateTime>"
    },
    {
      "paymentTransactionId": "<string>",
      "paymentMode": "<string>",
      "paymentDate": "<dateTime>"
    }
  ]
}

Request Mapping: Please note everything which is N/A can be excluded from the payload.

Amazon Field Required Hemi Field Comment
destinationAddress
addressLine1 Yes Order > Shipping Street 1
countryCode Yes Order > Shipping Country Code
stateOrRegion Yes Order > Shipping State Province <v1.2>

We want to add additional mapping and map the Order > Shipping State Province against the "State Name - State Code” look up list and map the State Name. If we have a match we want to push State Code if there is no match we simply send Order > Shipping State Province </v1.2> | | | name | | | Yes | Order > Shipping Buyer Name | | | | postalCode | | | Yes | Order > Shipping Postal Code | | | | addressLine2 | | | No | Order > Shipping Street 2 | | | | addressLine3 | | | No | N/A | | | | city | | | No | Order > Shipping City | | | | districtOrCounty | | | No | N/A | | | | phone | | | No | Order > Shipping Phone | | | displayableOrderComment | | | | Yes | Channel Amazon MCF Connector > Order Comment OR Order > Note | Order > Note is with priority | | displayableOrderDate | | | | Yes | Order > Order Created Time | Date time format - "2022-10-07T14:49:45Z” | | displayableOrderId | | | | Yes | <v1.2>Order > Marketplace Order Id</v1.2> | | | items | | | | | | | | | quantity | | | Yes | Product In Order > Quantity | | | | sellerFulfillmentOrderItemId | | | Yes | Product In Order > Id | | | | sellerSku | | | Yes | Product In Order > Item SKU | | | | giftMessage | | | No | N/A | | | | displayableComment | | | No | Product In Order > Note | | | | fulfillmentNetworkSku | | | No | N/A | | | | <v1.2>perUnitDeclaredValue | | | | N/A | | | | | currencyCode | | No | N/A | Order > Order Currency | | | | value | | No | N/A | Product In Order > Original Price | | | perUnitPrice | | | | | | | | | currencyCode | | No | N/A | | | | | value | | No | N/A | | | | perUnitTax | | | | | | | | | currencyCode | | No | N/A | | | | | value | | No | N/A | | | sellerFulfillmentOrderId | | | | Yes | <v1.2>Order > Marketplace Order Id</v1.2> | | | shippingSpeedCategory | | | | Yes | Channel Amazon MCF Connector Services OR Channel Amazon MCF Connector > Default Shipping Speed Category | We want to first check if we have any mappings added in Amazon MCF Connector Services and if we match the Order > Shipping Service we want to pick the shippingSpeedCategory from the mapping otherwise we use the Amazon MCF Connector > Default Shipping Speed Category | | marketplaceId | | | | | Channel Amazon MCF Connector > Country | Based on Channel Amazon MCF Connector > Country we get the correct MarketplaceId | | deliveryWindow | | | | | | | | | endDate | | | No | Order > Delivery By Date | We want to push the deliveryWindow only if both endDate and startDate are presented otherwise <v1.1>we do not include it in the payload.</v1.1>

Date time format- "2022-10-07T14:49:45Z” | | | startDate | | | No | Order > Ship By Date | We want to push the deliveryWindow only if both endDate and startDate are presented otherwise <v1.1>we do not include it in the payload.</v1.1>

Date time format - "2022-10-07T14:49:45Z” | | deliveryPreferences | | | | | | | | | deliveryInstructions | | | No | N/A | This feature is currently supported only in the JP marketplace and not applicable for other marketplaces. | | | dropOffLocation | | | | | | | | | type | | No | N/A | | | | | attributes | | | | | | | | | Loremc57 | No | N/A | | | | | | ad_6 | No | N/A | | | fulfillmentAction | | | | No | Hardcoded as “Ship” | Specifies whether the fulfillment order should ship now or have an order hold put on it. We will support only ship for the moment | | fulfillmentPolicy | | | | No | Channel Amazon MCF Connector > Fulfillment Policy | FillOrKill- If an item in a fulfillment order is determined to be unfulfillable before any shipment in the order has acquired the status of Pending (the process of picking units from inventory has begun), then the entire order is considered unfulfillable. However, if an item in a fulfillment order is determined to be unfulfillable after a shipment in the order has acquired the status of Pending, Amazon cancels as much of the fulfillment order as possible. Refer to the FulfillmentShipment object for shipment status definitions.

FillAll - All fulfillable items in the fulfillment order are shipped. The fulfillment order remains in a processing state until all items are either shipped by Amazon or cancelled by the seller.

FillAllAvailable - All fulfillable items in the fulfillment order are shipped. All unfulfillable items in the order are cancelled. | | codSettings | | | | | | | | | isCodRequired | | | No | N/A | | | | codCharge | | | | | | | | | currencyCode | | No | N/A | | | | | value | | No | N/A | | | | codChargeTax | | | | | | | | | currencyCode | | No | N/A | | | | | value | | No | N/A | | | | shippingCharge | | | | | | | | | currencyCode | | No | N/A | | | | | value | | No | N/A | | | | shippingChargeTax | | | | | | | | | currencyCode | | No | N/A | | | | | value | | No | N/A | | | shipFromCountryCode | | | | No | N/A | | | notificationEmails | | | | No | Order > Buyer Mail | We want to add the email only if we have Amazon MCF Connector > Send Customer Email = Yes | | featureConstraints | | | | | | | | | featureName | | | No | <v1.4>“BLANK_BOX” | If we have Channel Amazon MCF Connector > Use Blank Box = Yes then we want to push the featureConstraints otherwise we exclude it from the payload. By default the want to have Channel Amazon MCF Connector > Use Blank Box = No | | | featureFulfillmentPolicy | | | No | “Required” | </v1.4> | | paymentInformation | | | | | | | | | paymentTransactionId | | | Yes | Order Payment > Transaction Id OR Order > Marketplace Order Id | If Order Payment > Transaction Id is missing we want to pick Order > Marketplace Order Id

We want to pick the transaction id from the order payment > type = payment row. If we have more than one we pick the lowest id. paymentMode Yes Order > Order Payment Method OR Channel Amazon MCF Connector > Payment Mode If Order > Order Payment Method is missing we want to pick Channel Amazon MCF Connector > Payment Mode
paymentDate Yes Order Payment > Payment Date

OR Orders > Order Created Time | If the Order Payment > Payment Date is missing we want to use Orders > Order Created Time

We want to pick the date from the order payment > type = payment row. If we have more than one we pick the lowest id.

Date time format- "2022-10-07T14:49:45Z” |

Response 200:

{}

Response Mapping:

If successful since we are not receiving any unique Amazon order id or anything in the response we want to add our Order > ID and Order > Marketplace Order Id concatenated with - as Orders > Connector Order ID and Product In Order > Connector Order ID Example: Order > ID-Order > Marketplace Order Id

We will also need to update Product in Order > Connector Exported field = Yes

Sample Error Response:

{
    "errors": [
        {
            "code": "Unauthorized",
            "message": "Access to requested resource is denied.",
            "details": "The access token you provided has expired."
        }
    ]
}

If we receive an error during the creation we need to store the error (code - message) in Order > Connector Error with the relevant error message

Is this article helpful?
0 0 0