Jira task : OIUS-779
Proposal summary
This proposal outlines the integration between NetSuite and Ship Station for OneSource. The aim is to synchronize the order fulfillment process by incorporating NetSuite orders, including UI orders, SCA orders, Site builder orders, and others, into the Ship Station platform. This will streamline the shipping and tracking processes for increased efficiency and accuracy.
Requirement
OneSource seeks to improve its order management process by integrating NetSuite and ShipStation.
Prerequisite
- Need access for creating and updating item fulfillment in NetSuite.
- All Carriers and Services in NetSuite should be activated in Ship Station.
Deliverables
Our proposed integration will enable the following functionalities:
- Push designated NetSuite Item Fulfilments to Ship Station for streamlined shipping processing.
- Pull tracking numbers and shipping costs from Ship Station back to NetSuite.
- Real-time processing for immediate updates.
The integration will follow the following workflow:
- NetSuite users create Item fulfilment, sending fulfilment details to Ship Station.
- Ship Station receives fulfillment details and creates shipments, sending tracking information back to NetSuite.
NetSuite Item Fulfillment Creation
- NetSuite users initiate the integration by creating Item fulfillments within the NetSuite system.
- Fulfillment details, including order information and item quantities, are inputted into NetSuite’s interface.
- These fulfillment details are then transmitted to ShipStation, which serves as the central hub for order fulfillment coordination.
ShipStation Shipment Creation and Tracking
- ShipStation, upon receiving the fulfillment details from NetSuite, takes over the order fulfillment process.
- ShipStation processes the fulfillment data and generates shipments, which are assigned tracking numbers.
- Tracking information, including the tracking numbers and label, is generated by ShipStation.
- The generated information is then sent back to NetSuite, allowing NetSuite users to access real-time tracking updates for the shipped orders.
Create Label API
We will use the following API for the Shipment creation in ShipStation.
Create Shipment Label | ShipStation
| Name | Data Type | Description |
| carrierCode | string, required | Identifies the carrier to be used for this label. |
| serviceCode | string, required | Identifies the shipping service to be used for this label. |
| packageCode | string, required | Identifies the packing type that should be used for this label. |
| confirmation | string, optional | The type of delivery confirmation that is to be used once the shipment is created. Possible values: none, delivery, signature, adult_signature, and direct_signature. direct_signature is available for FedEx only. |
| shipDate | string, required | The date the shipment will be shipped. |
| weight | Weight, required | Shipment’s weight. |
| dimensions | Dimensions, optional | Shipment’s dimensions. |
| shipFrom | Address, required | Address indicating shipment’s origin. |
| shipTo | Address, required | Address indicating shipment’s destination. |
| insuranceOptions | InsuranceOptions, optional | The shipping insurance information associated with this order. |
| internationalOptions | InternationalOptions, optional | Customs information that can be used to generate customs documents for international orders. |
| advancedOptions | AdvancedOptions, optional | Various advanced options that may be available depending on the shipping carrier that is used to ship the order. |
| testLabel | boolean, optional | Specifies whether a test label should be created. Default value: false. |
Field Mappings
| NetSuite | ShipStation |
| Shipping Carrier (shipcarrier) | carrierCode |
| Shipping Method (shipmethod) | serviceCode |
| packageCode | |
| Date (trandate) | shipDate |
| Weight | weight |
| length,width, height, units | dimensions |
| Location Address/Company Address | shipFrom |
| Address (shipaddress) | shipTo |
Push/Pull Frequency
The push and pull processes will occur in real-time. Upon creating a shipped status Item Fulfillment in NetSuite, those details will be sent to ShipStation and creates shipments and tracking numbers in ShipStation. Shipping cost information can be pulled immediately after creating the shipping label in ShipStation.
Item Fulfillment Descriptions
The ShipStation packing list will pull item descriptions from NetSuite’s Item Records. While we can update item descriptions while creating orders, ShipStation does not currently provide a direct method to modify item descriptions for shipments.
Label Storage and Retrieval
To address the limitation of adding custom fields within NetSuite’s “Package Contents” subtab, a custom record will be created for each shipment.
This custom record will store the tracking number and label information as base64 encoded PDF values. The custom record will then be attached to the corresponding Item Fulfillment record.
Handling Shipments over 40 lbs
ShipStation typically assigns one label to each shipment. To handle shipments over 40 lbs, we propose the following solution:
- Split the shipment into multiple packages, each with a maximum weight of 40 lbs. This will result in multiple tracking numbers for a single Item Fulfillment.
Client-specific Shipping Accounts
For clients requiring shipping via their own accounts, such as TGI Fridays with multiple FedEx accounts, we can map NetSuite shipment methods to ShipStation service codes.
Advantages of this Integration
Previous attempts to use the Shopify Nine Arches integration were unsuccessful due to compatibility and operational issues with the Nine Arches company. As a result, this proposal focuses on leveraging NetSuite and ShipStation for integration, ensuring seamless data exchange and order fulfillment.
Error Handling
To handle errors during the integration process, we will add a checkbox and a field to store the error message.
Assumptions
- We will not consider the integration of orders from NetSuite to ShipStation.
- We are assuming that the item fulfilments in NetSuite are the same as the shipment in ShipStation.
- We will consider the item fulfillments created from Sales order for the ShipStation integration.
- We will not consider the update and deletion of item fulfilments from NetSuite to ShipStation.
- We will send item fulfillments with “Shipped” status to the ShipStation.
- We will not consider any other unit of measure other than “LBS.”
- The ShipStation and NetSuite APIs are accessible for integration purposes.
- Real-time updates are possible through APIs.
- Carriers, Services and packages need to be activated in ShipStation for the creation of shipments.
- To handle shipping via their own accounts, we are assuming that there will be multiple services created corresponding to each account in Ship Station.
- Historical data will not be included in this integration.
Risk
- ShipStation API updates in future might affect integration functionality.
- Some specific requirements, such as modifying ShipStation packing list item descriptions, may have limitations due to API restrictions.
- Shipment creation will not depend on the NetSuite order instead it will depend on item fulfillments.
- If an item weighs more than 40 pounds, we won’t divide it into multiple packages.
- We will always mark the “packageCode” as “package”.