Fulfillment API

POST /orders Create Order

API version V1.2

Please note:

content-type is required although it shows optional

Additional information and instructions.

FMS only
Some sections below are marked as FMS-Only. These sections only apply when ModusLink is handling payments.

Date-time format
The date-time format used in request and response is UTC using the ISO 8601 format : yyyy-mm-ddThh:mm:ssZ, e.g. 2018-12-19T15:58:00Z
All date-time values should follow this format and should have UTC time without offset.

Example:
An order is posted from the Netherlands where the timezone is UTC+1. If the local timestamp would be 2018-12-19T15:58:00+01:00 the value provided would be the UTC time, 2018-12-19T14:58:00Z

Shipping info

ModusLink typically will do a dynamic carrier determination based on an agreed freight matrix, and the destination and total weight/volume of each order.The order can contain information about shipping options. The following input parameters are used to provide this information:

  • shipServiceLevel

    • This will provide the service level applicable to the order. The possible values depend on the agreed requirements. The following values are available:

      • ECO – economy shipment

      • STD – standard shipment

      • EXP – express shipment

      • PUD – Pick Up or Drop Off

      • EXI – Express Insured

      • SDG - Standard with dangerous goods

      • EDG - Express with dangerous goods

  • IncoTerm

    • The incomterm to be used, per Incoterms 2010 Standard. Possible values are CPT, DDP, DAP, FCA, EXW etc. Applicable values will need to be agreed between ModusLink and the client.

Multi-site fulfillment:

multiple CCID’s
In case fulfillment is done from multiple locations e.g. different regions, ModusLink will provide the client with multiple CCID’s. One for each location/region. Another reason for multiple CCID ‘s can be to differentiate between sales channels/streams like B2C and B2B orders or Web and Contact Center orders.

e.g. shipping from Netherlands and Singapore
In this case 2 CCID’s would be provided. When making a call to the API the appropriate CCID and region would have to be provided.

Shipping

For Shipping costs a separate line item should be added to the order. This order item will have a fixed sku e.g. [ClientCode]_SHIPCOSTS, which will be provided by ModusLink. The price of the item will represent the shipping costs. If no shipcosts apply this item can be omitted.

amount types

Amount types are used as below:

Order Header Amounts:

  • totalNet - The total net amount of the order

  • totalTax - The total tax amount of the order

  • totalGross - The total gross amount of the order (net plus tax)



Payment Amounts:

  • paid - the paid amount

  • authorized - the authorized amount

  • created - the created amount



Order Item Amounts:

  • netPrice - the net price of the item. This is the unit price of the item (single item price)

  • grossPrice - the gross price of the item. This is the unit price of the item (single item price)

  • exportPrice - the commercial value of the goods for Export. This is the unit price of the item (single item price)


The expectation is that for B2C gross pricing will be used, and for B2B net pricing. ModusLink can accommodate both models, but the model is fixed for a CCID, and needs to be agreed upon upfront.

Special Cases

Item discount (FMS-Only)
Pricing for the item should be the discounted item price. Original price minus discount applied.

Order discount (FMS-Only)
When a discount is applied to the order. Add a discount item to the order message, with negative value for the item, representing the discount value, see below sample. The SKU will be fixed and provided by Moduslink

{ "itemId": "1", "clientItemRef":"", "sku": "CLIENT_DISCOUNT", "quantity": { "uom": "EA", "value": “1” }, "amount": [ { "currencyISO3":"USD", "amountType":"grossPrice", “value": "-105.00” }, { "currencyISO3":"USD", "amountType":"netPrice", “value": "-100” } ], "taxLevel":"HIGH", "taxFactor":"1.05", "pricing":"grosspricing", "localizedDescription":"Localised description", "dynamicField": [ { "name":"SkuDescription", "value": “SkuDescription” } ] }

WEEE (FMS-Only)
WEEE refers to any charges related to European Community Directive 2012/19/EU on waste electrical and electronic equipment (WEEE). It is a fee levied to facilitate recycling of electronic and electric equipment. When ModusLink provides Financial Management Services (payment processing, invoicing, bank account management, credit and collection etc.), ModusLink will take care of the required WEEE fee submissions and reporting.

Add an additional line item to the order to hold the WEEE fee for the item. Each item that has a WEEE fee, needs an associated WEEE item. Therefore the order can have multiple WEEE items. Each WEEE item will have the same sku but a different localised description. Then the WEEE fee item can be associated with a product line in the order. See sample below:

{ "itemId": "1", "clientItemRef":"", "sku": "[ClientCode_WEEE]", "quantity": { "uom": "EA", "value": “1” }, "amount": [ { "currencyISO3":"USD", "amountType":"grossPrice", “value": "1.50” }, { "currencyISO3":"USD", "amountType":"netPrice", “value": "1.25” } ], "taxLevel":"HIGH", "taxFactor":"1.20", "pricing":"grosspricing", "localizedDescription":"WEEE [<>]", "dynamicField": [] }

SKU - The partnumber to which this WEEE fee applies
[ClientCode_WEEE] -The WEEE part number provided to you by ModusLink.

Codice Fiscali (FMS-Only)
For Italian orders the webstore needs to get the clients fiscal code and add this to the order as an order dynamic field.

Field  Value

order-dynamicField-name   FISCAL_CODE

order-dynamicField-value   fiscall code provided

e-Invoicing (FMS-Only)
For localisation of invoices the order needs to provide the local to be used. E.g. the language used to create the order online. This will drive the language of the e-invoice. partner-personData-locale

format   LanguageCode-CountryCode

sample   nl-NL

Payment Review (FMS-Only)
In case the payment result is review required this needs to be added to the order as order dynamic fields.

Field  Value

order-dynamicField-name   PROCESSAUTHSTATUS

order-dynamicField-value   Review

order-dynamicField-name   PROCESSAUTHSTATUSCODE

order-dynamicField-value   DM_REVIEW

Export FOC orders
In case of export outside the EU the price elements should always (also with Free Of Charge or Fulfillment Only orders) contain a value amount of the product at the Item level. This export price is printed on the Customs/Commercial Invoice. The gross price may contain zero value (in case of a Free of Charge product).

As a general guideline for export Price:

  • For end user paying B2C orders – always commercial value (net price)

  • For end user free of charge or sample shipments – fill with the “transfer” value or equivalent, i.e. standard inventory value.

  • For B2B users where you as our client are the IOR – use the transfer value

  • For B2B customers where your customer is IOR – use full commercial value

See below line item amount sample.

{ "amount": [ { "currencyISO3":"USD", "amountType":"grossPrice", "value": “0.00” }, { "currencyISO3":"USD", "amountType":"netPrice", "value": “125” }, { "currencyISO3":"USD", "amountType":"exportPrice", "value": “125” } ],

Bundles
For bundles Moduslink will receive the underlying items of the bundle in the order message. For example:
Bundle_A containing the following items:
    Item: SKU_A qty in bundle: 1
    Item: SKU_B qty in bundle: 2

The item price in the order message should be the original item price minus the bundle discount applied:
    SKU_A has item price: 10.00
    SKU_B has item price: 20.00
    Bundle_A has a price of: 44.00

The bundle is sold for 44 instead of 50, the 6 discount applied to the bundle, should be split accross the two items in the bundle, and sent as such in the order message:
Based on the sample bundle, the order message will include, the following items and prices:
    SKU_A with qty 1 and item price: 8.80
    SKU_B with qty 2 and item price: 17.60

Billing option
For B2B customers. In case they want to provide the freight billing option, this can be done by adding a dynamic field with the following detail: Valid values are:

  • 0 - DEFAULT

  • 1 - PREPAID CLIENT

  • 2 - PREPAID ML A/C

  • 3 - 3RD PARTY CLIENT

  • 4 - 3RD PARTY ML

  • 5 - COLLECT CLIENT

  • 6 - COLLECT ML

  • 7 - PREPAID AND ADD

  • 8 - CONSIGNEE

Field  Value

order-dynamicField-name   BIL_OPT

order-dynamicField-value   the applicable billing option

GET /orders Retrieve Orders

API version V1.2

Additional information and instructions.

Date-time format
The date-time format used in request and response is UTC using the ISO 8601 format : yyyy-mm-ddThh:mm:ssZ, e.g. 2018-12-19T15:58:00Z
All date-time values should follow this format and should have UTC time without offset.

Example:
An order is posted from the Netherlands where the timezone is UTC+1. If the local timestamp would be 2018-12-19T15:58:00+01:00 the value provided would be the UTC time, 2018-12-19T14:58:00Z

amount types

Amount types are used as below:

Order Header Amounts:

  • totalNet - The total net amount of the order

  • totalTax - The total tax amount of the order

  • totalGross - The total gross amount of the order (net plus tax)



Payment Amounts:

  • paid - the paid amount

  • authorized - the authorized amount

  • created - the created amount



Order Item Amounts:

  • netPrice - the net price of the item

  • grossPrice - the gross price of the item

  • exportPrice - the commercial value of the goods for Export



The expectation is that for B2C gross pricing will be used, and for B2B net pricing. ModusLink can accommodate both models, but the model is fixed for a CCID, and needs to be agreed upon upfront.

POST /orders/{requestId}/cancel Cancel Order

API version V1.2

Additional information and instructions.

Request to cancel an Order in Full

After receiving a successful cancellation request, the request status will be updated to cancel and a cancellation msg forwarded to the BackOffice ERP (BO-ERP) system. Depending on the ERP Order status cancellation may still be allowed, or not if e.g. the order is already WIP or shipped. If the BO-ERP cancellation was succesful, the request status will be updated to cancelled. If not, the order will ship and if so desired the customer can refuse or return the order.

Sample POST body

{ "externalMessageReference": "ext_ordr_ref_1234", "requestId": "22334455", "reasonCode": "003", "reasonNote": "cheaper on xyz.com" }
  • externalMessageReference - The order reference

  • requestId - The Moduslink unique identifier for the order

  • reasonCode - The code to identify the cancel reason

  • reasonNote - A description of the reason for cancellation

POST /rmas Create RMA

API version V1.2

Additional information not available.

GET /rmas Retrieve RMAs

API version V1.2

Additional information and instructions.

Date-time format
The date-time format used in request and response is UTC using the ISO 8601 format : yyyy-mm-ddThh:mm:ssZ, e.g. 2018-12-19T15:58:00Z
All date-time values should follow this format and should have UTC time without offset.

Example:
An RMA is posted from the Netherlands where the timezone is UTC+1. If the local timestamp would be 2018-12-19T15:58:00+01:00 the value provided would be the UTC time, 2018-12-19T14:58:00Z

amount types

Amount types are used as below:

Payment Amounts:

  • paid - the paid amount

  • authorized - the authorized amount

  • created - the created amount



RMA Item Amounts:

  • netPrice - the net price of the item

  • grossPrice - the gross price of the item


GET /rmas/{requestId} Retrieve RMA

API version V1.2

Additional information and instructions.

Date-time format
The date-time format used in request and response is UTC using the ISO 8601 format : yyyy-mm-ddThh:mm:ssZ, e.g. 2018-12-19T15:58:00Z
All date-time values should follow this format and should have UTC time without offset.

Example:
An RMA is posted from the Netherlands where the timezone is UTC+1. If the local timestamp would be 2018-12-19T15:58:00+01:00 the value provided would be the UTC time, 2018-12-19T14:58:00Z

amount types

Amount types are used as below:

Payment Amounts:

  • paid - the paid amount

  • authorized - the authorized amount

  • created - the created amount



RMA Item Amounts:

  • netPrice - the net price of the item

  • grossPrice - the gross price of the item