graduation-capQuote Tutorial

The Quote Service allows you to send email notifications to customers every time a new quote is created or updated by the customers themselves or by an employee on their behalf.

triangle-exclamation

Quote statuses

The Quote Service supports the following status values:

Status
Description
Set By
When Used

CREATING

Quote is being created (temporary state)

System

During quote creation process

AWAITING

Quote is ready for employee review

System

After quote is created by a customer

OPEN

Quote is ready for customer review

Merchant/Employee

When employee sends the quote for customer approval

IN_PROGRESS

Active negotiation/changes are being made

Employee

When employee is modifying the quote

ACCEPTED

Customer accepted the quote

Customer

Customer agrees to terms, triggers order creation

DECLINED

Customer rejected the quote

Customer

Customer doesn't want to proceed

DECLINED_BY_MERCHANT

Employee/merchant rejected the quote

Employee

Merchant cannot fulfill the request

EXPIRED

Quote validity period has passed

System

When validTo date is exceeded

Possible status transitions:

  • AWAITING -> OPEN

  • AWAITING -> DECLINED_BY_MERCHANT

  • CREATING -> OPEN

  • EXPIRED -> OPEN

  • IN_PROGRESS -> OPEN

  • IN_PROGRESS -> DECLINED_BY_MERCHANT

  • OPEN -> DECLINED

  • OPEN -> ACCEPTED

  • OPEN -> IN_PROGRESS

circle-info

When an employee creates a quote, its status is CREATING.

When a customer creates a quote, its status is AWAITING.

The whole quote flow and status representations is visible in the diagram:

spinner

Quote decision reasons

When a customer changes the quote status to DECLINED or IN_PROGRESS, or when an employee changes the quote status to DECLINED_BY_MERCHANT, they can provide a reason why they performed that action.

There are four default reasons that your customers and employees can select for the DECLINED or CHANGED quote statuses:

Quote status
Reason code

DECLINE

  • PRICE_TOO_HIGH

  • NO_LONGER_NEEDED

  • DELIVERY_TIME_LATE

  • OTHER

CHANGE

  • WRONG_MATERIAL

  • PROVIDED_PRICE_TO_HIGH

  • DELIVERY_TIME_LATE

  • OTHER

circle-exclamation

If you need custom quote status change reasons, create them by sending a request to the Creating a reason for changing the quote statusarrow-up-right endpoint.

How to configure the quote service

The following merchant information is necessary for the pdf file with quote to be generated:

  • merchantName

  • merchantAddress

    • merchantCity

    • merchantStreet

    • merchantStreetNo

    • merchantZipCode

circle-exclamation
1

Retrieve your site's mixins

First, you need to check the current site mixin configuration for the merchantInfo parameter by sending a request to the Retrieving site mixinsarrow-up-right endpoint.

circle-exclamation
2

Update merchant information

Update the merchant information for your tenant's site by sending a request to the Partially updating a site mixinarrow-up-right endpoint.

circle-exclamation
3

Update available quote status change reasons

There are four default reasons that your customers and employees can select for the DECLINED or CHANGED quote statuses, as mentioned in Quote decision reasons.

You can create new quote status change reasons, by sending a request to the Creating a reason for changing the quote statusarrow-up-right endpoint.

circle-check

Site Settings:

rectangle-terminalAPI Referencechevron-right

Quote:

rectangle-terminalAPI Referencechevron-right

How to manage quote requests

A quote request can be created both by a customer directly on your business' storefront, or by an employee on behalf of a customer.

Creating a quote by a customer

On the storefront, a customer adds selected products to cart. At checkout, they can proceed to purchasing the items, or requesting a quote. If a customer places a quote request, the Creating a quotearrow-up-right endpoint is called.

circle-exclamation

The customer can place a quote request on the storefront only if they have created a cart with the requested items beforehand.

circle-exclamation
circle-info

When a quote is created from a cart, the cart status is automatically changed to CLOSED and the quoteId is set on that cart. This ensures proper traceability between carts and their corresponding quotes.

Creating a quote on behalf of a customer

To create a quote request on behalf of a customer, send a request to the Creating a quotearrow-up-right endpoint.

circle-exclamation
circle-exclamation

Updating a quote by an employee

There are two scenarios when an employee may need to update a quote:

  • A customer can contact your Customer Service so that an employee updates the quote request on their behalf

  • Employee updates the quote request with new information for the customer to review, such as price or status change

To achieve that, the employee needs to send a request to the Partially updating a quotearrow-up-right endpoint.

circle-exclamation

In this example, an employee updates multiple fields:

In the following example, an employee updates only the price of requested item:

Approving a quote by an employee

When an employee accepts a quote, they approve it to be sent to the customer. Depending on the flow, the quote status changes from 'AWAITING', 'CREATING' or "IN_PROGRESS" to 'OPEN"'.

circle-exclamation

Accepting a quote by a customer

When a customer accepts a quote on the storefront, the following endpoint is called: Partially updating a quotearrow-up-right.

circle-exclamation

Declining a quote by a customer

When a customer changes the quote status to DECLINED or IN_PROGRESS, or when an employee changes the quote status to DECLINED_BY_MERCHANT, they can provide a reason why they performed that action. On the storefront, when a customer declines the quote, a request to the following endpoint is sent: Partially updating a quotearrow-up-right.

circle-exclamation

If the customer wants to provide a reason for declining a quote, they can choose one of the provided reasons from a list of available reasons and/or add comments.

In this example, a customer receives a quote and decides to decline it because the proposed price is too high. They also add a comment to negotiate the price.

circle-check
rectangle-terminalAPI Referencechevron-right

External prices and products support

External pricing allows you to supply your own price data directly in quote items, instead of relying on predefined internal price lists in the Emporix system. This is useful when pricing is managed by an external system (for example, ERP) and you want to inject those values into quotes.

By default, all products and prices in Emporix are internal, they reference the entities that are stored in Emporix catalog and price lists. However, Quote Service supports external prices and external products as well, giving you full control over the pricing data you send.

Each price object includes a type field that defines whether the object is an internal one, or from an external source.

  • INTERNAL - Default behavior, the system looks up for price information using priceId.

  • EXTERNAL - Allows you to provide your own price details directly in the quote request.

When using EXTERNAL pricing, you can send complete price details (for example, net and gross values) without storing them in Emporix.

To use external prices, the cart.cart_manage_external_prices scope is necessary. Without the scope, quote creation or updates containing external price data are rejected.

Example of an item in a quote request using an external price, where:

  • The product is internal - from your Emporix catalog.

  • The price is external - supplied directly in the request.

  • No priceId is required, because you are providing all the necessary price details.

Example of an item in a quote request using an external product and price, where both the product and price are external.

Support for mixins and metadata

Mixins and metadata can be added to:

  • Quote level itself

  • Quote items

  • Products within quote items

PATCH operations support adding, replacing, and removing mixin values at all these levels.

Quote pdf generation

To generate a quote pdf, send a request to the Creating a quote PDFarrow-up-right endpoint. The request does not require any body, you only need a tenant name and quote ID.

Last updated

Was this helpful?