You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Is your feature request related to a problem? Please describe.
UCP catalog requires a price on every item. product.price_range and variant.price are required, price.amount says "Use 0 for free items", and REST conformance requires "valid Price objects".
Many B2B sellers publish a catalog but no prices. The price depends on the contract, the volume or an NDA, and the buyer gets it from a quote. @juanferrub's B2B note in #812 names contracts and volume tiers among the inputs.
We (AirShelf) built UCP endpoints for two such sellers. One leases office equipment on quoted terms. The other sells security software and shares prices only under NDA. Between them they list 318 products, and none has a price we could send. Each option we had breaks something:
Send amount: 0 with a disclosure warning. It is schema-valid, but 0 means free. A platform that skips messages shows "$0.00" on a leased printer.
Omit price and send a disclosure warning. It is honest, and it is what we built. It fails the schema, and @ucp-js/sdk 0.5.1 rejects any response with an unpriced variant.
Skip catalog and offer only ask. It conforms, but catalog-first platforms cannot list the products at all.
Nearby work covers other steps. Identity linking lets a signed-in buyer see member pricing, and we use it for buyers who sign the NDA, but public discovery still has no price. #845 and #812 cover terms once a quote exists, and this gap is one step earlier, at listing. #810 keeps price required on each offer.
Price has been required since the first catalog PR (#55), which modelled a single seller's DTC catalog. B2B implementers so far add RFQ as vendor extensions, such as Shopware's com.shopware.quote and UCPReady's com.ucpready.procurement (#93). Both add a quote flow. Neither can remove the price requirement from the listing, for the reason below.
Describe the solution you'd like
A structured way for a Business to say "no public price for this item", so a Platform never has to read it from prose. One possible shape:
variant.price and product.price_range become optional only when the variant says why, for example "pricing": "on_request".
A Platform MUST NOT show a price for such a variant, and MUST NOT treat the missing price as 0.
A well-known message code such as price_on_request with presentation: "disclosure" could carry the wording a Platform shows the buyer.
Describe alternatives you've considered
The three options above. A vendor extension cannot fix this, because an extension composes with allOf and can add a field but cannot relax a required one. So every B2B seller hits the same wall until core allows it.
Additional context
Happy to share our implementation and the responses it sends.
Is your feature request related to a problem? Please describe.
UCP catalog requires a price on every item.
product.price_rangeandvariant.priceare required,price.amountsays "Use 0 for free items", and REST conformance requires "validPriceobjects".Many B2B sellers publish a catalog but no prices. The price depends on the contract, the volume or an NDA, and the buyer gets it from a quote. @juanferrub's B2B note in #812 names contracts and volume tiers among the inputs.
We (AirShelf) built UCP endpoints for two such sellers. One leases office equipment on quoted terms. The other sells security software and shares prices only under NDA. Between them they list 318 products, and none has a price we could send. Each option we had breaks something:
amount: 0with a disclosure warning. It is schema-valid, but 0 means free. A platform that skipsmessagesshows "$0.00" on a leased printer.priceand send a disclosure warning. It is honest, and it is what we built. It fails the schema, and@ucp-js/sdk0.5.1 rejects any response with an unpriced variant.ask. It conforms, but catalog-first platforms cannot list the products at all.Nearby work covers other steps. Identity linking lets a signed-in buyer see member pricing, and we use it for buyers who sign the NDA, but public discovery still has no price. #845 and #812 cover terms once a quote exists, and this gap is one step earlier, at listing. #810 keeps
pricerequired on each offer.Price has been required since the first catalog PR (#55), which modelled a single seller's DTC catalog. B2B implementers so far add RFQ as vendor extensions, such as Shopware's
com.shopware.quoteand UCPReady'scom.ucpready.procurement(#93). Both add a quote flow. Neither can remove the price requirement from the listing, for the reason below.Describe the solution you'd like
A structured way for a Business to say "no public price for this item", so a Platform never has to read it from prose. One possible shape:
variant.priceandproduct.price_rangebecome optional only when the variant says why, for example"pricing": "on_request".A well-known message code such as
price_on_requestwithpresentation: "disclosure"could carry the wording a Platform shows the buyer.Describe alternatives you've considered
The three options above. A vendor extension cannot fix this, because an extension composes with
allOfand can add a field but cannot relax a required one. So every B2B seller hits the same wall until core allows it.Additional context
Happy to share our implementation and the responses it sends.
Code of Conduct