---
title: "Simulate a Quote"
method: POST
path: "/api/v1/quote/simulate"
tags: ["Headless Quoting"]
---

# Simulate a Quote

`POST /api/v1/quote/simulate`

Synchronously calculates quote pricing and details based on the provided configuration without creating a persistent quote object in DealHub. Ideal for real-time price calculations.

Use this endpoint to calculate real-time pricing and quote details without creating a permanent record in DealHub. You have to inform the product and configuration data to receive the calculated line items and a financial summary. 

To run a simulation, your request must include a `version_id` to specify which pricing and product rules to use. You also need to provide one of the following options:

- `external_opportunity_id`: Use this to base the simulation on an existing opportunity in your CRM.
- `geo_code` and `currency`: Use this combination for simulations that do not depend on specific CRM data.

> 📘 Required data
> 
> You must provide either the `external_opportunity_id` or both the `geo_code` and `currency` parameters. Providing both in the same request will result in an error.

## Request body

- SimulateQuoteRequest
  - `version_id` string — DealHub version ID. If not provided, the system will use the active version.
  - `external_opportunity_id` string — CRM opportunity ID.
  - `geo_code` string — Geographic code.
  - `currency` string — Currency ISO code to evaluate rules. Immutable once created.
  - `line_item_details` 'basic' | 'all' — Determines the level of detail included in the response for line items.
  - `playbook` string — The unique name of the playbook (not the display name). If not provided, the system uses the first API-type playbook.
  - `total_sales_discount` number — Total discount for all line items. Overrides default line-item discounts if provided.
  - `partner_program` PartnerProgram[] — List of selected partner programs.
    - `partner_level_name` string
    - `program_name` string
  - `quote_data` QuoteData[], required — List of question group data, including questions and answers for repeatable/non-repeatable groups.
    - `group_id` string, required — DealHub group ID.
    - `questions` object[], required — List of questions data including question ID and answer/s. The following answer types are supported: * **Text List:** Contains one or more case-sensitive values, restricted to predefined options. Supports single or multi-select (delimiter: `;`). * **Text Answer:** Captures the value exactly as provided in the request payload. * **Radio Button:** Single case-sensitive value from predefined radio button selections. * **Manual Item:** Valid SKU existing in the system. * **Numeric List:** One or more numeric values from the answer predefined list (delimiter: `;`). * **Numeric Answer/Range:** Single numeric value within a predefined range. * **Date:** Date in `yyyy-mm-dd` format.
  - `line_items` LineItem[] — A list of line items along with their associated data.
    - `sku` string, required — Unique product catalog identifier. It must exist in the DealHub product catalog.
    - `item_name` string — Catalog product name.
    - `bundle_ref_sku` string — The SKU of the bundle product to which this line item belongs. The value is required if the line item is a component of a bundle. The bundle SKU must exist in the DealHub catalog. This field should be empty for the bundle product itself.
    - `bundle_ref_id` integer — The unique identifier for a bundle instance. This is required for all line items within a bundle and for the bundle's line item itself. It is used to differentiate between multiple instances of the same bundle in a single import.
    - `list_price` number — List price of the line item.
    - `net_price_per_unit` number — Net price per unit of the line item.
    - `net_price` number — Total net price (net per unit x product factors).
    - `msrp` number — line item MSRP (Manufacturer Suggested Retail Price).
    - `msrp_discount` number — Discount applied to the MSRP.
    - `sales_discount` number — Line item sales discount.
    - `total_discount` number — Line item total discount.
    - `partner_program_data` object[]
      - `partner_program_name` string — Partner program name.
      - `partner_level_item_price` number — Item price after partner program level discount.
      - `partner_level_item_discount` number — Discount applied to the partner program level.
    - `product_factors` object — List of product-specific factors (e.g., quantity, duration).
    - `attributes` object — List of line-item-specific proposal attributes.

## Response `200`

Simulation successful.

- QuoteResponse
  - `status` string
  - `dealhub_proposal_id` string
  - `dealhub_quote_id` string
  - `dealroom_url` string, uri
  - `approval_flows` boolean
  - `summary` ResponseSummary
    - `currency` string
    - `total_list_price` number
    - `total_net_price` number
    - `total_discount` number
    - `total_sales_discount` number
  - `line_items` ResponseLineItem[]
    - `id` string
    - `sku` string
    - `bundle_ref` string
    - `name` string
    - `list_price` number
    - `net_price` number
    - `product_factors` object
    - `total_discount` number
    - `additional_data` ResponseAdditionalData
      - `primary_tag` string
      - `msrp` number
      - `msrp_discount` number
      - `user_price` number
      - `net_per_unit` number
      - `partner_discounts` object[]
        - `name` string
        - `discount` number
        - `price` number
      - `sales_discount` number
      - `attributes` object

## Other responses

- `400` — Bad Request. The request payload is invalid or missing required information.

---

[API](https://skmtc.net/dealhub/apis/quote-api.md) · [All operations](https://skmtc.net/dealhub/apis/quote-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/dealhub/quote-api/versions/c30f5b9fbfab/schema)
