Flxpoint Help Center
All DocsContact support

Accounting & NetSuite

June 28, 2026

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.

Send Accounting Orders
Creates a NetSuite Sales Order (and a Purchase Order for dropship routes, or a Work Order for Assembly Items when enabled)
Send Accounting Shipments
Creates NetSuite Item Fulfillments for shipped lines and attaches one or more tracking numbers
Send Accounting Invoices
Sends invoices recorded in Flxpoint to NetSuite as Vendor Bills, with payment terms, costs, and location from your template
Token-Based Auth (TBA)
Secures REST Web Services access using a per user + role + integration token, kept separate for Sandbox and Production

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.

1

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).

2

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.

3

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.

4

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.

Connection NameSetting
A label you choose so you can recognize this NetSuite connection later. Entered when you add the new accounting integration.
Chosen in Flxpoint - no external value needed.
NetSuite Store IDRequired
Your Flxpoint field for reaching the correct NetSuite account / environment. This is the NetSuite Account ID that identifies the NS account the integration talks to.
NetSuite Setup → Company
Client ID & Client SecretRequired
From the NetSuite Integration record. Identifies the application (integration) used for Token-Based Authentication.
NetSuite Setup → Integration
Token ID & Token SecretRequired
Generated per user + role + integration in NetSuite. Copy both immediately after creating the token - the secret is shown only once.
Manage Access Tokens
EnvironmentSetting
Choose Production for live accounting or Sandbox for testing. Use separate credentials for each - Sandbox/Preview tokens are not the same as Production.
Chosen in Flxpoint - keep values case-sensitive and secure.
After the connection saves, finish the wizard: enable or disable Link to Existing Sales Receipts and click Save and Proceed; then turn on the desired Accounting Operations, select the relevant source(s) or channel(s) for each, and click Save and Complete. Multiple sources/channels can map to one NetSuite connection when appropriate.

Creates a NetSuite Sales Order from eligible Flxpoint orders, and for dropship routes a related Purchase Order. When you enable Create Work Order, Assembly Item lines can create a Work Order instead of a PO for those lines, while non-assembly lines keep the standard PO flow. Customer matching/creation, SKU choice, and headers are driven by your Mapping Template.

How to set it up

StepWhat to do
Enable the operationAccounting → Send Accounting Orders.
ConnectionSelect your NetSuite connection (Production or Sandbox) → Test → Save.
TemplateSelect or create a Send Accounting Orders Mapping Template and choose your SKU option (Order-level vs PO-level).
Optional - Create Work OrderTurn 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.
ScheduleTurn 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

ChoiceEffectWhen to use
Send Order-level SKUUses the ordered SKU on Sales Order lines.When a single SKU represents the item end-to-end.
Send PO-level SKUUses 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 valueTo NetSuite fieldNotes
Customer → EmailEmail (Customer)Optional. Used to find/create the customer if Id not provided.
CategoryId (Customer)Optional. Use your NetSuite value.
Custom FormId (Customer)Optional. Specify a particular customer form.
Entity StatusId (Customer)Optional. Status value in NetSuite.
SubsidiaryId (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

TypeWhat it sends / how to use
String Custom FieldSends the value as plain text. Use for text custom body fields (e.g. custbody_notes).
Boolean Custom FieldSends 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 FieldSends 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)

RuleTypeWhat it does
If FFL required, set billing nameConditional StringSets billing name when FFL is required.
If FFL required, set billing phoneConditional StringSets billing phone when FFL is required.

Operation details

CapabilityStatusNotes
Sales Order creationSupportedREST: record/v1/salesorder.
Dropship PO creationSupportedWhen the fulfillment request is routed external/dropship.
Work Order creationSupported (optional)REST: record/v1/workorder when Create Work Order is enabled. Only Assembly Items are eligible; POs are skipped for those lines.
Custom fieldsSupportedString, Boolean, and Date. Map via template (incl. cf_* fields); use customer_ prefix for the Customer record.
Creates NetSuite Item Fulfillments for shipped lines and attaches one or more tracking numbers. Unshipped lines remain open so you can complete them later with additional fulfillments. When transforming a Sales Order into an Item Fulfillment, NetSuite expects a valid inventoryLocation that aligns with the SO.

How to set it up

StepWhat to do
Enable & connectTurn on Accounting → Send Accounting Shipments, pick your NetSuite connection (Production/Sandbox), Test → Save.
ConfigureChoose the default inventoryLocation behavior and any header options required by your account.
TemplateSelect or create the Send Accounting Shipments template and map the key fields below.
Schedule or runToggle Scheduled for automatic syncing or use Run Now for ad-hoc pushes.

Mapping - key fields

From (Flxpoint)To (NetSuite)Notes
Order → External Id / SO IdCreated-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 → SKUItem (line)Association by SKU.
Order Item → QuantityQuantity (line)Only the shipped quantity for that line.
(Optional) Order/Line → WeightWeight (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)

RuleTypeWhat it does
Normalize Tracking NumbersConditional StringTrim/clean tracking values prior to send.

Operation details

CapabilityStatusNotes
Fulfillment creationSupportedTransforms from an existing SO.
Multiple tracking numbersSupportedAll tracking values attached to the fulfillment.
Item associationSupportedLines matched by SKU.
Sends invoices recorded in Flxpoint to NetSuite, creating the corresponding Vendor Bills. Payment terms, cost fields, and the bill location are all driven by your Send Accounting Invoices Mapping Template.

How to set it up

StepWhat to do
Enable the operationAccounting → Send Accounting Invoices.
ConnectionSelect your NetSuite connection (Production or Sandbox) → Test → Save.
TemplateSelect or create a Send Accounting Invoices Mapping Template and map the fields below.
ScheduleTurn 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)

FieldWhat it containsHow to use it
Aggregate Invoice Product CostThe combined product cost of all items on the invoice.Map it to your COGS expense account so product costs post to the correct account.
TotalAll 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

CapabilityStatusNotes
Vendor Bill creationSupportedCreated from invoices recorded in Flxpoint.
Payment termsSupportedMapped via the Terms field; applied dynamically per bill.
Product cost to COGSSupportedMap Aggregate Invoice Product Cost to the COGS expense account.
Full-cost totalsSupportedThe Total field includes all invoice costs (e.g., product + shipping).
Location by IDSupportedThe 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.


Authentication failed
NetSuite token, role, or Account ID mismatch or an expired token, or the wrong environment (Sandbox vs Production). Confirm the Account ID, Role, Token ID/Secret, and environment; grant the role permissions for Customers, Items, Invoices, Sales Orders, Accounts, Subsidiaries, and Classes/Departments; and regenerate tokens if expired or revoked.
Posting period closed
An invoice/credit can't be created because the period is closed for AR or back-dated posting is blocked. Open/unlock the period or date the transaction in an open period; enable Allow Non-GL Changes only if policy allows.
Customer not created / not found
A "Duplicate entity" on the same name/email, or a missing subsidiary, terms, or currency. Match/update the existing customer by Id or email instead of creating a new one; provide required fields (Subsidiary, Currency, Terms, addresses); and normalize naming (e.g., add a channel suffix) to avoid duplicates.
Item not found / inactive
A SKU mismatch or an inactive item blocks posting. The SKU may not match itemid / internalId / UPC, or the item is inactive for the subsidiary/location or missing a price level. Use a consistent identifier (e.g., itemid or internalId lookup) and activate the item for the correct subsidiary/location with the price level available.
Subsidiary / Location missing
The transaction fails validation because a mandatory subsidiary, department, class, or location is not set. Add defaults for subsidiary/class/department/location in posting rules; if per-line segments are required, map them from source data line-by-line.
Currency mismatch
The customer/company currency differs from the order, the customer currency isn't enabled, or an exchange rate is missing for the date. Enable the customer currency or convert before posting, and ensure an exchange rate exists for the transaction date (or apply a policy rate).
Tax code not found
The nexus/rules don't match the ship-to or subsidiary, the tax code is disabled for the subsidiary/location, or there's a SuiteTax vs Legacy Tax mismatch. Map to a valid tax code for the ship-to and subsidiary, and align with SuiteTax (or legacy codes) and address validation before posting.
GL account blocked
Posting fails due to account or role limits - the AR account is restricted/not visible to the role, or a non-posting/inactive account was selected. Use active posting accounts, grant the role access to AR/AP/Revenue accounts, and confirm the account is allowed for the subsidiary and segment rules.
Work Order not created
Make sure Create Work Order is enabled, the order contains at least one Assembly Item, and the NetSuite role has Work Order permission.
SO created but no PO
PO generation only happens for external/dropship routes. Check the fulfillment request type and confirm vendor associations so a PO is created from the Sales Order.
No fulfillment / transform error
Ensure the Accounting Order (SO) exists and the operation is enabled/scheduled, that the template maps SKU, Quantity, and Tracking Number(s), and that the default or mapped inventoryLocation aligns with and is allowed for the SO. For partial shipments, include only the shipped lines in a given fulfillment.
Record locked / concurrency
A save fails due to locks or governance limits - another process is editing the same record, or governance/usage limits hit during high-volume posting. Retry with backoff, stagger posting jobs to reduce contention, and batch exports in smaller chunks to avoid governance/timeouts.

Which NetSuite records does each operation create?
Send Accounting Orders creates a Sales Order (plus a Purchase Order for dropship routes, or a Work Order for Assembly Item lines when Create Work Order is enabled). Send Accounting Shipments creates Item Fulfillments with tracking. Send Accounting Invoices creates Vendor Bills from invoices recorded in Flxpoint.
How does Flxpoint match or create a NetSuite customer?
By default it searches by the mapped email first, falls back to a name search if no email match is found, and creates a new customer if there's still no match. Enabling Skip Customer Name Validation searches by email only and creates immediately if no email match - useful when your account has multiple customers with identical or similar names.
What's the difference between Order-level and PO-level SKUs?
Send Order-level SKU uses the ordered SKU on the Sales Order lines - best when a single SKU represents the item end-to-end. Send PO-level SKU uses the vendor/dropship SKU ("exploded SKUs") - best when vendors require their own SKU on linked POs. For dropship, an ordered SKU can split across an internal warehouse line and a vendor dropship line.
When does Flxpoint create a Work Order instead of a Purchase Order?
Only when Create Work Order is enabled, and only for lines that are set up as Assembly Items in NetSuite (with the Work Orders feature on and the role holding Work Order permission). Non-assembly lines stay on the Sales Order and use the normal PO flow. If an order contains an Inventory Item and an Assembly Item, only the Assembly Item line links to a Work Order. If there are no Assembly Items, the Work Order flow fails and Flxpoint indicates an Assembly Item is required.
How do partial shipments and partial bills work?
For shipments, create a fulfillment for the shipped lines and leave the rest unfulfilled - the Sales Order stays Partially Fulfilled and later shipments create new fulfillments. For vendor bills, the first bill sends all lines using quantity 0 for items not yet billed, and later bills send only the newly invoiced items with their billed quantities.
How do I send custom fields, including to the Customer record?
The mapping template supports three custom field types - String, Boolean, and Date - mapped to NetSuite custom body fields (including cf_* fields). Custom fields are sent on the Sales Order body by default; prefix the field name with customer_ to route the value to the Customer record instead (e.g. customer_custentity_celigo_etail_channel). The prefix works with all three field types.
© 2026 Flxpoint. All rights reserved.