Skip to main content

Bid Desk: reading bids and bills of materials

An app such as an ERP connector or a PLM or CAD sync can read a tenant's bids and its assemblies' bills of materials through app API 2027-01. It reads the same rows a person with the same rights would see, minus anything confidential to a bid's members and minus every cost, margin and money field.

Bid Desk is an add-on. On a tenant without it, every Bid Desk query refuses an app with the same message a person gets: Bid Desk is an add-on. Contact Growmax to add it. Bills of materials also need the add-on's engineered-products feature.

Scopes​

Ask for these in your manifest's scopes. The consent screen shows each one's sentence.

ScopeConsent sentenceWhat it lets the app call
read_bidsRead bids open to the whole organization, and the hand-over package of a won bid, without costs or margins.bid, bidHandoverPackage
read_assembliesRead assemblies' bills of materials and where each part is used.bomVersion
write_assembliesCreate and edit draft bills of materials. Releasing a bill of materials stays with a person.everything read_assemblies allows; the write commands come in a later API package

A bid's customerName also needs read_customers, because it comes from the customer record.

Queries​

query OneBid {
bid(id: "…") {
id
bidNumber
title
status
stage
visibility
currency
customerId
ownerUserId
closedAt
updatedAt
}
}

query HandedOver {
bidHandoverPackage(bidId: "…") {
bidNumber
outcome
quoteId
quoteNumber
salesOrderId
packageHash
lines { nodePath productId variantId sku description quantity unit leadTimeDays }
milestones { label pct trigger }
}
}

query OneBillOfMaterials {
bomVersion(id: "…") {
id
assemblyProductId
versionNo
status
releasedAt
lines { componentProductId componentName kind quantity scrapPercent findNumber uomId }
}
}

Quantities and percentages are exact decimal strings. bidHandoverPackage answers only after the bid has been handed over.

The lists bids, bomVersions and bomWhereUsed are not on 2027-01 yet. They join once they take the sync arguments every app list has (updatedAfter, cursor, includeDeleted).

Which bids an app sees​

  • An installation acting for the whole organization sees bids open to the whole organization. A confidential bid (visible to its members only) answers Bid not found, the same as a bid that does not exist.
  • A token bound to one sales rep sees the bids that rep may see, confidential ones included.
  • No scope grants "view all bids", so no app reads every confidential bid.

Never sent to an app​

  • The bid's estimated value, every unit cost, cost-sheet references and every other field whose name reads as money. Money fields will arrive as { amount, currencyCode } in a later version.
  • The owner's name and the status reason (staff details). The owner's id is sent.
  • A bid's due date and a milestone's due days are closed on this version too, because their names read as money to the field review; they open once each is reviewed.

Never available to an app​

An app never creates, edits, archives or changes the status of a bid, never edits or releases a proposal, never hands a bid over, never releases a bill of materials, never approves, never changes Bid Desk settings and never invites a guest. None of these operations is on the app API, and the permissions behind them are closed to every app.

Coming next​

Bill-of-materials writes for write_assemblies, and Bid Desk webhook topics.