Setup
Create an integration role and integration record
- Web Services Only Role – No NetSuite UI
- Permissions – Role > Permissions > Setup- Log on using Access Tokens and SOAP Web Services
- Data Access
- Allow access to only the Transactions, Lists, and Custom Records required by the external application or process.
- Only allow certain operations by restricting access level
- Best Practices
- Do not set up one role to span multiple integrations.
- Instead, create multiple roles each with the specific access necessary.

Enable TBA – OAuth 1.0 for SOAP Services (OAuth 2.0 is only supported for the REST APIs)

Account Specific URLs
Finding your account-specific URL for SOAP Web Services
Setup > Company > Company Information > Company URLs (Tab) > Suite Talk
URL pattern: https://.suitetalk.api.netsuite.com
Get Data Center URLS
A request to https://webservices.netsuite.com/services/NetSuitePort__<version year>_<release>
Setup-Testing Applications
NetSuite SOAP WS UI (Bundle: 40834)
- Simple to install and included with NetSuite.
- Can be used to test NS SOAP Web Services, TBA, operations, and connectivity.
Postman and SOAP UI
- Great tool for prototyping and testing
- Free tools with great capabilities
- Commercial-level options available
Inbound Supported operations
- Regular CRUD Operations – Add, Get, Update(Upsert), Delete
- Multi-Record Operations – addList, getList, upserList etc
- Asynchronous operations – asyncAddList, asyncGetList, asyncUpsertList, getAsyncResult, checkAsyncStatus, etc
- Search operations – search, searchMoreWithId
- Utility operations – GetDataCenter URLS, changePassword/Email, getServerTime etc
Documentation
SuiteScript Schema Browser – system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2023_1/schema/record/account.html
Standard Web Services Definition Language file – webservices.netsuite.com/wsdl/v2023_1_0/netsuite.wsdl
Record Operations Limit


Individual Request Maximum size 100MB
Using SOAP WS UI

Select the WSDL list, and operation(here I used get), and click invoke.


Check Token-Based Authentication
Fill in all the details like consumer secret, token secret, account, consumer key, and token, and click generate TBA signature button


select RecordRef, type as any record and internal id of the record
Click write XML and send
Request XML
<soapenv:Envelope
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:platformCore='urn:core_2021_1.platform.webservices.netsuite.com'
xmlns:platformMsgs='urn:messages_2021_1.platform.webservices.netsuite.com'>
<soapenv:Header>
<tokenPassport xsi:type='platformCore:TokenPassport'>
<account xsi:type='xsd:string'>TSTDR*******</account>
<consumerKey xsi:type='xsd:string'>dc*****************</consumerKey>
<token xsi:type='xsd:string'>0259*******************</token>
<nonce xsi:type='xsd:string'>MTY4ODQ0OTQ3Nw</nonce>
<timestamp xsi:type='xsd:long'>1688449477</timestamp>
<signature algorithm='HMAC_SHA256' xsi:type='platformCore:TokenPassportSignature'>Gai9Uc0UBulc97gJGWljNkbdlyzjdLQdWKscrTVzNYU=</signature>
</tokenPassport>
</soapenv:Header>
<soapenv:Body>
<get xsi:type='platformMsgs:GetRequest'>
<baseRef xsi:type='platformCore:RecordRef' internalId='3' type='customer'/>
</get>
</soapenv:Body>
</soapenv:Envelope>
Response
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<platformMsgs:documentInfo
xmlns:platformMsgs="urn:messages_2021_1.platform.webservices.netsuite.com">
<platformMsgs:nsId>WEBSERVICES_TSTDRV2747395_070320235274234132012008080_f82157</platformMsgs:nsId>
</platformMsgs:documentInfo>
</soapenv:Header>
<soapenv:Body>
<getResponse
xmlns="">
<platformMsgs:readResponse
xmlns:platformMsgs="urn:messages_2021_1.platform.webservices.netsuite.com">
<platformCore:status isSuccess="true"
xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com"/>
<platformMsgs:record internalId="3" xsi:type="listRel:Customer"
xmlns:listRel="urn:relationships_2021_1.lists.webservices.netsuite.com">
<listRel:customForm internalId="-2"
xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
<platformCore:name>Standard Customer Form</platformCore:name>
</listRel:customForm>
<listRel:entityId>1</listRel:entityId>
<listRel:isPerson>false</listRel:isPerson>
<listRel:companyName>Anonymous</listRel:companyName>
<listRel:entityStatus internalId="13"
xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
<platformCore:name>CUSTOMER-Closed Won</platformCore:name>
</listRel:entityStatus>
<listRel:defaultAddress>Anonymous
United States</listRel:defaultAddress>
<listRel:isInactive>false</listRel:isInactive>
<listRel:dateCreated>2017-10-31T13:55:46.000-07:00</listRel:dateCreated>
<listRel:emailPreference>_default</listRel:emailPreference>
<listRel:subsidiary internalId="1"
xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
<platformCore:name>Parent Company</platformCore:name>
</listRel:subsidiary>
<listRel:taxExempt>true</listRel:taxExempt>
<listRel:creditHoldOverride>_auto</listRel:creditHoldOverride>
<listRel:balance>0.0</listRel:balance>
<listRel:overdueBalance>0.0</listRel:overdueBalance>
<listRel:unbilledOrders>125.0</listRel:unbilledOrders>
<listRel:currency internalId="1"
xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
<platformCore:name>USA</platformCore:name>
</listRel:currency>
<listRel:depositBalance>0.0</listRel:depositBalance>
<listRel:shipComplete>false</listRel:shipComplete>
<listRel:taxable>false</listRel:taxable>
<listRel:aging>0.0</listRel:aging>
<listRel:aging1>0.0</listRel:aging1>
<listRel:aging2>0.0</listRel:aging2>
<listRel:aging3>0.0</listRel:aging3>
<listRel:aging4>0.0</listRel:aging4>
<listRel:giveAccess>false</listRel:giveAccess>
<listRel:accessRole internalId="14"
xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
<platformCore:name>Customer Center</platformCore:name>
</listRel:accessRole>
<listRel:sendEmail>false</listRel:sendEmail>
<listRel:receivablesAccount internalId="-10"
xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
<platformCore:name>Use System Preference</platformCore:name>
</listRel:receivablesAccount>
<listRel:webLead>No</listRel:webLead>
<listRel:lastModifiedDate>2023-06-25T23:11:31.000-07:00</listRel:lastModifiedDate>
<listRel:stage>_customer</listRel:stage>
<listRel:emailTransactions>false</listRel:emailTransactions>
<listRel:printTransactions>false</listRel:printTransactions>
<listRel:faxTransactions>false</listRel:faxTransactions>
<listRel:isBudgetApproved>false</listRel:isBudgetApproved>
<listRel:addressbookList>
<listRel:addressbook>
<listRel:defaultShipping>true</listRel:defaultShipping>
<listRel:defaultBilling>true</listRel:defaultBilling>
<listRel:isResidential>false</listRel:isResidential>
<listRel:addressbookAddress
xmlns:platformCommon="urn:common_2021_1.platform.webservices.netsuite.com">
<platformCommon:country>_unitedStates</platformCommon:country>
<platformCommon:addressee>Anonymous</platformCommon:addressee>
<platformCommon:addrText>Anonymous
United States</platformCommon:addrText>
<platformCommon:override>false</platformCommon:override>
</listRel:addressbookAddress>
<listRel:internalId>1</listRel:internalId>
</listRel:addressbook>
</listRel:addressbookList>
<listRel:contactRolesList>
<listRel:contactRoles>
<listRel:giveAccess>false</listRel:giveAccess>
<listRel:contact internalId="524"
xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
<platformCore:name>Test Contact</platformCore:name>
</listRel:contact>
<listRel:email>testabc@gmail.com</listRel:email>
<listRel:role internalId="14"
xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
<platformCore:name>Customer Center</platformCore:name>
</listRel:role>
<listRel:sendEmail>false</listRel:sendEmail>
</listRel:contactRoles>
<listRel:contactRoles>
<listRel:giveAccess>false</listRel:giveAccess>
<listRel:contact internalId="525"
xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
<platformCore:name>Test Contact 2</platformCore:name>
</listRel:contact>
<listRel:role internalId="14"
xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
<platformCore:name>Customer Center</platformCore:name>
</listRel:role>
<listRel:sendEmail>false</listRel:sendEmail>
</listRel:contactRoles>
</listRel:contactRolesList>
<listRel:currencyList>
<listRel:currency>
<listRel:currency internalId="1"
xmlns:platformCore="urn:core_2021_1.platform.webservices.netsuite.com">
<platformCore:name>USA</platformCore:name>
</listRel:currency>
<listRel:balance>0.0</listRel:balance>
<listRel:depositBalance>0.0</listRel:depositBalance>
<listRel:overdueBalance>0.0</listRel:overdueBalance>
<listRel:unbilledOrders>125.0</listRel:unbilledOrders>
<listRel:overrideCurrencyFormat>false</listRel:overrideCurrencyFormat>
<listRel:displaySymbol>$</listRel:displaySymbol>
<listRel:symbolPlacement>_beforeNumber</listRel:symbolPlacement>
</listRel:currency>
</listRel:currencyList>
</platformMsgs:record>
</platformMsgs:readResponse>
</getResponse>
</soapenv:Body>
</soapenv:Envelope>