Quoter Quote import for NetSuite

Developer guide

How to launch Quoter from NetSuite, and what to do with the JSON it produces.

1 · Launching Quoter

Quoter is opened from a customer record in NetSuite with the rep and customer identity passed in the query string. All four parameters are required — without them the import screen disables extraction.

https://quoter.paragonmicro.com/?customer_id=4482917 &customer_name=Acme%20Manufacturing%2C%20Inc. &netsuite_user=Joel%20Santos &netsuite_user_id=70312
ParameterTypeMeaning
customer_idintNetSuite internal id of the customer. Must be numeric — extraction rejects anything else with a 400. Becomes customer in the output.
customer_namestringDisplay name shown to the rep for confirmation. Not used for resolution.
netsuite_userstringRep's display name. Logged with every extraction and feedback entry.
netsuite_user_idstringRep's NetSuite internal id. Logged alongside the name.

URL-encode the values (%20 for spaces, %2C for commas). Quoter stores nothing between visits — every launch is a fresh, stateless session.

2 · The output JSON

After the rep reviews and edits the extraction, the result is one JSON object shaped for NetSuite estimate creation. Sample (values invented):

{ "quoteName": "Q-30589412 Network Refresh", "poNum": null, "internalNotes": "Previous PO: P5202256", "dropShip": null, "shipMethod": "133311", "customer": 4482917, "formId": 168, "customerContact": null, "externalNotes": null, "startDate": null, "endDate": null, "autoRenew": null, "billFrequency": null, "subProvider": null, "subTerms": null, "config": null, "items": [ { "vpn": "7567705", "mpn": "PSY29U-09J00F", "manufacturer": "Dynabook", "description": "C50-K I7-150U/15FD 16/512GB W11P 1YR", "qty": 4, "cost": 591.76, "price": 929.99, "vendor": 113682, "vendorQuote": "96392303", "item": null } ] }

Header fields

FieldTypeNotes
customerintNetSuite customer internal id, straight from the launch URL.
formIdintNetSuite custom form internal id. Per-vendor config; defaults to 168.
shipMethodstring·nullNetSuite ship-method internal id (e.g. "133311"). Pre-selected per vendor; rep can change or clear it.
quoteName / poNum / internalNotesstring·nullExtracted from the document; rep-editable. Empty means null, never "".
dropShipbool·nullTri-state. null means the document didn't say — do not coerce to false.
customerContact, externalNotes, startDate, endDate, autoRenew, billFrequency, subProvider, subTerms, configReserved; always null today. Accept and ignore.

Line items (items[])

FieldTypeNotes
vpn / mpnstring·nullVendor part number / manufacturer part number, transcribed verbatim from the quote document.
manufacturerstring·nullAs printed on the quote (occasionally best-effort inferred; the rep reviews before export).
descriptionstring·nullVerbatim product description; can be several hundred characters.
qtynumber·nullBlank quantities on the source default to 1 at extraction.
cost / pricenumber·nullPer-unit, 2dp. cost = what the vendor charges us; price = list/MSRP. Negative values are legitimate (credits/promos). Never extended totals.
vendorintNetSuite vendor internal id, injected from Quoter's vendor config — same on every line.
vendorQuotestring·nullThe vendor's quote number, repeated on each line.
itemnullNetSuite item internal id — always null from Quoter. Resolve it on your side (vpn/mpn lookup) during import.

3 · Processing for NetSuite

Today reps hand the JSON to your import script via the raw-JSON inspector. The upcoming Create Quote in NetSuite button will POST this exact payload to an endpoint you provide — build your processor against the shape above and nothing changes when the button goes live.

Recommended import checklist:

  • Validate customer exists and is active before creating the estimate.
  • Resolve each line's item from vpn/mpn; route unresolved lines to a review queue rather than dropping them.
  • Treat null as "not supplied" everywhere — especially dropShip (tri-state) and price (some vendors publish no list price).
  • Money is per-unit: extended totals are qty × cost on your side. Expect legitimate negative lines.
  • shipMethod and formId are already NetSuite internal ids — no mapping needed.

Questions or a field you need added? Talk to the Quoter admin — the schema is versioned and the footer of every page shows the running version.