Accounting & NetSuite
Summary
Connect NetSuite as an accounting integration — credentials (Account ID + token-based auth) and sending orders, shipments, and invoices to NetSuite.
NetSuite as an accounting integration in Flxpoint lets you keep finance in sync by creating and updating NetSuite records - Sales Orders, Item Fulfillments, Vendor Bills, and related artifacts - over NetSuite's REST Web Services using Token-Based Authentication (TBA). The sections below highlight how routing, partial shipments, and customer/SKU mapping behave in practice.
Before connecting, enable these features and role permissions inside NetSuite. Skipping them is the most common cause of authentication and posting errors later. Getting this in place early makes it much easier to test the Accounting operations end-to-end.
Enable required features
In Setup → Company → Enable Features, open the SuiteCloud tab and enable:
- SuiteScript (Client + Server)
- SuiteTalk (Web Services) → REST Web Services
- Token-Based Authentication (TBA)
Also enable the inventory features for the records Flxpoint sends: Work Orders (only if you want Flxpoint to create Work Orders) and Assembly Items (Work Orders can only be built for Assembly Items).
Assign role permissions
In Setup → Users/Roles → Manage Roles, ensure the integration role includes:
- Setup: Access Token Management, Log in using Access Tokens, REST Web Services
- Lists: Customers, Vendors, Items, Custom Record Entries, Subsidiaries (OneWorld)
- Transactions: Sales Order, Purchase Order, Item Fulfillment, Inventory Adjustment, Vendor Bill (billing), Work Order (if using Create Work Order)
Tip: Create a dedicated "Flxpoint Integration" role for auditability.
Why this matters
These features and permissions allow TBA-secured REST access and the NetSuite records Flxpoint uses: Sales Orders, Item Fulfillments, Purchase Orders, Vendor Bills, and optional Work Orders for Assembly Items.
If you later enable Create Work Order in Accounting, NetSuite only builds Work Orders for items set up as Assembly Items with the Work Orders feature turned on.
Generate access tokens
Log in with a role that has Access Token Management. In the Settings portlet, click Manage Access Tokens → New My Access Token.
- Select the Application (Integration) and role; keep or set the token name
- Click Save, then copy the Token ID and Token Secret and store them securely
Note: Sandbox/Preview do not reuse Production tokens - create them per environment.
Click the Account Settings gear → Accounting, then the + to add a new accounting integration, and select NetSuite Sales Order from the list. Provide the values exactly as provisioned in NetSuite (case-sensitive). Use separate credentials for Sandbox vs Production. Then click Test Connection; if successful, Save Connection → Save and Proceed.
How to set it up
| Step | What to do |
|---|---|
| Enable the operation | Accounting → Send Accounting Orders. |
| Connection | Select your NetSuite connection (Production or Sandbox) → Test → Save. |
| Template | Select or create a Send Accounting Orders Mapping Template and choose your SKU option (Order-level vs PO-level). |
| Optional - Create Work Order | Turn on Create Work Order to create Work Orders for eligible Assembly Item lines instead of POs. NetSuite must have Work Orders and Assembly Items enabled, and the role must have Work Order permission. |
| Schedule | Turn on Scheduled and set a cadence (e.g., Every 30 Minutes) or run on demand. |
For dropship routes, confirm vendor associations and PO-level SKUs before enabling the schedule. If you enable Create Work Order, test with a single Assembly Item order first so you can see the linked Work Order in NetSuite.
Line item & SKU options
| Choice | Effect | When to use |
|---|---|---|
| Send Order-level SKU | Uses the ordered SKU on Sales Order lines. | When a single SKU represents the item end-to-end. |
| Send PO-level SKU | Uses the vendor/dropship SKU ("exploded SKUs"). | When vendors require their SKU on linked POs. |
Exploded SKU example: Ordered SKU FLX-SKU123 (Qty 3) splits to vendor SKUs - SO lines might be VA-SKU123: Qty 1 (Internal Warehouse) and FLX-SKU123: Qty 2 (Dropship, Vendor A).
Customer & header fields
| From value | To NetSuite field | Notes |
|---|---|---|
| Customer → Email | Email (Customer) | Optional. Used to find/create the customer if Id not provided. |
| Category | Id (Customer) | Optional. Use your NetSuite value. |
| Custom Form | Id (Customer) | Optional. Specify a particular customer form. |
| Entity Status | Id (Customer) | Optional. Status value in NetSuite. |
| Subsidiary | Id (Customer) | Optional. OneWorld only. |
Customer lookup behaviour
By default Flxpoint (1) searches by the mapped email first, (2) falls back to a name search if no email match, then (3) creates a new customer if still no match. Enable Skip Customer Name Validation to search by email only and create immediately if not found - useful when NetSuite has many similarly named customers. Default: off.
Custom field types
| Type | What it sends / how to use |
|---|---|
| String Custom Field | Sends the value as plain text. Use for text custom body fields (e.g. custbody_notes). |
| Boolean Custom Field | Sends a native boolean. Use for true/false fields (e.g. custbody_amazon_isprime). Accepts true/false, on/off, yes/no. Sending a boolean as a string causes a NetSuite parse error. |
| Date Custom Field | Sends a NetSuite-formatted date. Use for date custom body fields (e.g. custbody_earliest_ship_date_amz); Flxpoint formats the date automatically. |
Customer-record custom fields: custom fields are sent on the Sales Order body by default. Prefix the field name with customer_ to route it to the Customer record instead (e.g. customer_custentity_celigo_etail_channel). Works with all three types.
FFL field mapping (NetSuite Get Orders)
NetSuite has no native FFL field. In Get Orders → Mapping Template, map your NetSuite custom body field to Flxpoint's Order FFL, entering the field id with the cf_ prefix (e.g. field id custbody_ffl_number is entered as cf_custbody_ffl_number). Applies to both Sales Order and Purchase Order Get Orders.
Mapping rules (optional)
| Rule | Type | What it does |
|---|---|---|
| If FFL required, set billing name | Conditional String | Sets billing name when FFL is required. |
| If FFL required, set billing phone | Conditional String | Sets billing phone when FFL is required. |
Operation details
| Capability | Status | Notes |
|---|---|---|
| Sales Order creation | Supported | REST: record/v1/salesorder. |
| Dropship PO creation | Supported | When the fulfillment request is routed external/dropship. |
| Work Order creation | Supported (optional) | REST: record/v1/workorder when Create Work Order is enabled. Only Assembly Items are eligible; POs are skipped for those lines. |
| Custom fields | Supported | String, Boolean, and Date. Map via template (incl. cf_* fields); use customer_ prefix for the Customer record. |
How to set it up
| Step | What to do |
|---|---|
| Enable & connect | Turn on Accounting → Send Accounting Shipments, pick your NetSuite connection (Production/Sandbox), Test → Save. |
| Configure | Choose the default inventoryLocation behavior and any header options required by your account. |
| Template | Select or create the Send Accounting Shipments template and map the key fields below. |
| Schedule or run | Toggle Scheduled for automatic syncing or use Run Now for ad-hoc pushes. |
Mapping - key fields
| From (Flxpoint) | To (NetSuite) | Notes |
|---|---|---|
| Order → External Id / SO Id | Created-from Sales Order (e.g. SO12345) | Fulfillment transforms from this SO. |
| Shipment → Tracking Number(s) | Tracking Numbers (Fulfillment) | Single or multiple; all preserved. |
| Order Item → SKU | Item (line) | Association by SKU. |
| Order Item → Quantity | Quantity (line) | Only the shipped quantity for that line. |
| (Optional) Order/Line → Weight | Weight (line or package) | Optional if you report weights. |
Partial shipments (behavior)
Multiple shipments are supported via partial fulfillments: create a fulfillment for the shipped lines (attaching tracking to those lines) and leave unshipped lines unfulfilled - the Sales Order stays Partially Fulfilled; later shipments create new fulfillments for the remaining lines. Example: Fulfillment #1 fulfills SKU001 with tracking 1Z... and leaves SKU002 open; Fulfillment #2 later fulfills SKU002 with a new tracking number.
Mapping rules (optional)
| Rule | Type | What it does |
|---|---|---|
| Normalize Tracking Numbers | Conditional String | Trim/clean tracking values prior to send. |
Operation details
| Capability | Status | Notes |
|---|---|---|
| Fulfillment creation | Supported | Transforms from an existing SO. |
| Multiple tracking numbers | Supported | All tracking values attached to the fulfillment. |
| Item association | Supported | Lines matched by SKU. |
How to set it up
| Step | What to do |
|---|---|
| Enable the operation | Accounting → Send Accounting Invoices. |
| Connection | Select your NetSuite connection (Production or Sandbox) → Test → Save. |
| Template | Select or create a Send Accounting Invoices Mapping Template and map the fields below. |
| Schedule | Turn on Scheduled for automatic syncing or run on demand. |
Before enabling the schedule, review the Terms, Aggregate Invoice Product Cost, and Location ID mappings below so bills post with the right payment terms, costs, and location.
Payment terms (Terms field)
The template includes a Terms field for vendor bills. Map it to carry the payment terms from the originating order onto each bill. Terms are handled dynamically - the value is read from the order's data each time an invoice is sent, so updated terms are picked up automatically with no template rework.
Cost fields (product cost & total)
| Field | What it contains | How to use it |
|---|---|---|
| Aggregate Invoice Product Cost | The combined product cost of all items on the invoice. | Map it to your COGS expense account so product costs post to the correct account. |
| Total | All invoice costs combined (e.g., product cost plus shipping). | Use when the bill total should match the full invoice amount, not product cost alone. |
Vendor bill location (Location ID)
The vendor bill's Location is set from the Location ID mapped in your template. The Location Name field in integration settings is no longer required. Make sure the mapped Location ID matches a valid NetSuite location so bills post without location errors.
Operation details
| Capability | Status | Notes |
|---|---|---|
| Vendor Bill creation | Supported | Created from invoices recorded in Flxpoint. |
| Payment terms | Supported | Mapped via the Terms field; applied dynamically per bill. |
| Product cost to COGS | Supported | Map Aggregate Invoice Product Cost to the COGS expense account. |
| Full-cost totals | Supported | The Total field includes all invoice costs (e.g., product + shipping). |
| Location by ID | Supported | The Location ID in the template sets the bill location; Location Name is not required. |
Related: Vendor Bills (partial bills)
Partial invoicing is supported. When a vendor bills only some PO lines, the first bill sends all lines, using quantity 0 for items not yet billed; later bill(s) send only the newly invoiced items with their billed quantities.
Enable features and permissions first
TBA-secured REST access depends on SuiteScript, REST Web Services, and Token-Based Authentication being enabled, plus role permissions for Customers, Items, Sales Orders, Item Fulfillments, Purchase Orders, Vendor Bills, and (if used) Work Orders. Missing any of these is the leading cause of "Authentication failed" errors.
Keep Sandbox and Production credentials separate
Sandbox/Preview tokens do not reuse Production tokens - create them per environment. Keep all values (Account ID, Client ID/Secret, Token ID/Secret) case-sensitive and secure, and select the matching Environment on the connection.
Work Orders need Assembly Items
When Create Work Order is enabled, Flxpoint creates Work Orders only for Assembly Item lines; other lines follow the normal PO behavior. If an order has no Assembly Items, the Work Order flow fails and Flxpoint indicates an Assembly Item is required.
Item Fulfillments need a valid inventoryLocation
When transforming a Sales Order into an Item Fulfillment, NetSuite expects a valid inventoryLocation that aligns with the SO. Keep locations accurate, and confirm the mapped or default location is allowed for the SO, to avoid transform errors.
