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