Quote types
The types the quote domain defines, with the fields other domains add to them.
Objects
CartNotQuotableError
Implements Error
The cart is in a state the merchant cannot quote. Every reason is buyer-fixable, so the storefront shows it against the basket rather than treating it as a fault.
| Field | Type | Description |
|---|---|---|
message | String! | Developer/debug description of the failure. Not localized and never shown to end users. |
reason | CartNotQuotableReasonType! | Why the cart cannot be quoted, driving the message shown to the buyer |
Quote
Quote provided by merchant in response to a quote request
| Field | Type | Description |
|---|---|---|
id | QuoteIdentifier! | Quote identifier containing id and version |
quoteNumber | String | The number the seller gives this quote, which is what the buyer quotes back when they phone or mail about it. Distinct from purchaseOrderNumber, which is the buyer's own reference. Null where the seller gave it none. |
createdAt | DateTime! | Creation date of the quote |
status | QuoteStatusType! | Status of the quote |
comment | String | What the buyer has said about this quote, which is the message accompanying a request to renegotiate it. The comment that opened the negotiation is on the quote request, not here: this one is about the offer that came back. |
sellerComment | String | What the seller has said about this quote -- why the price is what it is, or a condition attached to the offer that validUntil cannot express. The one thing a buyer most needs and had no way to be told: a quote showed a basket and a total, and nothing about the negotiation that produced them, so the exchange this feature exists for happened over email instead. |
quoteRequest | QuoteRequest | The request this quote answers, and with it the message that opened the negotiation. A quote carries what the buyer said about the offer that came back; the ask is on the request. Without the link a page could show only half the conversation -- the seller's note arriving without the question it answers. Null where the request can no longer be read, which leaves the quote itself perfectly readable. |
customer | Customer | Who asked. Inside a company several associates may request quotes and the seller answers the company, so this is how a colleague or an approver knows whose quote they are looking at. Null where the quote records no customer, or where that customer can no longer be read. |
purchaseOrderNumber | String | Purchase order number entered by the client |
validUntil | DateTime | Date until which the quote is valid and can be ordered |
lineItems | [QuoteSingleLineItem!]! | Line items in the quote |
billingAddress | Address | Customer billing address |
shippingAddress | Address | Customer shipping address |
subTotal | TaxedTotalPrice! | What the line items come to before the quote's discount, which is what the buyer would have paid at the regular price. |
discountTotal | TaxedPrice | The discount this quote grants: what subTotal and shippingCosts come to, less the total being quoted. Absent where nothing was taken off. Read from the totals because a seller may price a quote either way -- line by line, or by moving the quote's total and leaving the lines at their regular price. Both arrive here, so subTotal minus this plus shippingCosts plus vatShifting plus vatExemption equals total whichever was done. The rate is the effective rate over the discounted goods -- exact for a single-rate quote, a blend where it mixes rates. |
shippingCosts | TaxedPrice | Delivery cost quoted, if any |
total | TaxedTotalPrice | Total price quoted, including all costs |
vatShifting | Money | The amount of a reverse-charge line, negative and already reflected in total, where one is carried. It is not part of discountTotal. A reverse-charged cart is taxed at 0% and gets no such line, so this is null on a quote for one.Deprecated: A reverse-charged cart is taxed at 0%; read vatOutcome and the taxed totals. |
vatExemption | Money | The amount of an export line, negative and already reflected in total, where one is carried. An exported cart is taxed at 0% and gets no such line, so this is null on a quote for one.Deprecated: An exported cart is taxed at 0%; read vatOutcome and the taxed totals. |
vatOutcome | VatOutcome | Which VAT rule the quote's amounts follow, and why, as the cart it came from recorded it; the same as Cart.vatOutcome. Tells a reverse-charged or exported quote from one taxed at 0%. Null where none was recorded and where the engine does not decide VAT itself. |
order | Order | The order placed against this quote. Null until one is, which is every status other than ACCEPTED. One order at most: a quote cannot be ordered again once accepted. Should ordering part of a quote ever produce several, this becomes a list at that point and not before. |
QuoteDeclineResponse
Response for declining a quote
| Field | Type | Description |
|---|---|---|
quote | Quote | The declined quote, absent when declining failed |
quoteErrors | [QuoteDeclineError!]! | Error details if declining failed |
QuoteIdentifier
Identifier for a quote with version control
| Field | Type | Description |
|---|---|---|
id | ID! | Unique identifier for the quote |
version | String | Opaque optimistic-concurrency token, present only for engines that version their resources. Pass it back verbatim; never parse or compare it. |
QuoteNotPendingError
Implements Error
The quote is no longer waiting for the buyer, so it cannot be replied to or declined. The status says why, so the storefront can hide both actions rather than offer one that will fail.
| Field | Type | Description |
|---|---|---|
message | String! | Developer/debug description of the failure. Not localized and never shown to end users. |
status | QuoteStatusType! | The status the quote is in, which is what blocks the answer |
QuoteReplyResponse
Response for replying to a quote
| Field | Type | Description |
|---|---|---|
quote | Quote | The quote replied to, absent when the reply failed |
quoteErrors | [QuoteReplyError!]! | Error details if the reply failed |
QuoteRequest
Quote request created by a customer
| Field | Type | Description |
|---|---|---|
id | QuoteIdentifier! | Quote identifier containing id and version |
createdAt | DateTime! | Creation date of the quote |
status | QuoteRequestStatusType! | Status of the quote |
comment | String | Comment from the customer |
customer | Customer | Who asked. Inside a company several associates may request quotes and the seller answers the company, so this is how a colleague or an approver knows whose request they are looking at. Null where the customer can no longer be read, which leaves the request itself perfectly readable. |
purchaseOrderNumber | String | Purchase order number entered by the client |
lineItems | [QuoteSingleLineItem!]! | Line items in the quote |
billingAddress | Address | Customer billing address |
shippingAddress | Address | Customer shipping address |
subTotal | TaxedTotalPrice! | What the line items come to before the quote's discount, which is what the buyer would have paid at the regular price. |
discountTotal | TaxedPrice | The discount this quote grants: what subTotal and shippingCosts come to, less the total being quoted. Absent where nothing was taken off. Read from the totals because a seller may price a quote either way -- line by line, or by moving the quote's total and leaving the lines at their regular price. Both arrive here, so subTotal minus this plus shippingCosts plus vatShifting plus vatExemption equals total whichever was done. The rate is the effective rate over the discounted goods -- exact for a single-rate quote, a blend where it mixes rates. |
shippingCosts | TaxedPrice | Delivery cost quoted, if any |
total | TaxedTotalPrice | Total price quoted, including all costs |
vatShifting | Money | The amount of a reverse-charge line, negative and already reflected in total, where one is carried. It is not part of discountTotal. A reverse-charged cart is taxed at 0% and gets no such line, so this is null on a quote for one.Deprecated: A reverse-charged cart is taxed at 0%; read vatOutcome and the taxed totals. |
vatExemption | Money | The amount of an export line, negative and already reflected in total, where one is carried. An exported cart is taxed at 0% and gets no such line, so this is null on a quote for one.Deprecated: An exported cart is taxed at 0%; read vatOutcome and the taxed totals. |
vatOutcome | VatOutcome | Which VAT rule the quote request's amounts follow, and why, as the cart it came from recorded it; the same as Cart.vatOutcome. Tells a reverse-charged or exported quote request from one taxed at 0%. Null where none was recorded and where the engine does not decide VAT itself. |
QuoteRequestCancelResponse
Response for withdrawing a quote request
| Field | Type | Description |
|---|---|---|
quoteRequest | QuoteRequest | The withdrawn quote request, absent when the withdrawal failed |
quoteRequestErrors | [QuoteRequestCancelError!]! | Error details if the withdrawal failed |
QuoteRequestCreateResponse
Response for quote request creation
| Field | Type | Description |
|---|---|---|
quoteRequest | QuoteRequest | Quote request created, absent when creation failed |
quoteRequestErrors | [QuoteRequestCreateError!]! | Error details if creation failed |
QuoteRequestIdentifier
Identifier for a quote request with version control
| Field | Type | Description |
|---|---|---|
id | ID! | Unique identifier for the quote request |
version | String | Opaque optimistic-concurrency token, present only for engines that version their resources. Pass it back verbatim; never parse or compare it. |
QuoteRequestNotCancellableError
Implements Error
The request can no longer be withdrawn. Only a request the merchant has not yet answered can be, so the blocking status is the whole story and the storefront can hide the affordance rather than offer an action that will fail.
| Field | Type | Description |
|---|---|---|
message | String! | Developer/debug description of the failure. Not localized and never shown to end users. |
status | QuoteRequestStatusType! | The status the request is in, which is what blocks the withdrawal |
QuoteRequestResult
Paginated result containing quote requests
| Field | Type | Description |
|---|---|---|
items | [QuoteRequest!]! | List of quote requests |
pagination | Pagination! | Where this page sits within the full result set |
QuoteResult
Paginated result containing quotes
| Field | Type | Description |
|---|---|---|
items | [Quote!]! | List of quotes |
pagination | Pagination! | Where this page sits within the full result set |
QuoteSingleLineItem
Implements QuoteLineItem
Individual line item in a quote
| Field | Type | Description |
|---|---|---|
id | ID! | Unique identifier for the line item |
name | String! | Product name for the line item |
quantity | Int! | Number of items |
price | TaxedPrice! | The final price after applying discounts |
regularPrice | TaxedPrice! | The regular selling price on the platform |
listPrice | TaxedPrice! | The list price (MSRP) |
variant | ProductVariant! | Product variant details |
Input objects
QuoteRequestCreateArgsInput
Input data for creating a new quote request
| Field | Type | Description |
|---|---|---|
cartId | ID! | Cart the quote is requested for |
comment | String | Optional comment from the customer |
purchaseOrderNumber | String | Optional purchase order number |
Enums
CartNotQuotableReasonType
Reason a cart cannot be turned into a quote request. Normalized across engines: an adapter maps its own refusal onto one of these rather than forwarding the engine's own wording.
SHIPPING_ADDRESS_MISSING | The cart has no delivery destination set |
DISCOUNT_CODES_PRESENT | The cart carries promotional discount codes, which cannot combine with a negotiated price |
EMPTY_CART | The cart has no line items |
ANONYMOUS_CART | The cart is not associated with a signed-in buyer |
UNSUPPORTED_SHIPPING_CONFIGURATION | The cart uses a shipping configuration the backend cannot quote |
QuoteRequestStatusType
Status of a quote request
SUBMITTED | Submitted to the merchant, awaiting a quote |
ACCEPTED | Accepted by the merchant; a quote has been / will be issued |
REJECTED | Rejected by the merchant |
CANCELLED | Cancelled or no longer actionable |
QuoteSortOrderType
Order in which a list of quotes is returned
CREATED_AT_DESCENDING | Most recently issued first |
ORDERABLE_FIRST | Quotes the buyer can still order first -- PENDING and not past validUntil -- then all others, each group most recently issued first |
Interfaces
QuoteLineItem
Interface for quote line items
| Field | Type | Description |
|---|---|---|
id | ID! | Unique identifier for the line item |
name | String! | Product name for the line item |
quantity | Int! | Number of items |
price | TaxedPrice! | The final price after applying discounts |
regularPrice | TaxedPrice! | The regular selling price on the platform |
listPrice | TaxedPrice! | The list price (MSRP) |
Implemented by QuoteSingleLineItem.
Unions
QuoteDeclineError
Error union for declining a quote
One of ValidationError or QuoteNotPendingError.
QuoteReplyError
Error union for replying to a quote
One of ValidationError or QuoteNotPendingError.
QuoteRequestCancelError
Error union for withdrawing a quote request
One of ValidationError or QuoteRequestNotCancellableError.
QuoteRequestCreateError
Error union for quote request creation
One of ValidationError or CartNotQuotableError.

