NetSuiteFree generatorPDF, Excel, Word exportNetSuite

NetSuite REST Record API URL Builder

NetSuite REST web services use a predictable URL pattern, but small details such as the account ID format for sandboxes trip people up. This builder produces the URLs for the common calls so you can paste them into Postman or your code.

Fill in

Use lowercase and replace underscores with hyphens, for example 1234567-sb1 for a sandbox account 1234567_SB1.

REST record type name, for example customer, salesOrder, vendorBill, inventoryItem.

REST query filter value for the q parameter.

Generated code
Download:

Get one record by internal ID

GET https://1234567.suitetalk.api.netsuite.com/services/rest/record/v1/salesOrder/4821?fields=tranId,entity,total,status
Authorization: <OAuth 1.0 TBA header or OAuth 2.0 bearer token>
Content-Type: application/json

Get one record by external ID

GET https://1234567.suitetalk.api.netsuite.com/services/rest/record/v1/salesOrder/eid:SO-EXT-1001
Authorization: <OAuth header>

List records with filter and paging

GET https://1234567.suitetalk.api.netsuite.com/services/rest/record/v1/salesOrder?q=status IS salesOrder:B&limit=100&offset=0
Authorization: <OAuth header>

Run a SuiteQL query

POST https://1234567.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql?limit=100&offset=0
Authorization: <OAuth header>
Content-Type: application/json
Prefer: transient

{ "q": "SELECT id, tranid FROM transaction WHERE type = 'SalesOrd' FETCH FIRST 10 ROWS ONLY" }

Record metadata (JSON schema)

GET https://1234567.suitetalk.api.netsuite.com/services/rest/record/v1/metadata-catalog/salesOrder
Accept: application/schema+json
Authorization: <OAuth header>

Verify the record type name against the REST API Browser in your account (Setup > Integration), since not every record is exposed through REST and some names differ from SuiteScript record types. The q filter syntax is specific to REST and differs from SuiteQL. Always test in a sandbox account first.

NetSuite integration review

Optional review of your REST integration design, authentication and concurrency approach.

Optional. The tool and every export work without this. No spam.

How to use the builder

Enter the account ID the way it appears in your NetSuite URL, lowercase with underscores replaced by hyphens. Fill in the record type, the internal ID or external ID, the fields you want and the paging size. The output lists a single-record GET, an external ID GET, a filtered list, a SuiteQL POST and a metadata request. Copy the one you need and add the authorization header from your TBA or OAuth 2.0 setup.

URL structure

The host is the account ID followed by suitetalk.api.netsuite.com. Record calls live under services/rest/record/v1, SuiteQL under services/rest/query/v1/suiteql and the metadata catalog under services/rest/record/v1/metadata-catalog. An external ID is addressed with the eid: prefix in place of the internal ID. The fields parameter limits the response, and expandSubResources returns sublists such as item lines instead of links to them.

  • Sandbox hosts use a hyphenated suffix such as 1234567-sb1
  • Use eid: before an external ID
  • limit and offset page list results
  • SuiteQL needs the Prefer: transient header

Authentication and permissions

REST calls need either OAuth 1.0 token-based authentication or OAuth 2.0. The integration role must have the REST Web Services permission and the record-level permissions for what you read or write. A 403 or insufficient permission error usually points to the role, not the URL. Calls also count against concurrency limits for the account, so avoid running many parallel requests from one integration.

Common mistakes

Typical errors are using the production host for a sandbox account, leaving an uppercase or underscore in the account segment, asking for a record type REST does not support, and expecting sublists in the default response. Another is paging without a stable order, which can duplicate or skip rows when data changes between pages.

Frequently Asked Questions

What is the NetSuite REST API base URL?

It is https://ACCOUNTID.suitetalk.api.netsuite.com/services/rest followed by record/v1, query/v1 or another service path. The account ID is lowercase and underscores become hyphens, so a sandbox looks like 1234567-sb1.

How do I fetch a record by external ID?

Replace the internal ID in the path with eid: and the external ID value, for example record/v1/customer/eid:CUST-100. The record must have the external ID set, and the external ID must be unique for that record type.

Does REST return all sublist data?

By default sublists appear as links. Add expandSubResources=true to include them inline, or follow the links. For large transactions, requesting the sublist separately can be lighter.

Can I run saved searches over REST?

Not directly through the record service. Use SuiteQL for query needs, or expose a saved search through a RESTlet if you need its exact behavior.

If you are connecting NetSuite to other systems, Netray builds custom integrations and read-only AI over NetSuite data, with the underlying calls shown for review.