NetSuite Integration
The NetSuite integration is a read-only SuiteQL connection for customer, invoice, and order-to-cash reporting. It uses NetSuite OAuth 2.0 machine-to-machine authentication with a JWT client assertion signed by your integration certificate.
The NetSuite integration does not run through the Resplendent Sync Agent.
Before you begin
Section titled “Before you begin”You need:
- A NetSuite account ID (production or sandbox), such as
1234567or1234567-sb1. - A dedicated Integration record configured for OAuth 2.0 Client Credentials (Machine to Machine).
- A certificate uploaded to that integration, plus the matching private key (PEM).
- A NetSuite role with read access to the Datasets you plan to sync.
- The Client ID and Certificate ID from NetSuite.
The integration never creates, updates, or deletes records in NetSuite.
Permissions
Section titled “Permissions”Grant the integration role only the SuiteQL/record permissions needed for the Datasets you plan to sync.
| Dataset | Required for connection? | Source |
|---|---|---|
| Customers | Yes (connection test) | customer |
| Contacts | No | contact |
| Customer Contact Roles | No | CustomerContactRole |
| Customer Addresses | No | customerAddressbook |
| Items | No | item |
| Invoices | No | invoice |
| Invoice Lines | No | transactionline filtered to invoices |
| Sales Orders | No | salesorder |
| Sales Order Lines | No | transactionline filtered to sales orders |
| Item Fulfillments | No | transaction (type = 'ItemShip') |
| Transaction Links | No | NextTransactionLineLink |
| Transaction Statuses | No | TransactionStatus |
Missing permission for an optional Dataset does not break the connection. Resplendent shows a warning on the affected Dataset instead.
Custom fields returned by SuiteQL (custentity_*, custbody_*, custitem_*, custcol_*) are discovered automatically. Table requirements supply human-readable column aliases for discovered SuiteQL fields (curated labels for core columns, plus automatic Title Case labels for glued identifiers and custom fields). Each Dataset pre-selects a small curated default column set; you can still include any other discovered column.
Create the NetSuite integration credentials
Section titled “Create the NetSuite integration credentials”- In NetSuite, create or select a dedicated Integration for Resplendent.
- Enable OAuth 2.0 Client Credentials (Machine to Machine).
- Generate or upload a certificate and download/retain the private key PEM.
- Assign a read-only role with access to the records listed above.
- Copy the Client ID, Certificate ID, and Account ID.
Connect NetSuite to Resplendent Data
Section titled “Connect NetSuite to Resplendent Data ”- In Resplendent Data, go to Settings → Integrations.
- Find NetSuite and select Connect.
- Enter:
- Account ID: your NetSuite account id (sandbox IDs often end in
-sb1). - Client ID: the OAuth 2.0 integration client id.
- Certificate ID: the certificate id used as the JWT
kid. - Private key (PEM): paste or upload the matching private key.
- Account ID: your NetSuite account id (sandbox IDs often end in
- Test and save the connection.
- Select the Datasets and columns you want to sync.
The connection test mints an access token and runs a tiny Customers SuiteQL read. A successful test proves authentication works and the role can read core customer data.
Datasets
Section titled “Datasets”Resplendent syncs typed Datasets rather than one giant Transactions dump:
- Customers, Contacts, Customer Contact Roles, and Customer Addresses for customer master data.
- Items for product/SKU context.
- Invoices and Invoice Lines for AR reporting.
- Sales Orders, Sales Order Lines, and Item Fulfillments for order-to-cash flow.
- Transaction Links for relationships such as order-to-invoice and invoice-to-payment links.
- Transaction Statuses for readable status labels.
Payments and credit memos are not included in the initial release. They can be added later when your NetSuite role exposes those SuiteQL record types.
Sync behavior
Section titled “Sync behavior”- Customers uses a rolling full scan: each scheduled tick walks the next SuiteQL pages by
idinstead oflastmodifieddate. Pages per tick come from table size, cycle length, and cadence so a complete pass can finish in the configured window (default 60 minutes at a 1-minute cadence). When a cycle finishes, unseen customer rows are pruned from the warehouse. Customers do not use a nightly wipe. - Other incremental Datasets use NetSuite
lastmodifieddate/linelastmodifieddatewatermarks. - Dataset preview for Item Fulfillments reads header columns from
transaction(type = 'ItemShip') and only looks back 90 days, so production accounts do not time out sorting the full fulfillment history. - Large histories resume through bounded SuiteQL pages using keyset cursors. NetSuite rejects REST
offsetvalues above 3000, so Resplendent does not paginate deep history with large offsets. - Nightly resync keeps link, role, and status-style Datasets convergent when hard deletes are not safely detectable.