Skip to main content

Estimate API

Create, read, update, and delete estimates (quotes) using the NetSuite REST API.


Endpoints​

MethodEndpointDescription
GET/record/v1/estimateList all estimates
GET/record/v1/estimate/{id}Get specific estimate
POST/record/v1/estimateCreate new estimate
PATCH/record/v1/estimate/{id}Update estimate
DELETE/record/v1/estimate/{id}Delete estimate

Key Fields​

Header Fields​

FieldTypeDescriptionRequired
idstringInternal ID (read-only)-
tranIdstringEstimate numberAuto-generated
entityobjectCustomer/prospect referenceYes
tranDatestringEstimate date (ISO 8601)Yes
dueDatestringExpiration dateNo
statusobjectEstimate statusRead-only
subsidiaryobjectSubsidiaryYes (OneWorld)

Financial Fields​

FieldTypeDescriptionRequired
currencyobjectTransaction currencyYes
exchangeRatenumberExchange rateAuto-calculated
subTotalnumberSubtotal (read-only)-
taxTotalnumberTotal tax (read-only)-
totalnumberGrand total (read-only)-

Sales Fields​

FieldTypeDescriptionRequired
probabilitynumberWin probability % (0-100)No
salesRepobjectSales representativeNo
salesGroupobjectSales team/groupNo
partnerobjectPartner referenceNo
leadsourceobjectLead sourceNo

Billing & Shipping​

FieldTypeDescriptionRequired
billAddr1stringBilling address line 1No
billCitystringBilling cityNo
billStatestringBilling state/provinceNo
billZipstringBilling postal codeNo
billCountryobjectBilling countryNo
shipAddr1stringShipping address line 1No
shipCitystringShipping cityNo
shipStatestringShipping state/provinceNo
shipZipstringShipping postal codeNo
shipCountryobjectShipping countryNo

Other Fields​

FieldTypeDescriptionRequired
memostringInternal memoNo
messageobjectMessage to customerNo
titlestringEstimate titleNo
otherRefNumstringExternal reference numberNo
createdFromobjectSource transaction (e.g., Opportunity)No

Sublists​

FieldTypeDescriptionRequired
itemcollectionLine itemsYes (at least 1)

Line Items​

The item sublist contains the products/services being quoted.

Item Line Fields​

FieldTypeDescriptionRequired
itemobjectItem referenceYes
quantitynumberQuantityYes
ratenumberUnit priceYes
amountnumberLine total (qty × rate)Auto-calculated
descriptionstringLine descriptionNo
taxCodeobjectTax codeNo
taxRate1numberTax rate %Auto-calculated
grossAmtnumberAmount including taxAuto-calculated
isClosedbooleanLine closedNo

Example: Create Estimate​

POST /record/v1/estimate
Content-Type: application/json
{
"entity": {
"id": "456"
},
"tranDate": "2025-12-25",
"dueDate": "2026-01-25",
"subsidiary": {
"id": "1"
},
"currency": {
"id": "1"
},
"salesRep": {
"id": "123"
},
"probability": 75,
"title": "Q1 2026 Product Proposal",
"memo": "Q4 2025 renewal quote",
"message": {
"id": "1"
},
"item": {
"items": [
{
"item": { "id": "789" },
"quantity": 10,
"rate": 99.99,
"description": "Premium Widget - Annual License"
},
{
"item": { "id": "790" },
"quantity": 10,
"rate": 29.99,
"description": "Support & Maintenance - 1 Year"
}
]
}
}

Response:

{
"id": "2001",
"tranId": "EST-2001",
"entity": {
"id": "456",
"refName": "Acme Corporation"
},
"tranDate": "2025-12-25",
"dueDate": "2026-01-25",
"status": {
"id": "A",
"refName": "Open"
},
"probability": 75,
"subTotal": 1299.80,
"taxTotal": 103.98,
"total": 1403.78,
"links": [
{
"rel": "self",
"href": "https://{account}.suitetalk.api.netsuite.com/services/rest/record/v1/estimate/2001"
}
]
}

Example: Update Estimate​

PATCH /record/v1/estimate/2001
Content-Type: application/json
{
"probability": 90,
"memo": "Customer very interested - follow up scheduled",
"dueDate": "2026-02-15"
}

Estimate Statuses​

StatusDescription
OPENActive quote, not yet converted
PROCESSEDConverted to sales order/invoice
CLOSEDManually closed/expired

Convert to Sales Order​

Create a sales order from an estimate:

POST /record/v1/salesOrder
Content-Type: application/json
{
"createdFrom": {
"id": "2001"
},
"entity": { "id": "456" },
"tranDate": "2025-12-25"
}
Auto-Fill from Estimate

When you provide createdFrom with an estimate ID, NetSuite auto-fills customer, items, prices, and addresses from the estimate.


Query Filters​

Find Open Estimates​

GET /record/v1/estimate?q=status='OPEN'

Find by Customer​

GET /record/v1/estimate?q=entity='456'

Find by Sales Rep​

GET /record/v1/estimate?q=salesRep='123'

Find High Probability Quotes​

GET /record/v1/estimate?q=probability >= 75 AND status='OPEN'

Find by Date Range​

GET /record/v1/estimate?q=tranDate BETWEEN '2025-01-01' AND '2025-12-31'

Find Expiring Soon​

GET /record/v1/estimate?q=dueDate < SYSDATE+30 AND status='OPEN'

Important Notes​

No Accounting Impact​

  • Estimates do not affect the general ledger
  • They are sales tracking documents only
  • No journal entries are created

Estimate Expiration​

  • dueDate represents the quote expiration date
  • Expired estimates can still be converted
  • Use custom workflows to auto-close expired estimates

Probability Tracking​

  • Win probability is used for sales forecasting
  • Does not affect transaction processing
  • Typically tied to sales stages

Converting Estimates​

  • Can be converted to Sales Orders or Invoices
  • Original estimate status changes to "Processed"
  • Maintains reference link via createdFrom

Multi-Currency​

  • Currency is set at estimate creation
  • Exchange rates are captured at time of creation
  • Converted transactions inherit the same currency

Item Availability​

  • Estimates do not reserve inventory
  • Convert to Sales Order to reserve stock
  • Check item availability separately

See Also​