A negotiation matters only if the agreed price holds. When Atlas Corporate creates an Order from a quote for 500 units, that price must survive a catalog update next week. The Quote resource is the binding offer that makes the agreed terms durable, from a seller's
Pending offer through order creation, renegotiation, and acceptance recording.The Quote as a binding offer
The seller issues a Quote from a Staged Quote. It is the formal, binding offer presented to the buyer, and it tracks the buyer's response through its states:
Use QuoteState as the canonical state reference. For architecture decisions,
Pending is the actionable offer: the buyer can create an Order from it, decline it, or request renegotiation. Renegotiation moves the current offer out of the active path until the seller issues a new Quote, while a withdrawn or declined Quote ends that offer.From a
Pending Quote, the buyer can create an Order and record acceptance, decline, or request renegotiation, each governed by an Associate permission such as CreateMyOrdersFromMyQuotes, DeclineMyQuotes, or RenegotiateMyQuotes.How price locking works
The Quote flow exists because a negotiated offer needs price locking, not only a discounted Cart. When the seller issues the Quote, the negotiated amounts are captured on the Quote itself. To turn the offer into an Order, the buyer creates the Order from a valid
Pending Quote. If the request sets quoteStateToAccepted: true, order creation also records the Quote as Accepted. The Order uses the Quote's prices, not whatever the catalog says at order time.This decouples the agreed deal from the live Price architecture you built in Configure B2B pricing. A Standalone Price change, a new Customer Group rate, or an expired validity period does not alter an already-agreed Quote. The negotiation result is a snapshot, insulated from the price-selection logic that would otherwise re-resolve at order time.
The renegotiation loop
B2B negotiation is rarely one round. If the buyer is close but not satisfied, they do not decline outright; they request renegotiation.
POST /{projectKey}/as-associate/{associateId}/in-business-unit/key=atlas-apac/quotes/{quoteId} HTTP/1.1
Content-Type: application/json
{
"version": 3,
"actions": [
{
"action": "requestQuoteRenegotiation",
"buyerComment": "Close, but we need the unit price held for a 12-month term."
}
]
}
This moves the Quote to
DeclinedForRenegotiation. The seller reopens the Staged Quote, adjusts the quotationCart, and issues a new Quote; the original moves to RenegotiationAddressed. The loop repeats until the buyer accepts or declines for good. Only a Pending Quote can be renegotiated, so each round operates on the current offer, not a superseded one.Because the seller issues a fresh Quote each round, every round keeps its own record. Each Quote carries the
sellerComment that accompanied that offer and the buyerComment from the renegotiation request that prompted it, so the series of Quotes is a durable, round-by-round history of the negotiation. The Staged Quote's own sellerComment, by contrast, is mutable and always reflects only the seller's latest edit, so it is the working draft rather than the historical record.From Pending Quote to Order
To accept the offer and place the order in one step, create the Order from the valid
Pending Quote and set quoteStateToAccepted: true. The Order inherits the locked prices and the purchaseOrderNumber carried through the flow.POST /{projectKey}/as-associate/{associateId}/in-business-unit/key=atlas-apac/orders/quotes HTTP/1.1
Content-Type: application/json
{
"quote": { "typeId": "quote", "id": "{quoteId}" },
"version": 5,
"quoteStateToAccepted": true
}
Creating an Order from a Quote requires a permission such as
CreateMyOrdersFromMyQuotes. For repeat purchasing on already-negotiated terms, the Order or its originating Cart can be replicated to seed a new basket, reusing the negotiated outcome as the starting point.Worked example: an Order created after a catalog price rise
Atlas Corporate negotiates 500 units of
ZET-MON-27. Trace what happens to the price:- Negotiation. The seller issues a Quote with a negotiated unit price of AUD 240, captured on the Quote. The Quote is
Pending. - Catalog moves. Before Atlas responds, Zen Electron Trade raises the
atlas-apac-pricingChannel Standalone Price forZET-MON-27to AUD 265. Live price selection would now resolve AUD 265. - Order creation. Atlas creates the Order from the still-
PendingQuote and setsquoteStateToAccepted: true. Because order creation uses the Quote's captured amounts, the agreed AUD 240 holds and the Quote records acceptance. - Locked result. Every unit is ordered at AUD 240, not the new AUD 265, because the Order takes the Quote's locked prices rather than re-resolving against the catalog.
Had Atlas instead wanted the newer terms, they would have requested renegotiation while the Quote was still
Pending, and the seller would have issued a fresh Quote. The lock protects whichever offer the buyer actually accepts.Key takeaways
- A Quote is a binding offer with states
Pending,Accepted,Declined,DeclinedForRenegotiation,RenegotiationAddressed, andWithdrawn. - Creating an Order from a valid
PendingQuote uses the Quote's negotiated prices; settingquoteStateToAccepted: truerecords acceptance during order creation. - Renegotiation moves a Quote to
DeclinedForRenegotiation; the seller issues a new Quote and the original becomesRenegotiationAddressed. OnlyPendingQuotes can be renegotiated. - Each Quote round preserves its own
sellerCommentandbuyerComment, giving a durable history of the negotiation; the Staged Quote'ssellerCommentis mutable and holds only the latest edit. - The buyer creates the Order from a valid
PendingQuote with a permission such asCreateMyOrdersFromMyQuotes; the Order inherits the locked prices and the purchase order number.