CreateQuoteRequest
| Field | Type |
|---|---|
portfolio_id | string |
currency | optional string |
items | repeated QuoteItemInput |
discount_ids | repeated string |
proposition_version_id | optional string |
pricing_country | optional string |
Required scope: quote:create
Creates a concept quote, called an offer internally. Each product may appear
only once. pricingCountry selects the applicable catalog prices and derives
the quote currency. currency remains accepted for compatibility as a
three-letter assertion, but it cannot select or override currency; a value that
conflicts with the country-derived currency is rejected with invalid_argument.
Quantities must be positive, and unitPriceCents can override the selected
product price when supplied.
When pricingCountry is omitted, pricing uses the portfolio’s main_location
country, falling back to the workspace default pricing country. Legacy clients
may therefore omit both pricingCountry and currency. The resolved country
and currency are frozen on the quote and returned by quote and order methods.
Price types are protobuf enum names in JSON:
PUBLIC_PRICE_TYPE_ONCE, PUBLIC_PRICE_TYPE_MONTHLY, or
PUBLIC_PRICE_TYPE_YEARLY.
POST /public-api/publicapi.v1.Quote/CreateQuote Creates a concept quote with product quantities and optional discounts. This operation is not idempotent and must not be blindly retried.
| Field | Type |
|---|---|
portfolio_id | string |
currency | optional string |
items | repeated QuoteItemInput |
discount_ids | repeated string |
proposition_version_id | optional string |
pricing_country | optional string |
| Field | Type |
|---|---|
quote | Quote |
{ "portfolioId": "<portfolio-id>", "pricingCountry": "US", "currency": "USD", "items": [ { "productId": "<product-id>", "quantity": 8, "priceType": "PUBLIC_PRICE_TYPE_ONCE" } ], "discountIds": ["<discount-id>"]}Legacy/default-resolution request:
{ "portfolioId": "<portfolio-id>", "items": [ { "productId": "<product-id>", "quantity": 8, "priceType": "PUBLIC_PRICE_TYPE_ONCE" } ]}The response quote starts with PUBLIC_QUOTE_STATUS_CONCEPT and includes a
version; pass the current version to ConfirmQuote.
This operation is not idempotent. Do not blindly retry after a timeout. First
call ListQuotes for the portfolio to determine whether creation completed.