Quotes (RFQ)
Quotes let a wholesale buyer turn a cart into a request for a price, and let you send back a priced offer they can accept into an order. Between the two sits a message thread, an offer history, and an expiry date.
Two facts shape everything else on this page:
- Quoting is a two-screen job. You edit prices in Orders → Drafts. You send the offer from the company’s Quotes screen. They are different screens and you will move between them on every quote.
- Only the buyer can start a quote. It always begins from their checkout. There is no New quote button anywhere in the admin.
Turn quotes on
Quotes are an advanced module and are off by default. While it is off, buyers have no way to ask for a price.
-
Go to Settings → B2B wholesale.
-
Under Advanced modules, turn on Quotes (request for quote).
-
Save.
Turning it off later does not strand work in progress. A quote already in flight stays visible in the store-wide queue and on its detail page. Its record, files, history and PDF remain readable, and it can still be accepted, declined or left to expire. New requests, offer responses and thread messages pause until you turn Quotes on again.
How a quote flows
-
The buyer requests it. At checkout, below Pay now, they choose Request a quote — “Need pricing approval first? Send this cart to us as a quote request instead of paying now.” The basket is snapshotted exactly as it stood, and they land on Account → Quotes.
-
You find it in the queue. Go to Companies → Quotes. The assigned staff for that branch receive a New wholesale quote request email. If nobody is assigned, the store’s configured staff recipients receive it. The queue remains the source of truth if email delivery is delayed.
-
You price it on the draft. The quote detail carries Open draft. Edit line prices and freight there, then lock the prices.
-
You send the offer. Back on the quote, choose Respond with quote, pick the draft, set Offer expires, and send. The quote moves to Quoted and the buyer is emailed.
-
The buyer accepts. Accept and checkout drops them into checkout at the locked prices. Paying mints a normal order and stamps the quote with it.
Example. Kapoor Apparel loads 24 small, 48 medium and 48 large of one kurta at ₹640 — ₹76,800 — and requests a quote with the note “Diwali order, need it landed by 14 Oct — can you do ₹580 if we take 150?”
The quotes queue
Go to Companies → Quotes for the store-wide queue. Each row shows the reference, company, branch, status, total, expiry and when it last moved. A blue badge means the buyer has said something you have not read. A company’s Quotes action opens the same queue already filtered to that company.
Filter by All, Requested, Quoted, Accepted, Declined or Expired. Search by quote reference, company, branch, buyer name or buyer email, and sort by recent activity, request date or quote number. Search, status and sort are applied before pagination, so a result on page 40 is not hidden just because only the current page was loaded.
Opening a quote shows the requested items, the total, the buyer’s note and a status timeline. The items table is read-only — every price change happens in the linked draft order.
Sending an offer
From the quote, Open draft takes you to the draft order holding that basket. Edit line prices, add freight, apply whatever adjustment you agreed, then lock the prices.
Back on the quote, Respond with quote asks for two things:
| Field | What to do |
|---|---|
| Draft | Pick the draft you just priced. |
| Offer expires | The date the offer stops being valid. Leave it blank for 30 days. |
The buyer gets a Quote ready email carrying the total and the valid-until date, and their quote page changes to “We’ve sent you a price… accept to proceed to checkout at these locked prices.”
Example. You drop the kurta to ₹585 for 150 units — ₹87,750 — add ₹1,200 freight, and set the offer to expire on 10 October.
Downloading a quote PDF
Both sides can download the current quote as a PDF:
- the buyer opens Account → Quotes → the quote → Download PDF;
- you open the quote in the company admin and choose Download PDF.
The download is generated from the authorized quote record, including its reference, company and location, line prices, totals, PO number where present, status and valid-until date. The buyer route re-checks ownership on every download; forwarding its URL does not grant a colleague access.
Revising an offer
Send a second or third price on the same quote at any time before it is accepted, declined or expired. Respond with quote again and the new offer replaces the previous one, the history gains a row, and the expiry clock resets from the new date.
Example. Kapoor pushes back on the freight. You revise to ₹87,750 with freight waived. Their history now reads:
| Offer | Total | Movement |
|---|---|---|
| Offer 3 | ₹87,750 | −₹1,200 |
| Offer 2 | ₹88,950 | −₹5,850 (−6.2%), +30 units |
| Offer 1 | ₹76,800 | Opening request |
The offer history is a shared ledger. Your buyer sees exactly these rows, with the same rupee, percentage and unit movement. There is no merchant-only version, so price every revision as though the customer is reading the trail — because they are.
You cannot revise after the quote has been accepted, declined or expired.
The message thread
Every quote carries a two-way conversation. Type in the box on the quote detail; use the paperclip for files. The buyer sees the same thread with their own compose box.
The thread is append-only — nothing can be edited or deleted once sent.
| Limit | Value |
|---|---|
| Files per message | 5 |
| Size per file | 10 MB |
| Size per message | 25 MB |
| Messages per quote | 200 |
| File types | PDF, JPG, PNG, WEBP, GIF, TXT, CSV, XLSX, DOCX |
Download links re-check the reader’s permission every time and expire after about five minutes, so a forwarded link is not a way around that check.
Example. Vinayak Infra attaches PO-2291.pdf and a delivery schedule; you reply with a signed rate sheet. The paperwork stays on the quote instead of scattering across inboxes.
Acceptance, expiry and declines
Accepting takes the buyer straight to checkout on the locked prices. Their quote then reads “You accepted this quote. It became order #1084.”
Expiry is enforced at acceptance and again at checkout. A buyer cannot accept an already expired offer. If they accept on the last valid day and pay two days later, checkout still refuses the expired locked price and names the quote. If you want to honour it, revise the quote with a fresh expiry.
The same rule protects you the other way: a bookmarked payment link for an expired offer cannot be paid, so a quoted price cannot leak into next quarter.
Declines are final for both sides. Either you or the buyer can decline; the quote closes and the buyer must send a new request. They may submit the same unchanged basket again after the old request is final. You would decline rather than quote, for example, 900 m of a cable you are discontinuing.
Submitting the same unchanged cart twice while its request is still live does not create two negotiations. A retry returns the existing request. Changing the cart creates a new cart revision; submitting that revision creates a new request.
Statuses run Requested → Quoted → Accepted or Declined. A Requested or Quoted
offer that nobody answers lapses to Expired. Accepted, Declined and Expired
are all final.
Who gets emailed
| Event | Buyer | You |
|---|---|---|
| Buyer sends a quote request | — | New wholesale quote request |
| You send or revise an offer | Quote ready | — |
| Buyer accepts | Accepted | — |
| Either side declines | Declined | — |
| Buyer posts a message | — | New buyer message on a quote |
For a new request, staff assigned to the branch are notified first. When the branch has no assigned staff, the store’s configured notification recipients are used. One durable delivery job is recorded per recipient, so a checkout retry cannot send the request twice and a failed email does not roll the quote back. The email includes the quote reference, company, branch, buyer, requested total and a direct Open quote link.
When a buyer does post a message you are emailed an excerpt with an Open quote link. Several replies inside 30 minutes collapse into one email so a fast back-and-forth does not flood your inbox.
Each of these emails lives in Settings → Notifications, in the B2B wholesale group. New wholesale quote request can be switched off. Quote message alerts can also be controlled there.
Example. Vinayak’s buyer posts “can you split delivery across two sites?” at 4:40pm. Your Pune rep gets the excerpt and opens the quote from the email.
Who can see a quote
A buyer sees their own quotes only — including a Location admin, who can otherwise see every order and balance at their branch.
They must also still have active access to the quote’s branch. Removing the buyer or revoking that branch grant removes the quote, thread, PDF and attachments from their account immediately, even if their personal sign-in session is still valid.
That is deliberate. A quote thread carries purchase orders, negotiated rate sheets and a written conversation, so opening it to colleagues would expose far more than a number. If a customer wants a second person watching a negotiation, they should ask that person to raise the request.
What this does not do yet
- You cannot start a quote. Every quote begins with a buyer sending their cart from checkout. To price proactively, build a draft order and send the invoice link — but that skips the accept step and the price history.
- The default expiry is 30 days and cannot be changed store-wide. Expiry is one date on the whole offer, never per line.
- Declines and expiries are final for both sides. The buyer must request again.
- Buyers cannot see colleagues’ quotes, even Location admins.
- Acceptance reserves no stock.
- The draft picker is not filtered to the company you are quoting.
Related
- PO numbers & order review — the other way a buyer’s basket reaches you before it is an order.
- Catalogs & contextual pricing — standing contract prices, so routine orders never need a quote.
- Buyer roles — why quote visibility is narrower than order visibility.
- Current limits — everything B2B does not do yet, in one list.