The NetSuite 2026.1 release rolled out to most accounts between March and May 2026. Five changes in this release directly affect how integrations are written — and one of them silently breaks a pattern that’s been in production code for over a decade.
Who this is for: developers maintaining a NetSuite ↔ WooCommerce, Shopify, or custom-storefront integration. If your code uses SuiteTalk, REST web services, or SuiteScript, at least one of the five changes will touch you.
1. TBA is now end-of-life for new accounts
Token-Based Authentication has been the default for SuiteTalk integrations since 2017. In 2026.1, accounts provisioned after April no longer get the option to issue new TBA tokens — only OAuth 2.0 M2M is available. Existing tokens continue to work for now, but the writing is on the wall.
If you maintain integration code that still uses TBA, the migration isn’t complex but it does change how your secret rotation works. We covered the full process in our TBA vs OAuth 2.0 comparison and the M2M setup guide — both are still current under 2026.1.
2. SuiteQL gets joins on saved searches
This is the quiet release win. SuiteQL — NetSuite’s SQL-ish query language exposed over REST — can now join the output of a saved search inline, which means you can keep complex business logic in a saved search and still extract the data over a single HTTP call. Previously you had to either run the search via the deprecated saved-search REST endpoint or duplicate its filters as SuiteQL WHERE clauses.
-- Pre-2026.1: two round trips (search + query) or rewrite filters
-- 2026.1: one query, joined to the saved-search results
SELECT
item.itemid,
search_result.custrecord_low_stock_flag
FROM
item
INNER JOIN ( SELECT * FROM SavedSearch('customsearch_low_stock') ) search_result
ON search_result.itemid = item.id
WHERE
item.isinactive = 'F'
3. Item inventory webhook payload changed
This is the silent breaker. The itemInventoryUpdate webhook payload now omits the legacy quantityAvailable field by default and ships quantityAvailableByLocation as a nested array instead. If your sync code reads quantityAvailable and writes it to a storefront, the sync will start writing null after the account upgrades.
The fix is one line — sum the per-location array — but you have to know about it. NetSuite did flag this in the release notes, but the flag is on page 247.
4. Native deduplication on REST POSTs
REST endpoints now accept an Idempotency-Key header. If you POST the same key twice within 24 hours, the second call returns the original response without re-executing. This was the single most-requested feature in the SuiteCloud developer survey for 2025, and it makes retry logic dramatically simpler.
If you’ve been writing your own deduplication keys via a custom record (most of us were), you can retire that record after a transition period and let NetSuite handle it natively.
5. SuiteScript 2.1 enables top-level await
The Rhino-era constraints of SuiteScript 2.0 finally relaxed. SuiteScript 2.1 in 2026.1 supports top-level await in user-event and scheduled scripts. If you’ve been chaining promises three levels deep just to call two record-lookup APIs in sequence, you can flatten that out.
2.0 scripts still run unchanged; this isn’t a forced migration. But new development is worth writing in 2.1 from day one.
FAQ
When does my account upgrade to 2026.1?
NetSuite stages release waves by region and account size. Most US/EU mid-market accounts moved in April; the long tail finishes by late May. Check the Release Preview link in your account dashboard for the exact date.
Will my existing TBA tokens stop working in 2026.1?
No. Existing tokens continue to work. You only lose the ability to issue new tokens on accounts provisioned after the cutoff. Plan the migration on your timeline, not in a panic.
How do I know if my code reads the deprecated inventory field?
Grep your integration code for quantityAvailable as a property access (not part of quantityAvailableByLocation). Anywhere it appears, you’ll need to either map the nested array or request the legacy field explicitly via the ?expandSubResources=true query parameter, which is supported as a transitional flag through 2026.2.
Is SuiteScript 2.1 a breaking change for 2.0 code?
No. 2.0 and 2.1 coexist. You pick the version per script file in the @NApiVersion JSDoc tag. New scripts default to 2.1 in the UI editor; existing scripts stay on 2.0 until you bump them.
What to do this month
- Audit your sync code for
quantityAvailablereferences. Fix before your account upgrades, not after. - If you’re on TBA and managing more than one integration, schedule the OAuth 2.0 migration now while it’s still optional.
- Add
Idempotency-Keyheaders to your POST retry wrapper — even if you keep the custom dedup record around for now, the native key future-proofs the change.
If you’d rather have someone else handle the upgrade audit, our WooCommerce + NetSuite and Shopify + NetSuite implementation packages include a 2026.1 compatibility review as part of every engagement.