NetSuite integrations Table of contents: Articles

How to connect to NetSuite’s SuiteTalk REST API using node.js

Connecting to NetSuite’s SuiteTalk REST API can be complicated.

The node.js Javascript code below has been tested and works 100%. It uses token-based authentication (TBA) to connect to the NetSuite REST API.

First, install the necessary node modules:

npm install axios oauth-1.0a crypto-js querystring

Create a new code file with the code listed below. Type in your account ID, consumer key, consumer secret, token ID and token secret in the ‘NetSuite TBA credentials’ section and uncomment those lines.

Then run the code with:

node FILENAME.js

It should work!


const axios = require('axios');
const OAuth = require('oauth-1.0a');
const CryptoJS = require('crypto-js');
const querystring = require('querystring');

// NetSuite TBA credentials
// const accountId = 'YOUR_ACCOUNT_ID'; // Your NetSuite account ID (without dashes)
// const consumerKey = 'YOUR_CONSUMER_KEY'; // Your Consumer Key from NetSuite
// const consumerSecret = 'YOUR_CONSUMER_SECRET'; // Your Consumer Secret from NetSuite
// const tokenKey = 'YOUR_TOKEN_KEY'; // Your Token ID from NetSuite
// const tokenSecret = 'YOUR_TOKEN_SECRET'; // Your Token Secret from NetSuite

// Set up OAuth
const oauth = OAuth({
    consumer: { key: consumerKey, secret: consumerSecret },
    signature_method: 'HMAC-SHA256',
    realm: accountId,
    hash_function(base_string, key) {
      return CryptoJS.HmacSHA256(base_string, key).toString(CryptoJS.enc.Base64);
    },
  });
  
  const getNetSuiteData = async () => {

    // Base URL for NetSuite API
    const baseUrl = `https://${accountId}.suitetalk.api.netsuite.com/services/rest/record/v1/customer`;

    const queryParams = {
      limit: 10,   
      offset: 0   
    };
  
    // Proper encoding of special characters
    const encodedQueryString = querystring.stringify(queryParams)
      .replace(/\!/g, "%21")
      .replace(/\'/g, "%27")
      .replace(/\(/g, "%28")
      .replace(/\)/g, "%29")
      .replace(/\*/g, "%2A");
  
  
    // Full URL with properly encoded query string
    const fullUrl = `${baseUrl}?${encodedQueryString}`;
  
    const request_data = {
      url: fullUrl, 
      method: 'GET', 
    };
  
    // Generate OAuth signature
    const token = {
      key: tokenKey,
      secret: tokenSecret,
    };
    const headers = oauth.toHeader(oauth.authorize(request_data, token));
    headers['Content-Type'] = 'application/json';
  
    try {

      const response = await axios({
        url: request_data.url,
        method: request_data.method,
        headers: headers,
      });
  
      console.log('Response data:', response.data);
    } catch (error) {

        if (error.response) {
        console.error('Error response:', error.response.data);
      } else {
        console.error('Error message:', error.message);
      }
    }
  };
  
  getNetSuiteData();