Appearance
NetSuite
The NetSuite integration connects Boxture to Oracle NetSuite, the ERP system many customers use for sales, purchasing and finance. NetSuite stays the place where orders are entered and invoiced; Boxture does the warehouse work and reports back what was picked, packed, shipped and received. Boxture is also the master for inventory: NetSuite's stock levels are corrected to match Boxture.
The integration connects to NetSuite's web services (SOAP, version 2025.1) with token-based authentication.
What is synchronised
| Data | Direction | When |
|---|---|---|
| Sales orders | NetSuite → Boxture (sales orders) | Every 15 minutes, when Outbound process is on |
| Purchase orders | NetSuite → Boxture (purchase orders) | Every 15 minutes, when Inbound process is on |
| Transfer orders | NetSuite → Boxture (transfer orders, or sales and return orders) | Every 15 minutes, when Transfer process is on |
| Vendor return authorizations | NetSuite → Boxture (scrap orders) | Every 15 minutes, when the vra search is set in Metadata |
| Changes to backordered and closed lines | NetSuite → Boxture | Every 15 minutes |
| Item fulfillments (picked, packed, shipped) | Boxture → NetSuite | When the order is picked, packed, shipped or delivered, depending on the switches |
| Item receipts and vendor bills | Boxture → NetSuite | When goods are received on a purchase or transfer order |
| Products | NetSuite → Boxture | Every 6 hours |
| Inventory | Boxture → NetSuite (inventory adjustments) | Every 6 hours for recently changed products, and all products daily at 00:00 |
Before you start
You need from the NetSuite administrator:
- the account ID of the NetSuite account;
- the web services endpoint for that account;
- an integration record in NetSuite with token-based authentication: its consumer key and consumer secret;
- an access token for the integration user and role: the token ID and token secret, and the role ID;
- saved searches in NetSuite that select the orders Boxture should pick up (for example "sales orders pending fulfillment at the Boxture warehouse").
In Boxture you need a user for the integration with access to the account and location(s) involved.
Setting up the integration
Go to Admin › Integration › Third party and choose Netsuite in the create menu.
Fill in the connection details:
Field What to enter Name A name to recognise the connection by. Endpoint The NetSuite web services endpoint. Consumer key, Consumer secret From the NetSuite integration record. User The Boxture user the integration works as. Token, Token secret The NetSuite access token. Role The NetSuite role ID of the token. Integration account The NetSuite account ID. All of these must be filled in; until they are, the integration does nothing.
Choose which processes to run with the switches:
Switch Effect Outbound process Import sales orders found by the Sales order search. Inbound process Import purchase orders found by the Purchase order search. Transfer process Import transfer orders found by the Transfer order search. Request pick fulfillment Create an item fulfillment with status "picked" when a pick list is picked. Request pack fulfillment Create or update the item fulfillment with status "packed" when the order is packed. Request ship fulfillment Create or update the item fulfillment with status "shipped" when the shipment is shipped. Request deliver fulfillment Update the item fulfillment when the shipment is delivered, with the proof of delivery. Enter the searches (YAML) that tell Boxture which NetSuite records to import: Sales order search, Purchase order search and Transfer order search. Each contains NetSuite search criteria, typically a reference to a saved search.
Add Metadata options as needed (see below) and save.
Transfer order search
The Transfer order search can be used in two ways:
- With a
transfer_ordersearch, NetSuite transfer orders become Boxture transfer orders. - Without it, a
transfer_fulfillsearch makes Boxture sales orders of the transfer orders to ship, and atransfer_receivesearch makes return orders of the transfer orders to receive. Use this when only one side of the transfer is a Boxture warehouse.
Metadata options
| Key | Meaning |
|---|---|
origin_location | The Boxture location (ID or name) used when a NetSuite location is not linked to a Boxture location |
vra | Saved search for vendor return authorizations, imported as scrap orders |
product_sync, noninventory_product_sync | Saved searches for the product import |
default_serialization_mode, default_expirable | Defaults for imported products |
product_weight_unit, product_dimensions_unit, product_currency | Units and currency for imported products |
warehouse | Saved search for the NetSuite locations used by the inventory sync; required for the inventory sync |
inventory_status | Inventory status to use in inventory adjustments |
ship_with_status | The fulfillment status to use when a shipment ships, instead of "shipped" |
update_pod_details | Write the proof-of-delivery name and date into the item fulfillment |
update_tracking_number | Write tracking links to the sales order |
custom_field_list | Map NetSuite custom fields, for example phone_number for the custom field that holds the delivery phone number |
Orders from NetSuite
Every 15 minutes Boxture runs the configured searches and imports each record it has not imported before.
How sales orders are mapped
| Boxture | Taken from NetSuite |
|---|---|
| Order type and channel | Sales order on the channel "NetSuite" |
| Customer | Found or created by the NetSuite customer name |
| Customer reference number | The transaction number (tranId) |
| Other reference number | The other reference number |
| Notes | The memo |
| Delivery terms | The incoterm |
| Delivery and billing contacts | The shipping and billing address |
| Shipping method | The NetSuite ship method, matched by name to a Boxture shipping method (exactly first, then the closest match) |
| Origin location | The Boxture location linked to the NetSuite location, else the origin_location metadata, else the user's only location |
| Order lines | Item, quantity, and lots or serial numbers from the inventory detail |
| Metadata | The order's custom fields |
Products are matched by the NetSuite item Boxture has linked before, or else by the NetSuite item ID (the item's name/number in NetSuite) against the Boxture product number or a product alias on the "NetSuite" channel. If a product cannot be matched, the order is created but put on hold with the reason "invalid order details". Purchase, transfer, return and scrap orders are mapped in the same way, with the vendor (created when missing) on purchase and scrap orders.
Backordered lines
When a line is backordered in NetSuite (not yet committed), Boxture marks it. Such lines are skipped during allocation, with the message "Backordered order lines will be skipped during allocation until fully committed in NetSuite". Allocating them by hand fails with "Could not allocate quantity ... because it is backordered in NetSuite." Every 15 minutes Boxture checks these orders again and releases lines that have become committed.
Changes in NetSuite
For orders with backordered lines, Boxture also picks up changes: lines closed in NetSuite are cancelled in Boxture, and changed quantities and lots are applied while the line can still be changed.
Feedback to NetSuite
Item fulfillments
Depending on the switches, Boxture creates an item fulfillment on the NetSuite sales order and moves it through its statuses:
text
pick list picked → item fulfillment "picked" (Request pick fulfillment)
order packed → item fulfillment "packed" (Request pack fulfillment)
shipment shipped → item fulfillment "shipped" (Request ship fulfillment)
shipment delivered → item fulfillment updated (Request deliver fulfillment)Unpicking or unpacking in Boxture updates the item fulfillment accordingly. The fulfillment includes package details (weight, tracking number) in the format of the carrier: FedEx, UPS, USPS or other.
When Request deliver fulfillment is on and proof of delivery is required, fill in the proof of delivery (name and date) on the shipment before delivering it; with update_pod_details these are written into the item fulfillment.
If a "shipped" fulfillment cannot be created, Boxture retries after 4 minutes (up to three times) and fires the messaging event netsuite_fulfillment_failure with the error, account, shipment and user. Create a messaging template for this event to be notified by e-mail. See Messaging.
Item receipts
When goods are received on a purchase order or transfer order, Boxture creates an item receipt in NetSuite with the quantities, lots, serial numbers and expiry dates. When a purchase order is fully received, Boxture also creates the vendor bill.
Products
Every 6 hours Boxture runs the product_sync and noninventory_product_sync saved searches and creates or updates products with the NetSuite item ID (the item's name/number) as product number. Kits and assemblies, serialized items and lot-numbered items are recognised. If an item's ID changes in NetSuite, the product with the old number is expired and a new one is created.
Inventory
Boxture is the master for inventory. Every 6 hours (for products changed in the last two hours) and every night at 00:00 (for all products), Boxture compares, for each NetSuite location in the warehouse search, NetSuite's available quantity with Boxture's available quantity, and posts an inventory adjustment in NetSuite for the difference.
WARNING
Because Boxture is the master, a quantity of 0 in Boxture is also sent to NetSuite. Make sure the warehouse search only contains locations that Boxture actually manages.
The inventory reporting percentage is not applied to NetSuite.
Monitoring and troubleshooting
- The Third party list shows Last order at and the Connection status traffic light. See Connection status.
- NetSuite jobs retry automatically, with growing intervals, when NetSuite is unavailable. Errors are listed under Exceptions.
- The orders' Transaction log shows when Boxture created or changed them.
| Problem | Check |
|---|---|
| Nothing happens at all | Are all connection fields filled in (endpoint, keys, token, role, account)? |
| No orders come in | Is the right process switch on? Does the saved search return the orders in NetSuite, for the integration's role? |
| Orders arrive on hold | Do the NetSuite items exist in Boxture as product number or NetSuite alias? Is the address complete? |
| Lines are not allocated | Are the lines backordered in NetSuite? |
| No fulfillments in NetSuite | Are the Request ... fulfillment switches on? Check Exceptions for the error from NetSuite. |