# NetSuite REST Record API URL Builder

> Source: https://netray.co/tools/netsuite-rest-record-api-url-builder
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: Free Tools

## Short answer

Generate correct REST web services URLs and sample calls for a NetSuite record, a record list, a SuiteQL query or the metadata catalog.

## Category

netsuite

## Erp

NetSuite

## Audience

- NetSuite developer
- Integration developer
- Technical consultant

## Tool

**Kind:** template

**Output:** code

**Language:** http

**Fields:**

#### Account ID (as in the URL)

**Key:** account

**Type:** text

**Default:** 1234567

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

#### Record type

**Key:** record_type

**Type:** text

**Default:** salesOrder

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

#### Internal ID

**Key:** internal_id

**Type:** text

**Default:** 4821

#### External ID

**Key:** external_id

**Type:** text

**Default:** SO-EXT-1001

#### Fields to return

**Key:** fields

**Type:** text

**Default:** tranId,entity,total,status

#### q filter

**Key:** filter

**Type:** text

**Default:** status IS salesOrder:B

**Help:** REST query filter value for the q parameter.

#### Page size

**Key:** row_limit

**Type:** number

**Default:** 100

**Blocks:**

#### Get one record by internal ID

**Body:** GET https://{{account}}.suitetalk.api.netsuite.com/services/rest/record/v1/{{record_type}}/{{internal_id}}?fields={{fields}}
Authorization: <OAuth 1.0 TBA header or OAuth 2.0 bearer token>
Content-Type: application/json

#### Get one record by external ID

**Body:** GET https://{{account}}.suitetalk.api.netsuite.com/services/rest/record/v1/{{record_type}}/eid:{{external_id}}
Authorization: <OAuth header>

#### List records with filter and paging

**Body:** GET https://{{account}}.suitetalk.api.netsuite.com/services/rest/record/v1/{{record_type}}?q={{filter}}&limit={{row_limit}}&offset=0
Authorization: <OAuth header>

#### Run a SuiteQL query

**Body:** POST https://{{account}}.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql?limit={{row_limit}}&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)

**Body:** GET https://{{account}}.suitetalk.api.netsuite.com/services/rest/record/v1/metadata-catalog/{{record_type}}
Accept: application/schema+json
Authorization: <OAuth header>

**Notes:** 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.

## Content

**Intro:** 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.

**Sections:**

#### How to use the builder

**Body:** 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

**Body:** 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.

**Bullets:**

- 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

**Body:** 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

**Body:** 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.

**Cta:** 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.

**Faq:**

#### What is the NetSuite REST API base URL?

**Answer:** 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?

**Answer:** 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?

**Answer:** 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?

**Answer:** 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.

## Search terms

netsuite rest api url, netsuite rest record api example, netsuite suitetalk rest url format, netsuite sandbox rest url, netsuite rest api external id, netsuite rest services record v1, netsuite rest api limit offset

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
