Web Services and SuiteTalk
NetSuite Unknown
2026-07-25

Site Category Record Now Exposed via SuiteTalk REST API

The sitecategory record is available through REST web services at /services/rest/record/v1/siteCategory, with several sublist limitations and quirks around translations, presentationItem formatting, and HTML-wrapped string fields that developers need to handle.

Affects:SuiteTalk REST APISite BuilderSuiteCommercesitecategory record

What changed

The sitecategory record is now exposed through the SuiteTalk REST Web Services API. This lets you create, read, and update site categories programmatically via /services/rest/record/v1/siteCategory instead of relying solely on UI or SOAP-based workflows.

Record structure

The REST record includes the following subrecords:

  • categoryListLayout
  • correlatedItemListLayout
  • itemListLayout
  • parentCategory
  • relatedItemListLayout
  • siteMapPriority
  • storeDisplayImage
  • storeDisplayThumbnail
  • website

And the following sublists:

  • presentationItem — supported
  • translations — supported (read and PATCH only; POST is not supported)
  • audiencenot supported in REST
  • tag_subs_machinenot supported in REST

Gotchas and quirks

  • The siteCategoryType subrecord is read-only and always returns PRES.
  • The description and storeDetailedDescription string fields must be wrapped in HTML paragraph tags: <p>your text here</p>. Omitting the tags will likely cause validation errors or rendering issues.
  • The presentationItem sublist requires a composite key in the presentationItem field, formatted as {itemId}\u0003{itemType} (Item ID + Unicode ETX character + item type). The itemType value is fixed to INVTITEM. Example: "presentationItem": "99\u0003INVTITEM".
  • The translations sublist has an asymmetric API contract: in a PATCH request the locale field is a plain string (e.g., "es_ES"), but in a GET response it comes back as a subrecord object ({"id": "es_ES"}). Your deserialization logic needs to handle both shapes if you round-trip translation data.
  • When replacing translations via PATCH, you must use the ?replace=translations query parameter to do a full sublist replacement.

Prerequisites

The following features must be enabled before the record is accessible via REST:

  • Required: Site Builder (Web Store), Site Builder (Website)
  • For full field coverage: Advanced Site Customization, Multiple Web Sites, Upsell Manager, URL Component Aliases, Multi-Language, SuiteBundler, File Cabinet, SuiteCloud Development Framework, Document Publishing, Multi-Location Inventory

What to do

  1. Verify feature prerequisites. Go to Setup > Company > Enable Features and confirm that at a minimum Site Builder (Web Store) and Site Builder (Website) are enabled. Enable additional features from the list above if you need access to all fields.
  2. Use the REST API Browser to inspect the full field schema, supported HTTP methods, and request parameters for sitecategory before building integrations.
  3. Wrap HTML string fields. When POSTing or PATCHing, ensure description and storeDetailedDescription values are enclosed in <p> tags.
  4. Handle the presentationItem composite key. Build the presentationItem value using the pattern itemId + \u0003 + INVTITEM. This is a Unicode control character (ETX, U+0003), not a literal string — make sure your JSON serializer handles it correctly.
  5. Account for the locale shape mismatch in the translations sublist. Send locale as a string on PATCH, but expect a {"id": "..."} object on GET.
  6. Do not attempt to POST translations. Use PATCH with ?replace=translations to create or update translation entries after the site category record exists.
  7. Note the unsupported sublists. If your current SOAP or UI-based integration relies on audience or tag_subs_machine data, you cannot migrate that portion to REST — those sublists are not exposed.

Source note: This documentation page does not specify which NetSuite release introduced REST support for the site category record. Check the REST API Browser changelog or your account's release notes to confirm availability in your environment.