Obtain a valid OAuth 1.0a or OAuth 2.0 token scoped to your NetSuite account
POST to /services/rest/query/v1/suiteql with a JSON body containing a 'q' field holding the SuiteQL SELECT statement
Set the 'Prefer' header to 'transient' to receive all rows in one response, or omit it to use offset-based pagination with 'offset' and 'limit' query parameters
Parse the response 'items' array; each element is a flat object keyed by the column aliases in your SELECT
Use 'hasMore' and 'totalResults' fields (where present) to decide whether additional pages exist
Check the 'links' array in the response for a 'next' rel link as an alternative navigation signal
Known gotchas
SuiteQL enforces a maximum rows-per-page limit (consult current docs for the exact cap, as it has changed across releases); always implement pagination even when you expect few rows
Column names in the result object are lowercased; if your SELECT uses mixed-case aliases they will still arrive lowercased
Joining across record types that span different schema namespaces (e.g., transaction and transactionLine) requires the correct qualified table names — verify them in the Schema Browser in your account
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp