Quote sales
Big-ticket items such as grooming vans, trailers and mobile grooming units are not sold through the cart. A builder publishes a quote ad, a buyer asks for a quote, the builder answers with a priced quote and a deposit, and the buyer accepts it and pays the deposit through United Pet Club. The rest of the price is paid to the builder directly.
Recognising a quote ad
Section titled “Recognising a quote ad”A quote ad is an ordinary Marketplace offer with two markers. Read it with the public offer read:
GET /api/marketplace/v1/offers/{offerId}Host: api.unitedpetclub.com{ "id": "0192f2c4-…", "statusCode": "ACTIVE", "pricingModeCode": "QUOTE_REQUIRED", "isQuoteAd": true}(Other offer fields omitted.)
pricingModeCode: "QUOTE_REQUIRED"means there is no price to show and no buy button (Quote requests › Priced by quote).isQuoteAd: truemeans the offer takes quote requests with a deposit. Show a Request a quote action instead of a price. AQUOTE_REQUIREDoffer that is not an ad does not take quote requests from buyers.- A paused, suspended or ended ad is not returned by the public read (404). Treat that as “no longer advertised”.
Quote ads are published by businesses that build mobile units (business type Manufacturer with the Mobile Unit
Builder specialty). On www they sit in the store category Grooming Vans & Mobile Units
(https://www.unitedpetclub.com/en-US/store/mobile-units).
Sending a buyer to request a quote
Section titled “Sending a buyer to request a quote”Send the buyer to their account with the offer:
https://account.unitedpetclub.com/{locale}/account/quotes/new?offer={offerId}They sign in if needed, write what they need, and the request goes to the builder. They follow the quote, accept it
and pay the deposit under Account → Quotes (/account/quotes).
The flow and its shapes
Section titled “The flow and its shapes”All routes ride the gateway under /api/price/v1.
| Step | Route | Who | Body |
|---|---|---|---|
| Ask | POST quotes/requests | buyer | { "offerId": "…", "message": "8 m van, two tubs, left-hand drive" } |
| Price and send | POST quotes/{quoteId}/send | seller | { "lines": [{ "description", "quantity", "unitPriceMinorUnits" }], "totalMinorUnits"?, "depositMinorUnits"?, "validUntilUtc"?, "termsText"?, "note"? } |
| Revise | POST quotes/{quoteId}/revise | seller | { "newTotalMinorUnits"?, "depositMinorUnits"?, "validUntilUtc"?, "termsText"?, "reason"?, "note"? } |
| Withdraw | POST quotes/{quoteId}/withdraw | seller | { "reason"? } |
| Accept | POST quotes/{quoteId}/accept | buyer | { "revisionNumber": 2, "acceptanceSignature"? } |
| Decline | POST quotes/{quoteId}/reject | buyer | { "reason"? } |
| Read | GET quotes/{quoteId} | either party | — |
Rules worth knowing before you render anything:
- One open request per buyer and ad. Asking again returns the open quote with
200; a new one is201. - Amounts are minor units in the ad’s currency (
500000= 5,000.00). The total defaults to the sum of the lines. - The deposit is between 0 and the total. The validity is one hour to 180 days ahead (default 30 days).
- Only on a live ad. A quote is sent or revised only while its quote ad is active, and a quote with a deposit only once the seller’s payout account is ready to receive payouts.
- Accept names the revision the buyer read. If the seller revised since, accept answers
Price_PriceQuote_VL_Revision_RJ(409): show the new revision and ask again. A buyer never signs a price they did not see. - An accepted quote is final. It cannot be revised or withdrawn; a price change after acceptance means a full refund and a new quote.
What the deposit is
Section titled “What the deposit is”With a deposit, accepting opens a card checkout for the deposit only, valid for about an hour. The deal is confirmed when the deposit is paid. If the buyer does not pay in time, the quote goes back to Sent (or Expired if its validity has passed) and they can accept again. A deposit that arrives after the checkout ran out is refunded in full automatically. With no deposit, accepting confirms the deal at once.
The deposit is part of the price: the buyer pays the balance to the builder directly, outside United Pet Club. It is not a protected deposit held until delivery (Protected animal deposits are a different product for animal listings).
Fees (what the seller pays)
Section titled “Fees (what the seller pays)”The buyer pays only the quote’s price. The seller pays, under three names:
| Fee | Amount |
|---|---|
| Commission | 1.25 % of the total accepted quote (before taxes the seller collects), taken out of the deposit; whatever the deposit does not cover is charged to the seller’s card on file |
| Platform Processing Fee | card processing on the deposit, at the published rate |
| Stripe Payout Fees | Stripe’s payout cost at cost, on the payout of the deposit |
Each active quote ad also costs the seller an insertion fee of US$50 a month (per ad, billed monthly in advance; GST/HST added for Canadian sellers). United Pet Club can waive it for a seller. Refunding the whole deposit refunds the Commission; a partial refund keeps it.
States and activity
Section titled “States and activity”GET quotes/{quoteId} returns the quote with its current revision, lines, totalMinorUnits, depositMinorUnits,
validUntilUtc, termsText, and the deal fields:
status | Meaning |
|---|---|
REQUESTED | the buyer asked; the seller has not priced it |
SENT / REVISED | priced and open to accept; currentRevisionNumber is the one to accept |
ACCEPTING | the buyer accepted; the deposit checkout is open (acceptanceExpiresAtUtc) |
ACCEPTED | the deal is confirmed (deposit paid, or no deposit) |
REJECTED, WITHDRAWN, EXPIRED | closed |
| Field | Meaning |
|---|---|
depositStatus | NONE, NOT_DUE, AWAITING_PAYMENT, PAID, PARTIALLY_REFUNDED, REFUNDED |
depositRefundedMinorUnits | the deposit refunded so far |
acceptedRevisionNumber | the revision the deal was made on |
activity[] | { code, occurredAtUtc, amountMinorUnits, currencyCode, reasonCode }, oldest first |
Activity codes: DEPOSIT_CHECKOUT_OPENED, SALE_CONFIRMED, DEPOSIT_PARTIALLY_REFUNDED, DEPOSIT_REFUNDED,
LATE_DEPOSIT_REFUNDED (a payment that came too late was refunded; it is not the deal’s deposit),
COMMISSION_REVERSED (United Pet Club cancelled the deal and returned the seller’s Commission). Ignore codes you do not
know: more may be added.
There is no webhook for quotes. Both parties get e-mail and in-app notices from United Pet Club at each step (request,
quote sent or revised, expiring soon, expired, withdrawn, deposit due, deal confirmed, deposit refunded, deal cancelled
by United Pet Club). An integration
that shows a quote polls GET quotes/{quoteId}, within the rate limits.
Response codes
Section titled “Response codes”Refusals carry a platform response code (Errors):
| Code | HTTP | When |
|---|---|---|
Price_PriceQuote_VL_Offer_RJ | 409 | the offer is not an active quote ad |
Price_PriceQuote_VL_OwnOffer_RJ | 409 | the buyer runs the ad’s storefront |
Price_PriceQuote_HD_Offer_FL | 503 | the ad could not be checked; retry shortly |
Price_PriceQuote_VL_Deposit_RJ | 400 | the deposit is below 0 or above the total |
Price_PriceQuote_VL_Validity_RJ | 400 | the validity is not between one hour and 180 days ahead |
Price_PriceQuote_VL_Revision_RJ | 409 | the quote was revised since the buyer read it |
Price_PriceQuote_VL_Expired_RJ | 409 | the quote has expired |
Price_PriceQuote_VL_State_RJ | 409 | the quote’s state does not allow this (e.g. revising an accepted quote) |
Price_PriceQuote_UP_State_RJ | 409 | the quote is not pending (e.g. declining one being paid) |
Price_PriceQuote_VL_AdInactive_RJ | 409 | sending or revising a quote on an ad that is paused, suspended or ended |
Price_PriceQuote_VL_PayoutReadiness_RJ | 409 | a quote with a deposit from a seller whose payout account is not set up |
Price_PriceQuote_HD_PayoutReadiness_FL | 503 | the payout account could not be checked; retry shortly |