Table of Contents
- Overview
- Complete Connection Process
- Pre-Connection Checklist
- Step-by-Step Setup Guide
- Permissions Reference
- Custom Fields & Records
- Post-Setup in Core8
- How Core8 Connects
- Troubleshooting
- Additional Resources
Overview
This guide provides comprehensive instructions for setting up NetSuite integration with Core8. Follow each section carefully to ensure successful integration.
Quick Links
| Resource | Description |
|---|
| OAuth 2.0 Client Credentials | Certificate-based authentication setup |
| REST Web Services | REST API configuration |
| SuiteQL Docs | Query language documentation |
| Roles Guide | Permissions configuration |
Complete Connection Process
This section provides a high-level overview of the entire connection process. Follow these 4 steps in order:
- 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
Configuration Requirements
Step-by-Step Setup Guide
Phase 1: Enable Core Features
Step 1: Enable Required Features
Navigation: Setup > Company > Enable Features
| Tab | Feature | Required | Purpose |
|---|
| SuiteCloud | REST Web Services | ✅ Yes | Enables API communication |
| SuiteCloud | OAuth 2.0 | ✅ Yes | Secure authentication |
| Analytics | SuiteAnalytics Workbook | ✅ Yes | Required 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
- Navigate to Setup > Company > Company Information
- Look at the top section of the page
- Find and copy your Account ID
| Field | Location | Format Examples |
|---|
| Account ID | Top section of Company Information | 1234567, 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
| Field | Value | Notes |
|---|
| Name | Core8 Integration | Or your preferred name |
| State | Enabled ✅ | Must be enabled |
| Client Credentials (M2M) Grant | ✅ Checked | Required for certificate auth |
| REST Web Services | ✅ Checked | Required for API access |
CRITICAL: After saving, immediately copy this value:This credential is shown only once! If you lose it, you’ll need to regenerate new credentials in the integration record.
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:
| Setting | Value |
|---|
| Name | Core8 Integration Role |
| Center Type | Classic Center |
Then configure permissions as detailed in the Permissions Reference section below.
Phase 3: Required Configuration
Navigation: Setup > Company > Subsidiaries
| Requirement | Details |
|---|
| Minimum | At least one active subsidiary |
| Status | Must be Active |
| Required Fields | Name, Country, Currency |
| Order | Create parent subsidiaries first |
Navigation: Billing > Setup > Payment Terms > New
| Term Type | Use Case | Configuration |
|---|
| Standard | Net 30, Net 60, etc. | Set Days Till Net Due |
| Date Driven | Due on specific date | Set specific due date rules |
Step 7: Multi-Currency Setup (Optional)
Navigation: Setup > Company > Enable Features > Company tab
| Setting | Notes |
|---|
| Multiple Currencies | Check if needed |
| Base Currency | Set immediately (cannot change later) |
| Currency List | Configure at Lists > Accounting > Currencies |
Step 8: Deal Stages Configuration
Navigation: Setup > Sales > Customer Statuses > New
| Stage | Suggested Probability | Type |
|---|
| In Progress | 10-25% | Prospect |
| In Discussion | 25-40% | Prospect |
| Identified Decision Makers | 40-60% | Prospect |
| In Negotiation | 60-80% | Prospect |
| Proposal | 75-90% | Prospect |
| Purchasing | 90-95% | Prospect |
| Closed - Won | 100% | Prospect |
| Closed - Lost | 0% | Prospect |
Phase 4: Generate Certificate in Core8
- Log into your Core8 account
- Navigate to Settings → Integrations → NetSuite
- Click Generate Certificate
- The certificate (.pem file) will automatically download
- 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
- Click New
- Fill in the following fields:
| Field | Value | Notes |
|---|
| User | Select integration user | User the integration will operate as |
| Role | Integration role from Phase 2 | Must have permissions configured |
| Application | Integration from Phase 1 | The integration you created |
| Certificate | Upload .pem file | The certificate from Phase 4 |
- Click Save
- 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
| Permission | Level | Purpose |
|---|
| REST Web Services | Full | API communication |
| Log in using Access Tokens | Full | OAuth authentication |
| Access Token Management | Full | Token lifecycle |
| SuiteAnalytics Workbook | Full | SuiteQL queries |
Transactions Tab
| Permission | Level | Purpose |
|---|
| Invoice | Full | Create/update invoices |
| Opportunity | Full | Manage deals |
| Find Transaction | Full | Search records |
Reports Tab
| Permission | Level | Purpose |
|---|
| SuiteAnalytics Workbook | Full | Execute queries |
Lists Tab
| Permission | Level | Purpose |
|---|
| Customers | Full | Create/update customers |
| Contacts | Full | Manage contacts |
| Items | Full | Reference products, create discount items |
| Subsidiaries | View | Required for customers |
| Terms | View | Payment terms |
| Currency | View | Multi-currency |
| Billing Schedules | View | Billing frequencies |
| Customer Categories | View | Customer tiers |
Custom Record Tab
| Permission | Level | Purpose |
|---|
| Custom Record - il_supp_langs | View | PDF languages |
| Custom List - esc_industries | View | Industry 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
| Field | Value |
|---|
| Name | ESC Industries |
| ID | esc_industries |
| Values | Technology, Healthcare, Manufacturing, Retail, etc. |
2. PDF Language Record Type
Navigation: Customization > Lists, Records, & Fields > Record Types > New
| Field | Value |
|---|
| Name | IL Supported Languages |
| ID | il_supp_langs |
| Type | Custom Record Type (not List) |
| Fields | Add language code and description fields |
Part B: Create Entity Fields
Navigation: Customization > Lists, Records, & Fields > Entity Fields > New
| Field | Label | ID (auto-prefixed) | Type | List/Record | Applies To |
|---|
| PDF Language | PDF Language | custentity_il_pdf_lang | List/Record | IL Supported Languages | Customer ✅ |
| Industry | Industry | custentity_esc_industry | List/Record | ESC Industries | Customer ✅ |
| Tax ID | Taxpayer ID | custentity_il_taxpayer_id | Text | - | 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
| Configuration | Value |
|---|
| Account ID | Your NetSuite account identifier |
| OAuth Scope | rest_webservices |
| Grant Type | client_credentials |
| Authentication | JWT signed with certificate private key |
| Certificate Validity | 2 years |
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:
| Endpoint | Purpose |
|---|
/services/rest/record/v1/* | CRUD operations |
/services/rest/query/v1/suiteql | Data queries |
/services/rest/auth/oauth2/v1/token | JWT token exchange |
/services/rest/record/v1/metadata-catalog | Field metadata |
Rate Limiting
Core8 automatically handles NetSuite’s rate limits:
| Error Type | Strategy | Max Retries | Delays |
|---|
| 429 Rate Limit | Exponential backoff | 3 | 5s, 10s, 20s (max 30s) |
| 401/403 Auth | Token refresh + retry | 3 | 1s, 2s, 4s (max 5s) |
| Network Errors | Exponential backoff | 3 | 1s, 2s, 4s |
Concurrency Limits
| Limit Type | Default | Notes |
|---|
| Per User (RESTlets) | 5 concurrent | Standard limit |
| Integration Total | Varies | Based on licenses |
| Monitoring | Setup > Integration > Integration Governance | Optional 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.
| Table | Purpose | Operations |
|---|
customer | Customer records | Full CRUD |
contact | Contact management | Full CRUD |
item | Product catalog | Read only |
transaction | Invoices & opportunities | Full CRUD |
subsidiary | Organization structure | Read only |
term | Payment terms | Read only |
currency | Currency settings | Read only |
billingSchedule | Billing schedules | Read only |
entitystatus | Deal stages | Read only |
customercategory | Customer tiers | Read only |
Post-Setup in Core8
Phase 6: Complete Setup in Core8
- Return to Core8 (from Phase 4 where you generated the certificate)
- Enter the following credentials:
- NetSuite Account ID (from Step 2)
- Client ID (from Step 3)
- Certificate ID (from Phase 5)
- Click Connect
- Test the connection to ensure authentication works
Once connected, configure these settings in the Configuration tab:
| Setting | Purpose |
|---|
| Default Subsidiary | Required for new customers |
| Default Payment Terms | Required for new customers |
| Default PDF Language | Customer communication preference |
| Field Mappings | Map 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
| Error | Check Location | Solution |
|---|
| ”Invalid Grant” | OAuth 2.0 Mapping | Check OAuth 2.0 Client Credentials mapping exists |
| ”Invalid Client” | Integration Record | Verify Client ID matches your integration |
| ”Invalid NetSuite Account ID” | Core8 Setup | Check format (e.g., 1234567 or 1234567_SB2) and verify it matches your NetSuite account |
| ”Invalid certificate ID” | Core8 Setup | Verify Certificate ID matches the one shown in NetSuite OAuth mapping |
| ”Certificate not found” | Core8 | Generate new certificate and re-upload |
| ”JWT signature invalid” | Certificate | Ensure certificate matches the one in NetSuite |
| ”429 Too Many Requests” | N/A | Wait for retry (automatic) |
| “401/403 Unauthorized” | User/Role permissions | Check OAuth mapping user has correct role |
| ”No subsidiary selected” | Configuration | Select default subsidiary |
| ”No term selected” | Configuration | Select payment terms |
| ”No language selected” | Configuration | Select PDF language |
Certificate-Specific Issues
| Issue | Solution |
|---|
| Certificate expiring soon (< 60 days) | Generate new certificate in Core8 and update NetSuite |
| Lost private key | Generate new certificate - private keys cannot be recovered |
| Multiple certificates | NetSuite supports multiple active certificates for rotation |
| Certificate expired | Generate new certificate immediately to restore connection |
Common Configuration Issues
| Issue | Check Location | Solution |
|---|
| Empty subsidiary list | Subsidiaries setup | Create at least one |
| Missing custom fields | Custom Fields | Create required fields |
| No payment terms | Payment Terms | Add standard terms |
| SuiteQL errors | Enable Features | Enable SuiteAnalytics Workbook |
| Product sync errors | Products | Sync products before using in deals/invoices |
| Network timeout | Connection | Check network/firewall settings |
Testing Your Setup
Optional Test Data
If you want to test with sample data:
| Record Type | Navigation | Required Fields |
|---|
| Customer | Lists > Relationships > Customers > New | Company Name, Subsidiary, Terms |
| Product | Lists > Accounting > Items > New | Type: Non-inventory or Service |
| Opportunity | Transactions > Sales > Create Opportunity | Link to test customer |
Verify Permissions
- Log in as integration user (or use “Login As”)
- Try accessing each record type
- Verify you can view required lists
Additional Resources
Documentation
| Support | Contact | Include in Request |
|---|
| Core8 | support@core8.com | NetSuite Account ID, Screenshots, Error messages |
| NetSuite | Via NetSuite UI: Support > Contact Support | Reference REST Web Services and OAuth 2.0 |
Visual References
Look for these key elements in NetSuite:
- Enable Features Page - Checkboxes for required features
- Company Information Page - Account ID at the top
- Integration Record - Client ID display
- Manage Roles Page - Edit/Customize buttons
- Permissions Tab - 5 sub-tabs for different permissions
- Custom Field Creation - Entity field forms
Document Version: 2.1 | Last Updated: January 2025 | Validated against Core8 codebase