Table of Contents

  1. Overview
  2. Complete Connection Process
  3. Pre-Connection Checklist
  4. Step-by-Step Setup Guide
  5. Permissions Reference
  6. Custom Fields & Records
  7. Post-Setup in Core8
  8. How Core8 Connects
  9. Troubleshooting
  10. Additional Resources

Overview

This guide provides comprehensive instructions for setting up NetSuite integration with Core8. Follow each section carefully to ensure successful integration.
ResourceDescription
OAuth 2.0 Client CredentialsCertificate-based authentication setup
REST Web ServicesREST API configuration
SuiteQL DocsQuery language documentation
Roles GuidePermissions configuration

Complete Connection Process

This section provides a high-level overview of the entire connection process. Follow these 4 steps in order:

Step 1: Configure NetSuite

  • Enable required features
  • Locate your NetSuite Account ID
  • Create integration record and save Client ID
  • Configure role permissions and required settings

Step 2: Generate Certificate in Core8

  • Navigate to NetSuite integration settings in Core8
  • Generate and download the certificate (.pem file)

Step 3: Create OAuth 2.0 Mapping in NetSuite

  • Upload the certificate to NetSuite
  • Link it to the integration, user, and role
  • Save the Certificate ID provided by NetSuite after creating the mapping

Step 4: Complete Setup in Core8

  • Enter NetSuite Account ID, Client ID, and Certificate ID
  • Configure integration settings and test the connection
Note: The entire process typically takes 20-30 minutes. Make sure you have administrator access to both NetSuite and Core8 before starting.

Pre-Connection Checklist

Before starting, ensure you have administrative access to NetSuite. Use this checklist to track your progress:

Essential Requirements

  • REST Web Services enabled
  • OAuth 2.0 enabled
  • SuiteAnalytics Workbook enabled
  • Integration record created with Client Credentials (M2M) Grant
  • Client ID saved from integration record
  • NetSuite Account ID located (from Company Information)
  • Certificate generated from Core8
  • OAuth 2.0 Client Credentials Mapping created (with certificate upload)
  • Certificate ID saved from OAuth 2.0 mapping in NetSuite
  • Connection tested successfully

Configuration Requirements

  • Role with required permissions created
  • At least one subsidiary exists
  • Payment terms configured
  • Custom fields created (if using)

Step-by-Step Setup Guide

Phase 1: Enable Core Features

Step 1: Enable Required Features

Navigation: Setup > Company > Enable Features
TabFeatureRequiredPurpose
SuiteCloudREST Web Services✅ YesEnables API communication
SuiteCloudOAuth 2.0✅ YesSecure authentication
AnalyticsSuiteAnalytics Workbook✅ YesRequired for SuiteQL queries
SuiteAnalytics Workbook must be enabled for the integration to work. NetSuite requires this feature for SuiteQL API endpoints - without it, data queries will fail with errors.

Step 2: Locate Your NetSuite Account ID

Navigation: Setup > Company > Company Information
  1. Navigate to Setup > Company > Company Information
  2. Look at the top section of the page
  3. Find and copy your Account ID
FieldLocationFormat Examples
Account IDTop section of Company Information1234567, 1234567_SB2, tstdrv2245019
Save this Account ID - you’ll need it when configuring the connection in Core8.

Step 3: Create Integration Record

Navigation: Setup > Integration > Manage Integrations > New
FieldValueNotes
NameCore8 IntegrationOr your preferred name
StateEnabled ✅Must be enabled
Client Credentials (M2M) Grant✅ CheckedRequired for certificate auth
REST Web Services✅ CheckedRequired for API access
CRITICAL: After saving, immediately copy this value:
  • Consumer Key/Client ID
This credential is shown only once! If you lose it, you’ll need to regenerate new credentials in the integration record.

Phase 2: Configure Role & Permissions

Step 4: Create/Edit Integration Role

Navigation: Setup > Users/Roles > Manage Roles Choose one approach:
  • Option A: Find existing role → Click Customize
  • Option B: Click New to create from scratch
  • Option C: Find custom role → Click Edit
Role Settings:
SettingValue
NameCore8 Integration Role
Center TypeClassic Center
Then configure permissions as detailed in the Permissions Reference section below.

Phase 3: Required Configuration

Step 5: Configure Subsidiaries

Navigation: Setup > Company > Subsidiaries
RequirementDetails
MinimumAt least one active subsidiary
StatusMust be Active
Required FieldsName, Country, Currency
OrderCreate parent subsidiaries first

Step 6: Configure Payment Terms

Navigation: Billing > Setup > Payment Terms > New
Term TypeUse CaseConfiguration
StandardNet 30, Net 60, etc.Set Days Till Net Due
Date DrivenDue on specific dateSet specific due date rules

Step 7: Multi-Currency Setup (Optional)

Navigation: Setup > Company > Enable Features > Company tab
SettingNotes
Multiple CurrenciesCheck if needed
Base CurrencySet immediately (cannot change later)
Currency ListConfigure at Lists > Accounting > Currencies

Step 8: Deal Stages Configuration

Navigation: Setup > Sales > Customer Statuses > New
StageSuggested ProbabilityType
In Progress10-25%Prospect
In Discussion25-40%Prospect
Identified Decision Makers40-60%Prospect
In Negotiation60-80%Prospect
Proposal75-90%Prospect
Purchasing90-95%Prospect
Closed - Won100%Prospect
Closed - Lost0%Prospect

Phase 4: Generate Certificate in Core8

  1. Log into your Core8 account
  2. Navigate to SettingsIntegrationsNetSuite
  3. Click Generate Certificate
  4. The certificate (.pem file) will automatically download
  5. Save this file securely - you’ll need it in the next phase

Phase 5: Create OAuth 2.0 Client Credentials Mapping

This phase is critical - without it, authentication will fail:

Upload Certificate and Create Mapping

Navigation: Setup > Integration > OAuth 2.0 Client Credentials (M2M) Setup
  1. Click New
  2. Fill in the following fields:
FieldValueNotes
UserSelect integration userUser the integration will operate as
RoleIntegration role from Phase 2Must have permissions configured
ApplicationIntegration from Phase 1The integration you created
CertificateUpload .pem fileThe certificate from Phase 4
  1. Click Save
  2. After saving, NetSuite will display a Certificate ID. Copy this Certificate ID immediately - you’ll need it to complete the setup in Core8.
CRITICAL: This OAuth 2.0 Client Credentials mapping links your certificate to a specific user and role. Without this mapping, authentication will fail with “invalid_grant” errors. Make sure to save the Certificate ID shown after creating the mapping.

Permissions Reference

Navigate to the role’s Permissions tab and configure:

Setup Tab

PermissionLevelPurpose
REST Web ServicesFullAPI communication
Log in using Access TokensFullOAuth authentication
Access Token ManagementFullToken lifecycle
SuiteAnalytics WorkbookFullSuiteQL queries

Transactions Tab

PermissionLevelPurpose
InvoiceFullCreate/update invoices
OpportunityFullManage deals
Find TransactionFullSearch records

Reports Tab

PermissionLevelPurpose
SuiteAnalytics WorkbookFullExecute queries

Lists Tab

PermissionLevelPurpose
CustomersFullCreate/update customers
ContactsFullManage contacts
ItemsFullReference products, create discount items
SubsidiariesViewRequired for customers
TermsViewPayment terms
CurrencyViewMulti-currency
Billing SchedulesViewBilling frequencies
Customer CategoriesViewCustomer tiers

Custom Record Tab

PermissionLevelPurpose
Custom Record - il_supp_langsViewPDF languages
Custom List - esc_industriesViewIndustry list
Note: These appear only after creating custom records.

Custom Fields & Records

Part A: Create Custom Lists

1. Industry List

Navigation: Customization > Lists, Records, & Fields > Lists > New
FieldValue
NameESC Industries
IDesc_industries
ValuesTechnology, Healthcare, Manufacturing, Retail, etc.

2. PDF Language Record Type

Navigation: Customization > Lists, Records, & Fields > Record Types > New
FieldValue
NameIL Supported Languages
IDil_supp_langs
TypeCustom Record Type (not List)
FieldsAdd language code and description fields

Part B: Create Entity Fields

Navigation: Customization > Lists, Records, & Fields > Entity Fields > New
FieldLabelID (auto-prefixed)TypeList/RecordApplies To
PDF LanguagePDF Languagecustentity_il_pdf_langList/RecordIL Supported LanguagesCustomer ✅
IndustryIndustrycustentity_esc_industryList/RecordESC IndustriesCustomer ✅
Tax IDTaxpayer IDcustentity_il_taxpayer_idText-Customer ✅
Important: NetSuite automatically adds the “custentity_” prefix to entity field IDs.

How Core8 Connects

Core8 connects to NetSuite using certificate-based authentication (OAuth 2.0 Client Credentials).

Authentication Details

ConfigurationValue
Account IDYour NetSuite account identifier
OAuth Scoperest_webservices
Grant Typeclient_credentials
AuthenticationJWT signed with certificate private key
Certificate Validity2 years

Required Headers

The integration sends these headers with all API requests:
  • Authorization: Bearer {accessToken}
  • Accept: application/json
  • Content-Type: application/json
  • Prefer: transient

Endpoints Used

The integration uses these REST API endpoints:
EndpointPurpose
/services/rest/record/v1/*CRUD operations
/services/rest/query/v1/suiteqlData queries
/services/rest/auth/oauth2/v1/tokenJWT token exchange
/services/rest/record/v1/metadata-catalogField metadata

Rate Limiting

Core8 automatically handles NetSuite’s rate limits:
Error TypeStrategyMax RetriesDelays
429 Rate LimitExponential backoff35s, 10s, 20s (max 30s)
401/403 AuthToken refresh + retry31s, 2s, 4s (max 5s)
Network ErrorsExponential backoff31s, 2s, 4s

Concurrency Limits

Limit TypeDefaultNotes
Per User (RESTlets)5 concurrentStandard limit
Integration TotalVariesBased on licenses
MonitoringSetup > Integration > Integration GovernanceOptional admin tool
Platform Note: The integration handles limits reactively without client-side concurrency control. It relies on NetSuite’s server-side rate limiting. Monitoring is an optional administrative task.

Data Access

The configured permissions provide access to these NetSuite tables via SuiteQL: Note: Custom tables appear with prefixes like customrecord_ and customlist_ in queries.
TablePurposeOperations
customerCustomer recordsFull CRUD
contactContact managementFull CRUD
itemProduct catalogRead only
transactionInvoices & opportunitiesFull CRUD
subsidiaryOrganization structureRead only
termPayment termsRead only
currencyCurrency settingsRead only
billingScheduleBilling schedulesRead only
entitystatusDeal stagesRead only
customercategoryCustomer tiersRead only

Post-Setup in Core8

Phase 6: Complete Setup in Core8

  1. Return to Core8 (from Phase 4 where you generated the certificate)
  2. Enter the following credentials:
    • NetSuite Account ID (from Step 2)
    • Client ID (from Step 3)
    • Certificate ID (from Phase 5)
  3. Click Connect
  4. Test the connection to ensure authentication works
Core8 Configuration

Configure Integration Settings

Once connected, configure these settings in the Configuration tab:
SettingPurpose
Default SubsidiaryRequired for new customers
Default Payment TermsRequired for new customers
Default PDF LanguageCustomer communication preference
Field MappingsMap NetSuite fields to Core8

Sync Options per Object Type:

  • Always - Full bidirectional sync
  • Read-Only - Import from NetSuite only
  • Never - No sync for this object type
Note: Products in NetSuite are always read-only in Core8.

Troubleshooting

Common Connection Issues

ErrorCheck LocationSolution
”Invalid Grant”OAuth 2.0 MappingCheck OAuth 2.0 Client Credentials mapping exists
”Invalid Client”Integration RecordVerify Client ID matches your integration
”Invalid NetSuite Account ID”Core8 SetupCheck format (e.g., 1234567 or 1234567_SB2) and verify it matches your NetSuite account
”Invalid certificate ID”Core8 SetupVerify Certificate ID matches the one shown in NetSuite OAuth mapping
”Certificate not found”Core8Generate new certificate and re-upload
”JWT signature invalid”CertificateEnsure certificate matches the one in NetSuite
”429 Too Many Requests”N/AWait for retry (automatic)
“401/403 Unauthorized”User/Role permissionsCheck OAuth mapping user has correct role
”No subsidiary selected”ConfigurationSelect default subsidiary
”No term selected”ConfigurationSelect payment terms
”No language selected”ConfigurationSelect PDF language

Certificate-Specific Issues

IssueSolution
Certificate expiring soon (< 60 days)Generate new certificate in Core8 and update NetSuite
Lost private keyGenerate new certificate - private keys cannot be recovered
Multiple certificatesNetSuite supports multiple active certificates for rotation
Certificate expiredGenerate new certificate immediately to restore connection

Common Configuration Issues

IssueCheck LocationSolution
Empty subsidiary listSubsidiaries setupCreate at least one
Missing custom fieldsCustom FieldsCreate required fields
No payment termsPayment TermsAdd standard terms
SuiteQL errorsEnable FeaturesEnable SuiteAnalytics Workbook
Product sync errorsProductsSync products before using in deals/invoices
Network timeoutConnectionCheck network/firewall settings

Testing Your Setup

Optional Test Data

If you want to test with sample data:
Record TypeNavigationRequired Fields
CustomerLists > Relationships > Customers > NewCompany Name, Subsidiary, Terms
ProductLists > Accounting > Items > NewType: Non-inventory or Service
OpportunityTransactions > Sales > Create OpportunityLink to test customer

Verify Permissions

  1. Log in as integration user (or use “Login As”)
  2. Try accessing each record type
  3. Verify you can view required lists

Additional Resources

Documentation

Support Contacts

SupportContactInclude in Request
Core8support@core8.comNetSuite Account ID, Screenshots, Error messages
NetSuiteVia NetSuite UI: Support > Contact SupportReference REST Web Services and OAuth 2.0

Visual References

Look for these key elements in NetSuite:
  1. Enable Features Page - Checkboxes for required features
  2. Company Information Page - Account ID at the top
  3. Integration Record - Client ID display
  4. Manage Roles Page - Edit/Customize buttons
  5. Permissions Tab - 5 sub-tabs for different permissions
  6. Custom Field Creation - Entity field forms

Document Version: 2.1 | Last Updated: January 2025 | Validated against Core8 codebase