Quote Tutorial

How to configure the Quote Service

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.

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

  • merchantName

  • merchantAddress

    • merchantCity

    • merchantStreet

    • merchantStreetNo

    • merchantZipCode

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 mixins endpoint.

API Reference
curl -i -X GET \
  'https://api.emporix.io/site/{tenant}/sites/{siteCode}/mixins' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Update merchant information

Update the merchant information for your tenant's site by sending a request to the Partially updating a site mixin endpoint.

API Reference
curl -i -X PATCH \
  'https://api.emporix.io/site/{tenant}/sites/{siteCode}/mixins/{mixinName}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "active": true
  }'

Update available quote status change 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

By sending a request to the Creating a reason for changing the quote status endpoint, you can create new quote status change reasons.

API Reference
curl -i -X POST \
  'https://api.emporix.io/quote/{tenant}/quote-reasons' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Language: de' \
  -H 'Content-Type: application/json' \
  -d '{
    "code": "PRICE_TOO_HIGH",
    "type": "CHANGE",
    "message": {
      "en": "The price is too high",
      "de": "Der Preis ist zu hoch"
    }
  }'

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.

Create 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 quote endpoint is called.

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

API Reference
curl -i -X POST \
  'https://api.emporix.io/quote/{tenant}/quotes' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "customerId": "9tt954309b06d46d3cf19fe",
    "employeeId": "9tt954309b06d46d3cf19fa",
    "billingAddressId": "64672a8f9939d331699cbe6e",
    "shippingAddressId": "64672a8f9939d331699cbe6e",
    "companyName": "ABC",
    "siteCode": "main",
    "currency": "USD",
    "validTo": "2022-04-01T04:37:04.301Z",
    "shipping": {
      "value": 10,
      "methodId": "fedex-2dayground",
      "zoneId": "63440460ceeaa26d794fcbbb",
      "shippingTaxCode": "STANDARD"
    },
    "items": [
      {
        "quantity": {
          "quantity": 1,
          "unitCode": "piece"
        },
        "price": {
          "priceId": "6245aa0a78a8576e338fa9c4",
          "unitPrice": 13,
          "totalNetValue": 13,
          "tax": {
            "taxClass": "STANDARD",
            "taxRate": 20
          }
        },
        "product": {
          "productId": "7i98542309b06d46d3cf19fe"
        }
      }
    ],
    "mixins": {
      "customAttributes": {
        "attribute": {
          "value": 1,
          "unit": "kg"
        }
      }
    },
    "metadata": {
      "mixins": {
        "customAttributes": "https://res.cloudinary.com/saas-ag/raw/upload/schemata/CAAS/customAttributes.json"
      }
    }
  }'

Create a quote on behalf of a customer

To create a quote request on behalf of a customer, you need to call the Creating a quote endpoint.

API Reference
curl -i -X POST \
  'https://api.emporix.io/quote/{tenant}/quotes' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "customerId": "9tt954309b06d46d3cf19fe",
    "employeeId": "9tt954309b06d46d3cf19fa",
    "billingAddressId": "64672a8f9939d331699cbe6e",
    "shippingAddressId": "64672a8f9939d331699cbe6e",
    "companyName": "ABC",
    "siteCode": "main",
    "currency": "USD",
    "validTo": "2022-04-01T04:37:04.301Z",
    "shipping": {
      "value": 10,
      "methodId": "fedex-2dayground",
      "zoneId": "63440460ceeaa26d794fcbbb",
      "shippingTaxCode": "STANDARD"
    },
    "items": [
      {
        "quantity": {
          "quantity": 1,
          "unitCode": "piece"
        },
        "price": {
          "priceId": "6245aa0a78a8576e338fa9c4",
          "unitPrice": 13,
          "totalNetValue": 13,
          "tax": {
            "taxClass": "STANDARD",
            "taxRate": 20
          }
        },
        "product": {
          "productId": "7i98542309b06d46d3cf19fe"
        }
      }
    ],
    "mixins": {
      "customAttributes": {
        "attribute": {
          "value": 1,
          "unit": "kg"
        }
      }
    },
    "metadata": {
      "mixins": {
        "customAttributes": "https://res.cloudinary.com/saas-ag/raw/upload/schemata/CAAS/customAttributes.json"
      }
    }
  }'

Update 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 quote endpoint.

In this example, an employee updates multiple fields:

API Reference
curl -i -X PATCH \
  'https://api.emporix.io/quote/{tenant}/quotes/{quoteId}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{}'

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

API Reference
curl -i -X PATCH \
  'https://api.emporix.io/quote/{tenant}/quotes/{quoteId}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{}'

Accept a quote by a customer

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

API Reference

curl -i -X PATCH \
  'https://api.emporix.io/quote/{tenant}/quotes/{quoteId}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "op": "replace",
    "path": "/status",
    "value": {
      "value": "ACCEPTED",
      "comment": "new comment"
    }
  }'

Decline 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 quote.

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.

API Reference
curl -i -X PATCH \
  'https://api.emporix.io/quote/{tenant}/quotes/{quoteId}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "op": "replace",
    "path": "/status",
    "value": {
      "value": "DECLINED",
      "comment": "Can you make the price 50$ cheaper?",
      "quoteReasonId": "6437ed5dc0dc2925289a5bbd"
    }
  }'

Last updated

Was this helpful?