Skip to content

Create Quote

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.

Generated Reference
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.

Request CreateQuoteRequest
Response CreateQuoteResponse

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

CreateQuoteResponse

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.