> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dualentry.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Quote record

> Create a new Quote record with the provided data. Validates all required fields and business rules.



## OpenAPI

````yaml /developers/openapi/resources-v3-alpha.json post /public/v3-alpha/quotes/
openapi: 3.1.0
info:
  title: DualEntry Public API
  version: 3.0.0-alpha
  description: ''
servers:
  - url: https://api.dualentry.com
    description: Production environment
  - url: https://api-dev.dualentry.com
    description: Development environment (for testing)
security: []
tags:
  - name: Health
    description: >-
      Monitor API availability and service status. Use these endpoints to verify
      connectivity and check if the API is operational.
  - name: Webhooks
    description: >-
      Register webhook endpoints to receive real-time event notifications when
      records change in your organization. Manage subscriptions, view available
      topics, and inspect delivery history.
  - name: Accounts
    description: >-
      Manage your chart of accounts. Create and maintain the accounts used to
      categorize financial transactions, including assets, liabilities, equity,
      revenue, and expenses.
  - name: Account Balances
    description: >-
      Read account balances for one company as of a date, equivalent to a Trial
      Balance report. Balance-sheet accounts report through the date;
      income-statement accounts report from the start of the fiscal year.
  - name: Budgets
    description: >-
      Manage financial budgets. Create and track income statement and balance
      sheet budgets with monthly cell values, actuals comparison, and
      classification filtering.
  - name: Companies
    description: >-
      Access and manage company information. Retrieve details about your
      organization including legal name, tax identifiers, addresses, and
      accounting preferences.
  - name: Customers
    description: >-
      Manage customer records. Create, update, and track customers who purchase
      goods or services from your organization, including contact information,
      billing addresses, and payment terms.
  - name: Contracts
    description: >-
      Manage revenue recognition contracts. Create, retrieve, and update
      contracts with performance obligations, manage obligation usage, and
      create change orders (v2).
  - name: Items
    description: >-
      Manage products and services. Define items that appear on invoices and
      bills, including pricing, descriptions, and associated accounts for
      revenue or expense tracking.
  - name: Vendors
    description: >-
      Manage vendor and supplier records. Track businesses and individuals from
      whom you purchase goods or services, including contact details, payment
      terms, and tax information.
  - name: Journal Entries
    description: >-
      Create and manage manual journal entries. Record direct debits and credits
      to accounts for adjustments, accruals, reclassifications, and other
      accounting transactions.
  - name: Invoices
    description: >-
      Manage sales invoices. Create and track invoices sent to customers for
      goods or services rendered, including line items, taxes, discounts, and
      payment status.
  - name: Quotes
    description: >-
      Create, submit, and send CPQ quotes, with line billing frequencies,
      multi-year ramps, recipients and signing order, and totals by billing
      frequency. Requires the CPQ subscription. Save a quote with
      `record_status` `posted` to submit it for approval; approvers approve or
      reject it in DualEntry. The API does not render quote PDFs.
  - name: Sales Orders
    description: >-
      Create and manage sales orders. Track customer orders for goods or
      services before invoicing, including line items, quantities, fulfillment
      status, and invoicing progress.
  - name: Bills
    description: >-
      Manage vendor bills and payables. Record and track bills received from
      vendors for goods or services purchased, including line items, due dates,
      and payment tracking.
  - name: Customer Prepayments
    description: >-
      Track advance payments from customers. Access prepayments received before
      goods or services are delivered, which can be applied to future invoices.
  - name: Customer Prepayment Applications
    description: >-
      Apply customer prepayments and credits to invoices. Record applications of
      prepayments or credit memos to reduce invoice balances.
  - name: Customer Deposits
    description: >-
      Manage customer deposit transactions. Record and track deposits received
      from customers as security or partial payment, held in liability accounts
      until earned or refunded.
  - name: Customer Refunds
    description: >-
      Process and track customer refunds. Record refunds issued to customers for
      overpayments, returns, or cancelled transactions.
  - name: Customer Credits
    description: >-
      Manage credit memos for customers. Issue credits for returned goods,
      billing adjustments, or discounts that reduce customer balances or can be
      applied to future invoices.
  - name: Cash Sales
    description: >-
      Record immediate cash sales transactions. Track sales where payment is
      received at the time of sale, including point-of-sale transactions and
      cash receipts.
  - name: Customer Payments
    description: >-
      Record and manage customer payments. Track payments received from
      customers and apply them to outstanding invoices, including partial
      payments and overpayments.
  - name: Recurring Invoices
    description: >-
      Automate recurring billing. Set up and manage templates for invoices that
      are automatically generated on a regular schedule (e.g., monthly
      subscriptions).
  - name: Recurring Bills
    description: >-
      Automate recurring expenses. Configure templates for bills that repeat on
      a regular basis (e.g., monthly rent, subscriptions) to streamline expense
      tracking.
  - name: Recurring Journal Entries
    description: >-
      Automate recurring journal entries. Create templates for journal entries
      that occur regularly (e.g., monthly depreciation, amortization) to ensure
      consistent accounting treatment.
  - name: Classifications
    description: >-
      Manage custom classification dimensions. Create and maintain
      classification categories (e.g., departments, locations, projects) used to
      tag and analyze transactions across multiple dimensions.
  - name: Classifications Lines
    description: >-
      Manage classification values. Define the specific values within each
      classification category that can be assigned to transaction line items for
      detailed reporting and analysis.
  - name: Custom Fields
    description: >-
      Manage custom field definitions. Extend records with organization-specific
      attributes — name, type (text, number, boolean, date, single_select,
      multi_select, currency, link, paragraph), default value, options, and
      which record types (invoice, bill, customer, vendor, etc.) and companies
      the field applies to. Values are set via the `custom_fields` attribute on
      each record's create/update endpoint.
  - name: Purchase Orders
    description: >-
      Create and track purchase orders. Manage formal requests to vendors for
      goods or services, including approval workflows, receiving tracking, and
      bill matching.
  - name: Vendor Payments
    description: >-
      Record vendor payments and apply them to bills, vendor credits, and
      journal entry lines. Create and update post a general ledger transaction.
      The save also computes realized, rounding, and matching gain or loss,
      posts an elimination transaction for an intercompany vendor, and creates a
      paper check when the payment method requires printing. Send attachments to
      replace the file list. PATCH changes only the sent fields. POST
      /{number}/attachments/ adds files and keeps existing files.
  - name: Vendor Prepayments
    description: >-
      Track advance payments to vendors. Record prepayments made before goods or
      services are received, which can be applied to future bills.
  - name: Vendor Prepayment Applications
    description: >-
      Apply vendor prepayments to bills. Record applications of prepayments to
      reduce bill balances and track amounts owed.
  - name: Vendor Credits
    description: >-
      Manage vendor credit memos. Record credits from vendors for returned
      goods, billing adjustments, or discounts that reduce amounts owed or can
      be applied to future bills.
  - name: Vendor Refunds
    description: >-
      Process and track vendor refunds. Record refunds received from vendors for
      overpayments, returns, or cancelled transactions.
  - name: Paper Checks
    description: >-
      Manage paper check printing. Create, queue, and batch print paper checks
      for vendor payments, direct expenses, vendor prepayments, and customer
      refunds.
  - name: Direct Expenses
    description: >-
      Record direct expense transactions. Track payments made directly from a
      bank or credit card account for expenses, without going through the
      accounts payable process.
  - name: Bank Transfers
    description: >-
      Manage bank-to-bank transfers. Record and track transfers between bank and
      credit card accounts, including multi-currency transfers with exchange
      rate handling.
  - name: Bank Match
    description: >-
      Reconcile bank-feed rows against accounting transactions. List bank rows,
      trigger the matching pipeline, read AI suggestions, and confirm or undo
      matches. V2 API only.
  - name: Bank Connections
    description: >-
      Register and list customer-built inbound bank connection feeds. Create
      connections and accounts with source_type=customer_api, then push
      transactions separately. V2 API only.
  - name: Fixed Assets
    description: >-
      Manage fixed assets and capital equipment. Create, update, and track
      long-lived tangible assets including depreciation schedules, account
      assignments, and asset lifecycle management.
  - name: Fixed Asset Classes
    description: List fixed asset classes used to set fixed_asset_class_id on an asset.
  - name: Intercompany Journal Entries
    description: >-
      Create and manage intercompany journal entries. Record GL activity that
      spans two or more companies within the same organization, with per-line
      company assignment and automatic intercompany elimination.
  - name: Depreciation Books
    description: >-
      Discover available depreciation books for multi-book depreciation. Each
      organization has a posting book (BOOK) and may have additional tax books
      (FEDERAL, AMT, STATE_*). V2 API only.
  - name: VAT Rates
    description: >-
      Look up available VAT (Value Added Tax) rates for your organization. Use
      these IDs as `vat_rate_id` on transaction line items. Rates are scoped by
      country and include standard, reduced, zero-rated, exempt, and reverse
      charge types. V2 API only.
  - name: GST Tax Rates
    description: >-
      Look up available GST (Goods and Services Tax) rates for your
      organization. Use these IDs as `gst_tax_rate_id` on transaction line
      items. Covers AU, NZ, SG, IN, CA GST regimes and MY SST, with
      per-component breakdowns (e.g. CGST+SGST for India). V2 API only.
  - name: Product Tax Codes
    description: >-
      Manage organization product tax codes and discover global product tax
      codes. Use these IDs as `product_tax_code_id` on item payloads. V2 API
      only.
  - name: Approval Policies
    description: >-
      Manage approval workflows and policies. Define approval rules, steps,
      conditions, and approvers for different record types. Monitor workflow
      execution states and view approval history.
  - name: Inbox
    description: >-
      View pending approvals and approval status. Access transactions and
      records awaiting approval across the organization, including full approval
      workflow details, approvers, and action history.
  - name: Data Exports
    description: >-
      Request off-cycle refreshes of your organization's data export to its
      configured destination (for example a Snowflake warehouse) and poll their
      status. Exports also run automatically on a schedule — this is the
      on-demand supplement. Requests are accepted and orchestrated by DualEntry;
      there is no SLA on when a run starts.
paths:
  /public/v3-alpha/quotes/:
    post:
      tags:
        - Quotes
      summary: Create Quote record
      description: >-
        Create a new Quote record with the provided data. Validates all required
        fields and business rules.
      operationId: create_Quote_record
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
            maxLength: 255
          description: >-
            Optional. A unique value (a UUID works well) identifying this
            operation. If the request is repeated with the same key, the
            original response is replayed instead of the operation running
            again, so a retry cannot create a duplicate record. Results are
            replayable for 48 hours. Reusing a key with a different request body
            returns 422.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicQuoteSchemaCreateIn'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicQuoteSchemaOut'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorSchema'
        '422':
          description: Unprocessable Content
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorSchema'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorSchema'
components:
  schemas:
    PublicQuoteSchemaCreateIn:
      description: >-
        Create a quote. `record_status` `posted` submits it: it runs the quote
        approval policy, and the quote is approved when no policy applies. Send
        `draft` to save without submitting. `items` replaces the quote lines
        wholesale: send `id` to keep a line, and send its billing fields
        (`billing_frequency`, `billing_interval`, `billing_start_date`,
        `billing_end_date`, `ramp_group_id`) or it is saved as a one-time line
        that follows the quote contract dates. On recurring lines `rate` is the
        price per billing period.
      properties:
        bill_to_address:
          default: ''
          deprecated: true
          description: >-
            Deprecated: send the structured billing_address / shipping_address
            instead.
          title: Bill To Address
          type:
            - string
            - 'null'
        ship_to_address:
          default: ''
          deprecated: true
          description: >-
            Deprecated: send the structured billing_address / shipping_address
            instead.
          title: Ship To Address
          type:
            - string
            - 'null'
        billing_address:
          anyOf:
            - $ref: '#/components/schemas/AddressSchemaIn'
            - type: 'null'
        shipping_address:
          anyOf:
            - $ref: '#/components/schemas/AddressSchemaIn'
            - type: 'null'
        valid_until:
          format: date
          title: Valid Until
          type: string
        company_id:
          title: Company Id
          type: integer
        customer_id:
          title: Customer Id
          type:
            - integer
            - 'null'
        name:
          default: ''
          maxLength: 128
          title: Name
          type: string
        email:
          title: Email
          type: string
        currency_iso_4217_code:
          title: Currency Iso 4217 Code
          type: string
        term_id:
          title: Term Id
          type:
            - integer
            - 'null'
        memo:
          default: ''
          title: Memo
          type: string
        close_date:
          format: date
          title: Close Date
          type: string
        contract_start_date:
          format: date
          title: Contract Start Date
          type: string
        contract_end_type:
          allOf:
            - $ref: '#/components/schemas/QuoteContractEndType'
          default: after
        number_of_months:
          default: 12
          title: Number Of Months
          minimum: 1
          type:
            - integer
            - 'null'
        contract_end_date:
          title: Contract End Date
          format: date
          type:
            - string
            - 'null'
        contract_legal_terms:
          title: Contract Legal Terms
          type:
            - string
            - 'null'
        document_headline_total:
          anyOf:
            - $ref: '#/components/schemas/QuoteHeadlineTotal'
            - type: 'null'
          description: >-
            The large total on the quote document when the quote has recurring
            lines. Omit to use the organization default on create and keep the
            saved value on update.
        document_total_rows:
          description: >-
            Total rows that print on the quote document, in print order. The row
            of the large total does not print. Omit to use the organization
            default on create and keep the saved rows on update.
          title: Document Total Rows
          items:
            $ref: '#/components/schemas/QuoteTotalRow'
          maxItems: 7
          type:
            - array
            - 'null'
        document_year_by_year:
          description: >-
            Print the year-by-year breakdown table on the quote document. Omit
            to keep the saved value on update; new quotes start with it off.
          title: Document Year By Year
          type:
            - boolean
            - 'null'
        items:
          default: []
          items:
            $ref: '#/components/schemas/QuoteItemIn'
          title: Items
          type: array
        recipients:
          description: Omit to leave the saved recipients unchanged
          title: Recipients
          items:
            $ref: '#/components/schemas/QuoteRecipientIn'
          type:
            - array
            - 'null'
        record_status:
          allOf:
            - $ref: '#/components/schemas/RecordStatus'
          default: posted
      required:
        - company_id
        - email
        - currency_iso_4217_code
        - close_date
        - contract_start_date
      title: PublicQuoteSchemaCreateIn
      type: object
    PublicQuoteSchemaOut:
      description: >-
        A quote with its lines, recipients (signing order included), send
        status, and totals by billing frequency.
      properties:
        bill_to_address:
          deprecated: true
          description: >-
            Deprecated: send the structured billing_address / shipping_address
            instead.
          title: Bill To Address
          type: string
        ship_to_address:
          deprecated: true
          description: >-
            Deprecated: send the structured billing_address / shipping_address
            instead.
          title: Ship To Address
          type: string
        billing_address:
          anyOf:
            - $ref: '#/components/schemas/AddressSchemaOut'
            - type: 'null'
        shipping_address:
          anyOf:
            - $ref: '#/components/schemas/AddressSchemaOut'
            - type: 'null'
        created_at:
          format: date-time
          title: Created At
          type: string
        updated_at:
          format: date-time
          title: Updated At
          type: string
        completed_approvals_count:
          default: 0
          title: Completed Approvals Count
          type: integer
        total_approvals_count:
          default: 0
          title: Total Approvals Count
          type: integer
        workflow_status:
          title: Workflow Status
          type:
            - string
            - 'null'
        pending_approvers_count:
          default: 0
          title: Pending Approvers Count
          type: integer
        send_status:
          allOf:
            - $ref: '#/components/schemas/QuoteSendStatus'
          default: draft
        can_send:
          default: false
          title: Can Send
          type: boolean
        approval_info:
          anyOf:
            - $ref: '#/components/schemas/ApprovalInfoSchema'
            - type: 'null'
        approval_chain:
          anyOf:
            - $ref: '#/components/schemas/ApprovalChainSchema'
            - type: 'null'
        bank_match_status:
          title: Bank Match Status
          type:
            - string
            - 'null'
        id:
          title: Id
          type: integer
        number:
          title: Number
          type: integer
        code:
          description: Code from the company quote sequence, e.g. QT-0001
          title: Code
          type:
            - string
            - 'null'
        record_status:
          $ref: '#/components/schemas/RecordStatus'
        valid_until:
          format: date
          title: Valid Until
          type: string
        company_id:
          title: Company Id
          type: integer
        company_name:
          title: Company Name
          type: string
        company_currency:
          title: Company Currency
          type: string
        customer_id:
          title: Customer Id
          type:
            - integer
            - 'null'
        customer_name:
          title: Customer Name
          type:
            - string
            - 'null'
        name:
          title: Name
          type: string
        email:
          title: Email
          type: string
        currency_iso_4217_code:
          title: Currency Iso 4217 Code
          type: string
        term_id:
          title: Term Id
          type:
            - integer
            - 'null'
        term_name:
          title: Term Name
          type: string
        memo:
          title: Memo
          type: string
        close_date:
          format: date
          title: Close Date
          type: string
        contract_start_date:
          format: date
          title: Contract Start Date
          type: string
        contract_end_type:
          $ref: '#/components/schemas/QuoteContractEndType'
        number_of_months:
          title: Number Of Months
          type:
            - integer
            - 'null'
        contract_end_date:
          title: Contract End Date
          format: date
          type:
            - string
            - 'null'
        contract_legal_terms:
          title: Contract Legal Terms
          type:
            - string
            - 'null'
        sent_at:
          title: Sent At
          format: date-time
          type:
            - string
            - 'null'
        document_headline_total:
          $ref: '#/components/schemas/QuoteHeadlineTotal'
        document_total_rows:
          items:
            $ref: '#/components/schemas/QuoteTotalRow'
          title: Document Total Rows
          type: array
        document_year_by_year:
          title: Document Year By Year
          type: boolean
        items:
          items:
            $ref: '#/components/schemas/QuoteItemOut'
          title: Items
          type: array
        recipients:
          items:
            $ref: '#/components/schemas/QuoteRecipientOut'
          title: Recipients
          type: array
        subtotal:
          description: Sum of quantity x rate before discounts and tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Subtotal
          type: string
        discount_total:
          description: Sum of inline line discounts
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Discount Total
          type: string
        tax_total:
          description: Sum of line tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Tax Total
          type: string
        amount:
          description: >-
            Quote total for one billing period of each line, calculated like an
            invoice total
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Amount
          type: string
        contract_value:
          description: >-
            Contract amount this quote converts to: quantity x rate over each
            line's term, before discount and tax; approvals compare this
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Contract Value
          type: string
        totals:
          $ref: '#/components/schemas/QuoteTotalsOut'
          description: Totals by billing frequency
        created_by:
          anyOf:
            - $ref: '#/components/schemas/AuditActorSchemaOut'
            - type: 'null'
        updated_by:
          anyOf:
            - $ref: '#/components/schemas/AuditActorSchemaOut'
            - type: 'null'
      required:
        - bill_to_address
        - ship_to_address
        - created_at
        - updated_at
        - id
        - number
        - record_status
        - valid_until
        - company_id
        - company_name
        - company_currency
        - customer_id
        - customer_name
        - name
        - email
        - currency_iso_4217_code
        - term_id
        - term_name
        - memo
        - close_date
        - contract_start_date
        - contract_end_type
        - number_of_months
        - contract_end_date
        - contract_legal_terms
        - sent_at
        - document_headline_total
        - document_total_rows
        - document_year_by_year
        - items
        - recipients
        - subtotal
        - discount_total
        - tax_total
        - amount
        - contract_value
        - totals
      title: PublicQuoteSchemaOut
      type: object
    ErrorSchema:
      properties:
        success:
          const: false
          default: false
          title: Success
          type: boolean
        errors:
          additionalProperties:
            items:
              type: string
            type: array
          title: Errors
          type: object
        error_code:
          title: Error Code
          type:
            - string
            - 'null'
        error_reason:
          title: Error Reason
          type:
            - string
            - 'null'
      required:
        - errors
      title: ErrorSchema
      type: object
    AddressSchemaIn:
      properties:
        street:
          title: Street
          type: string
        city:
          title: City
          type: string
        state:
          default: ''
          title: State
          type: string
        postal_code:
          title: Postal Code
          type: string
        country:
          anyOf:
            - const: ''
              type: string
            - $ref: '#/components/schemas/SystemCountries'
          default: ''
          title: Country
        second_line:
          default: ''
          title: Second Line
          type: string
        name:
          title: Name
          type:
            - string
            - 'null'
      required:
        - street
        - city
        - postal_code
      title: AddressSchemaIn
      type: object
    QuoteContractEndType:
      enum:
        - after
        - ongoing
        - date
      title: QuoteContractEndType
      type: string
    QuoteHeadlineTotal:
      enum:
        - tcv
        - annual
        - quarterly
        - monthly
        - first_year
      title: QuoteHeadlineTotal
      type: string
    QuoteTotalRow:
      description: >-
        Total rows on the quote document. Monthly, quarterly and annual are the
        recurring value per period.
      enum:
        - one_time
        - monthly
        - quarterly
        - annual
        - first_year
        - first_invoice
        - tcv
      title: QuoteTotalRow
      type: string
    QuoteItemIn:
      properties:
        discount_type:
          anyOf:
            - $ref: '#/components/schemas/DiscountType'
            - type: 'null'
        discount_value:
          anyOf:
            - type: number
            - pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,6}0*$
              type: string
            - type: 'null'
          title: Discount Value
        tax:
          anyOf:
            - $ref: '#/components/schemas/ItemTaxData'
            - type: 'null'
        id:
          title: Id
          type:
            - integer
            - 'null'
        item_id:
          title: Item Id
          type: integer
        quantity:
          anyOf:
            - minimum: 0
              type: number
            - pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,6}0*$
              type: string
          title: Quantity
        rate:
          anyOf:
            - type: number
            - pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,10}0*$
              type: string
          description: Price per billing period on recurring lines
          title: Rate
        position:
          minimum: 0
          title: Position
          type: integer
        memo:
          default: ''
          title: Memo
          type: string
        billing_frequency:
          allOf:
            - $ref: '#/components/schemas/BillingCadence'
          default: one_time
        billing_interval:
          default: 1
          description: Bill every N periods of the billing frequency
          minimum: 1
          title: Billing Interval
          type: integer
        billing_start_date:
          description: Null follows the quote contract start
          title: Billing Start Date
          format: date
          type:
            - string
            - 'null'
        billing_end_date:
          description: >-
            Null follows the quote contract end, so the line is ongoing on an
            ongoing quote
          title: Billing End Date
          format: date
          type:
            - string
            - 'null'
        ramp_group_id:
          description: >-
            Shared by the segments of one multi-year ramp: same item, frequency
            and interval over back-to-back service periods. Maps to the contract
            obligation ramp_group_id
          title: Ramp Group Id
          format: uuid
          type:
            - string
            - 'null'
      required:
        - item_id
        - quantity
        - rate
        - position
      title: QuoteItemIn
      type: object
    QuoteRecipientIn:
      properties:
        id:
          title: Id
          type:
            - integer
            - 'null'
        side:
          $ref: '#/components/schemas/QuoteRecipientSide'
        organization_user_id:
          title: Organization User Id
          type:
            - integer
            - 'null'
        customer_id:
          title: Customer Id
          type:
            - integer
            - 'null'
        name:
          default: ''
          maxLength: 255
          title: Name
          type: string
        email:
          default: ''
          maxLength: 254
          title: Email
          type: string
        is_signer:
          default: true
          title: Is Signer
          type: boolean
        signing_order:
          title: Signing Order
          minimum: 1
          type:
            - integer
            - 'null'
        position:
          default: 1
          minimum: 1
          title: Position
          type: integer
      required:
        - side
      title: QuoteRecipientIn
      type: object
    RecordStatus:
      enum:
        - draft
        - posted
        - archived
      title: RecordStatus
      type: string
    AddressSchemaOut:
      properties:
        street:
          title: Street
          type: string
        city:
          title: City
          type: string
        state:
          default: ''
          title: State
          type: string
        postal_code:
          title: Postal Code
          type: string
        country:
          anyOf:
            - const: ''
              type: string
            - $ref: '#/components/schemas/SystemCountries'
          default: ''
          title: Country
        second_line:
          default: ''
          title: Second Line
          type: string
        name:
          title: Name
          type:
            - string
            - 'null'
      required:
        - street
        - city
        - postal_code
      title: AddressSchemaOut
      type: object
    QuoteSendStatus:
      enum:
        - draft
        - awaiting_approval
        - approved
        - rejected
      title: QuoteSendStatus
      type: string
    ApprovalInfoSchema:
      description: Schema for complete approval workflow information.
      properties:
        workflow_name:
          title: Workflow Name
          type: string
        workflow_version:
          title: Workflow Version
          type: integer
        step_name:
          title: Step Name
          type: string
        current_substep:
          title: Current Substep
          type: integer
        substeps:
          items:
            $ref: '#/components/schemas/SubstepInfoSchema'
          title: Substeps
          type: array
      required:
        - workflow_name
        - workflow_version
        - step_name
        - current_substep
        - substeps
      title: ApprovalInfoSchema
      type: object
    ApprovalChainSchema:
      description: Full approval chain.
      properties:
        workflow_name:
          title: Workflow Name
          type: string
        workflow_version:
          title: Workflow Version
          type: integer
        steps:
          items:
            $ref: '#/components/schemas/StepChainSchema'
          title: Steps
          type: array
      required:
        - workflow_name
        - workflow_version
        - steps
      title: ApprovalChainSchema
      type: object
    QuoteItemOut:
      properties:
        item_type:
          title: Item Type
          type:
            - string
            - 'null'
        hsn_sac_code:
          title: Hsn Sac Code
          type:
            - string
            - 'null'
        discount_type:
          anyOf:
            - $ref: '#/components/schemas/DiscountType'
            - type: 'null'
        discount_value:
          title: Discount Value
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,6}0*$
          type:
            - string
            - 'null'
        tax:
          anyOf:
            - $ref: '#/components/schemas/ItemTaxDataOut'
            - type: 'null'
        id:
          title: Id
          type: integer
        item_id:
          title: Item Id
          type: integer
        item_name:
          title: Item Name
          type: string
        quantity:
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,6}0*$
          title: Quantity
          type: string
        rate:
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,10}0*$
          title: Rate
          type: string
        position:
          title: Position
          type: integer
        memo:
          title: Memo
          type: string
        billing_frequency:
          $ref: '#/components/schemas/BillingCadence'
        billing_interval:
          title: Billing Interval
          type: integer
        billing_start_date:
          description: Set only when the line overrides the quote contract start
          title: Billing Start Date
          format: date
          type:
            - string
            - 'null'
        billing_end_date:
          description: Set only when the line overrides the quote contract end
          title: Billing End Date
          format: date
          type:
            - string
            - 'null'
        service_start_date:
          description: >-
            Billing start in effect: the line's own date or the quote contract
            start
          format: date
          title: Service Start Date
          type: string
        service_end_date:
          description: Billing end in effect; null when ongoing
          title: Service End Date
          format: date
          type:
            - string
            - 'null'
        periods_in_term:
          description: Billing periods in the line's service period; null when ongoing
          title: Periods In Term
          type:
            - integer
            - 'null'
        ramp_group_id:
          title: Ramp Group Id
          format: uuid
          type:
            - string
            - 'null'
        net_amount:
          description: Net amount after discount, before tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          readOnly: true
          title: Net Amount
          type: string
        tax_amount:
          description: Calculated tax amount
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          readOnly: true
          title: Tax Amount
          type: string
        gross_amount:
          description: Calculated total amount including tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          readOnly: true
          title: Gross Amount
          type: string
        amount:
          description: >-
            Calculated total amount including tax named amount for backward
            compatibility
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          readOnly: true
          title: Amount
          type: string
        discount_amount:
          description: Inline discount amount
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          readOnly: true
          title: Discount Amount
          type: string
        line_tcv:
          description: Net amount x periods in term, before tax; null when ongoing
          readOnly: true
          title: Line Tcv
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          type:
            - string
            - 'null'
      required:
        - id
        - item_id
        - item_name
        - quantity
        - rate
        - position
        - memo
        - billing_frequency
        - billing_interval
        - billing_start_date
        - billing_end_date
        - service_start_date
        - service_end_date
        - periods_in_term
        - ramp_group_id
        - net_amount
        - tax_amount
        - gross_amount
        - amount
        - discount_amount
        - line_tcv
      title: QuoteItemOut
      type: object
    QuoteRecipientOut:
      properties:
        id:
          title: Id
          type: integer
        side:
          $ref: '#/components/schemas/QuoteRecipientSide'
        organization_user_id:
          title: Organization User Id
          type:
            - integer
            - 'null'
        customer_id:
          title: Customer Id
          type:
            - integer
            - 'null'
        name:
          title: Name
          type: string
        email:
          title: Email
          type: string
        is_signer:
          title: Is Signer
          type: boolean
        signing_order:
          title: Signing Order
          type:
            - integer
            - 'null'
        position:
          title: Position
          type: integer
      required:
        - id
        - side
        - organization_user_id
        - customer_id
        - name
        - email
        - is_signer
        - signing_order
        - position
      title: QuoteRecipientOut
      type: object
    QuoteTotalsOut:
      properties:
        one_time:
          $ref: '#/components/schemas/QuoteTotalsBucketOut'
        recurring:
          description: >-
            Amounts billed each period, one entry per billing frequency and
            interval, shortest period first
          items:
            $ref: '#/components/schemas/QuoteRecurringTotalsOut'
          title: Recurring
          type: array
        mrr:
          description: >-
            Monthly recurring revenue before tax, calculated like the contract
            MRR
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Mrr
          type: string
        arr:
          description: >-
            Annual recurring revenue before tax, calculated like the contract
            ARR
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Arr
          type: string
        first_invoice_amount:
          description: Amount with tax billed on the contract start date
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: First Invoice Amount
          type: string
        first_year_value:
          description: >-
            Value of the periods that start in the first 12 months, net of
            discounts, before tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: First Year Value
          type: string
        tcv:
          description: >-
            Total contract value net of discounts, before tax; null when any
            line is ongoing
          title: Tcv
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          type:
            - string
            - 'null'
        initial_term_tcv:
          description: >-
            Total contract value of the initial term when the quote runs for a
            number of months
          title: Initial Term Tcv
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          type:
            - string
            - 'null'
        years:
          description: >-
            Value per contract year; the years add up to the TCV. Empty when the
            quote is ongoing
          items:
            $ref: '#/components/schemas/QuoteYearTotalOut'
          title: Years
          type: array
      required:
        - one_time
        - recurring
        - mrr
        - arr
        - first_invoice_amount
        - first_year_value
        - tcv
        - initial_term_tcv
        - years
      title: QuoteTotalsOut
      type: object
    AuditActorSchemaOut:
      description: Schema for audit actor information.
      properties:
        actor_type:
          title: Actor Type
          type:
            - string
            - 'null'
        email:
          title: Email
          type:
            - string
            - 'null'
        first_name:
          title: First Name
          type:
            - string
            - 'null'
        last_name:
          title: Last Name
          type:
            - string
            - 'null'
        timestamp:
          title: Timestamp
          format: date-time
          type:
            - string
            - 'null'
      title: AuditActorSchemaOut
      type: object
    SystemCountries:
      enum:
        - AA
        - AB
        - AC
        - AD
        - AE
        - AF
        - AG
        - AH
        - AI
        - AJ
        - AK
        - AL
        - AM
        - AN
        - AO
        - AP
        - AQ
        - AR
        - AS
        - AT
        - AU
        - AV
        - AW
        - AX
        - AY
        - AZ
        - BA
        - BB
        - BC
        - BD
        - BE
        - BF
        - BG
        - BH
        - BI
        - BJ
        - BK
        - BL
        - BM
        - BN
        - BO
        - BP
        - BQ
        - BR
        - BS
        - BT
        - BU
        - BV
        - BW
        - BX
        - BY
        - BZ
        - CA
        - CB
        - CC
        - CD
        - CE
        - CF
        - CG
        - CH
        - CI
        - CJ
        - CK
        - CL
        - CM
        - CN
        - CO
        - CP
        - CQ
        - CR
        - CS
        - CT
        - CU
        - CV
        - CW
        - CX
        - CY
        - CZ
        - DA
        - DB
        - DC
        - DD
        - DE
        - DF
        - DG
        - DH
        - DI
        - DJ
        - DK
        - DL
        - DM
        - DN
        - DO
        - DP
        - DQ
        - DR
        - DS
        - DT
        - DU
        - DV
        - DW
        - DX
        - DY
        - DZ
        - EA
        - EB
        - EC
        - ED
        - EE
        - EF
        - EG
        - EH
        - EI
        - EJ
        - EK
        - EL
        - EM
        - EN
        - EO
        - EP
        - EQ
        - ER
        - ES
        - ET
        - EU
        - EV
        - EW
        - EX
        - EY
        - EZ
        - FA
        - FB
        - FC
        - FD
        - FE
        - FF
        - FG
        - FH
        - FI
        - FJ
        - FK
        - FL
        - FM
        - FN
        - FO
        - FP
        - FQ
        - FR
        - FS
        - FT
        - FU
        - FV
        - FW
        - FX
        - FY
        - FZ
        - GA
        - GB
        - GC
        - GD
        - GE
        - GF
        - GG
        - GH
        - GI
        - GJ
        - GK
        - GL
        - GM
        - GN
        - GO
        - GP
        - GQ
        - GR
        - GS
        - GT
        - GU
        - GV
        - GW
        - GX
        - GY
        - GZ
        - HA
        - HB
        - HC
        - HD
        - HE
        - HF
        - HG
        - HH
        - HI
        - HJ
        - HK
        - HL
        - HM
        - HN
        - HO
        - HP
        - HQ
        - HR
        - HS
        - HT
        - HU
        - HV
        - HW
        - HX
        - HY
        - HZ
        - IA
        - IB
        - IC
        - ID
        - IE
        - IF
        - IG
        - IH
        - II
        - IJ
        - IK
        - IL
        - IM
        - IN
        - IO
        - IP
        - IQ
        - IR
        - IS
        - IT
        - IU
        - IV
        - IW
        - IX
        - IY
        - IZ
        - JA
        - JB
        - JC
        - JD
        - JE
        - JF
        - JG
        - JH
        - JI
        - JJ
        - JK
        - JL
        - JM
        - JN
        - JO
        - JP
        - JQ
        - JR
        - JS
        - JT
        - JU
        - JV
        - JW
        - JX
        - JY
        - JZ
        - KA
        - KB
        - KC
        - KD
        - KE
        - KF
        - KG
        - KH
        - KI
        - KJ
        - KK
        - KL
        - KM
        - KN
        - KO
        - KP
        - KQ
        - KR
        - KS
        - KT
        - KU
        - KV
        - KW
        - KX
        - KY
        - KZ
        - LA
        - LB
        - LC
        - LD
        - LE
        - LF
        - LG
        - LH
        - LI
        - LJ
        - LK
        - LL
        - LM
        - LN
        - LO
        - LP
        - LQ
        - LR
        - LS
        - LT
        - LU
        - LV
        - LW
        - LX
        - LY
        - LZ
        - MA
        - MB
        - MC
        - MD
        - ME
        - MF
        - MG
        - MH
        - MI
        - MJ
        - MK
        - ML
        - MM
        - MN
        - MO
        - MP
        - MQ
        - MR
        - MS
        - MT
        - MU
        - MV
        - MW
        - MX
        - MY
        - MZ
        - NA
        - NB
        - NC
        - ND
        - NE
        - NF
        - NG
        - NH
        - NI
        - NJ
        - NK
        - NL
        - NM
        - NN
        - 'NO'
        - NP
        - NQ
        - NR
        - NS
        - NT
        - NU
        - NV
        - NW
        - NX
        - NY
        - NZ
        - OA
        - OB
        - OC
        - OD
        - OE
        - OF
        - OG
        - OH
        - OI
        - OJ
        - OK
        - OL
        - OM
        - 'ON'
        - OO
        - OP
        - OQ
        - OR
        - OS
        - OT
        - OU
        - OV
        - OW
        - OX
        - OY
        - OZ
        - PA
        - PB
        - PC
        - PD
        - PE
        - PF
        - PG
        - PH
        - PI
        - PJ
        - PK
        - PL
        - PM
        - PN
        - PO
        - PP
        - PQ
        - PR
        - PS
        - PT
        - PU
        - PV
        - PW
        - PX
        - PY
        - PZ
        - QA
        - QB
        - QC
        - QD
        - QE
        - QF
        - QG
        - QH
        - QI
        - QJ
        - QK
        - QL
        - QM
        - QN
        - QO
        - QP
        - QQ
        - QR
        - QS
        - QT
        - QU
        - QV
        - QW
        - QX
        - QY
        - QZ
        - RA
        - RB
        - RC
        - RD
        - RE
        - RF
        - RG
        - RH
        - RI
        - RJ
        - RK
        - RL
        - RM
        - RN
        - RO
        - RP
        - RQ
        - RR
        - RS
        - RT
        - RU
        - RV
        - RW
        - RX
        - RY
        - RZ
        - SA
        - SB
        - SC
        - SD
        - SE
        - SF
        - SG
        - SH
        - SI
        - SJ
        - SK
        - SL
        - SM
        - SN
        - SO
        - SP
        - SQ
        - SR
        - SS
        - ST
        - SU
        - SV
        - SW
        - SX
        - SY
        - SZ
        - TA
        - TB
        - TC
        - TD
        - TE
        - TF
        - TG
        - TH
        - TI
        - TJ
        - TK
        - TL
        - TM
        - TN
        - TO
        - TP
        - TQ
        - TR
        - TS
        - TT
        - TU
        - TV
        - TW
        - TX
        - TY
        - TZ
        - UA
        - UB
        - UC
        - UD
        - UE
        - UF
        - UG
        - UH
        - UI
        - UJ
        - UK
        - UL
        - UM
        - UN
        - UO
        - UP
        - UQ
        - UR
        - US
        - UT
        - UU
        - UV
        - UW
        - UX
        - UY
        - UZ
        - VA
        - VB
        - VC
        - VD
        - VE
        - VF
        - VG
        - VH
        - VI
        - VJ
        - VK
        - VL
        - VM
        - VN
        - VO
        - VP
        - VQ
        - VR
        - VS
        - VT
        - VU
        - VV
        - VW
        - VX
        - VY
        - VZ
        - WA
        - WB
        - WC
        - WD
        - WE
        - WF
        - WG
        - WH
        - WI
        - WJ
        - WK
        - WL
        - WM
        - WN
        - WO
        - WP
        - WQ
        - WR
        - WS
        - WT
        - WU
        - WV
        - WW
        - WX
        - WY
        - WZ
        - XA
        - XB
        - XC
        - XD
        - XE
        - XF
        - XG
        - XH
        - XI
        - XJ
        - XK
        - XL
        - XM
        - XN
        - XO
        - XP
        - XQ
        - XR
        - XS
        - XT
        - XU
        - XV
        - XW
        - XX
        - XY
        - XZ
        - YA
        - YB
        - YC
        - YD
        - YE
        - YF
        - YG
        - YH
        - YI
        - YJ
        - YK
        - YL
        - YM
        - YN
        - YO
        - YP
        - YQ
        - YR
        - YS
        - YT
        - YU
        - YV
        - YW
        - YX
        - YY
        - YZ
        - ZA
        - ZB
        - ZC
        - ZD
        - ZE
        - ZF
        - ZG
        - ZH
        - ZI
        - ZJ
        - ZK
        - ZL
        - ZM
        - ZN
        - ZO
        - ZP
        - ZQ
        - ZR
        - ZS
        - ZT
        - ZU
        - ZV
        - ZW
        - ZX
        - ZY
        - ZZ
      title: SystemCountries
      type: string
    DiscountType:
      enum:
        - PERCENTAGE
        - FIXED
      title: DiscountType
      type: string
    ItemTaxData:
      properties:
        code:
          title: Code
          type: string
        rate:
          anyOf:
            - type: number
            - pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,6}0*$
              type: string
          title: Rate
        amount:
          anyOf:
            - type: number
            - pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
              type: string
          title: Amount
        is_taxable:
          title: Is Taxable
          type:
            - boolean
            - 'null'
        tax_exempt_amount:
          anyOf:
            - type: number
            - pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
              type: string
            - type: 'null'
          title: Tax Exempt Amount
        vat_rate_id:
          title: Vat Rate Id
          type:
            - integer
            - 'null'
        gst_tax_rate_id:
          title: Gst Tax Rate Id
          type:
            - integer
            - 'null'
        tax_metadata:
          title: Tax Metadata
          additionalProperties: true
          type:
            - object
            - 'null'
      required:
        - code
        - rate
        - amount
      title: ItemTaxData
      type: object
    BillingCadence:
      enum:
        - one_time
        - daily
        - weekly
        - monthly
        - quarterly
        - semi_annually
        - annually
      title: BillingCadence
      type: string
    QuoteRecipientSide:
      enum:
        - company
        - buyer
      title: QuoteRecipientSide
      type: string
    SubstepInfoSchema:
      description: Schema for individual substep information in approval workflow.
      properties:
        order:
          title: Order
          type: integer
        status:
          $ref: '#/components/schemas/SubstepStatus'
        approve_condition:
          $ref: '#/components/schemas/ApproveCondition'
        approvers:
          items:
            $ref: '#/components/schemas/ApproverSchema'
          title: Approvers
          type: array
        approved_by:
          items:
            $ref: '#/components/schemas/ApproverSchema'
          title: Approved By
          type: array
        rejected_by:
          items:
            $ref: '#/components/schemas/ApproverSchema'
          title: Rejected By
          type: array
      required:
        - order
        - status
        - approve_condition
        - approvers
        - approved_by
        - rejected_by
      title: SubstepInfoSchema
      type: object
    StepChainSchema:
      description: Step in approval chain.
      properties:
        order:
          title: Order
          type: integer
        name:
          title: Name
          type: string
        status:
          $ref: '#/components/schemas/StepStatus'
        approve_condition:
          $ref: '#/components/schemas/ApproveCondition'
        substeps:
          title: Substeps
          items:
            $ref: '#/components/schemas/SubstepChainSchema'
          type:
            - array
            - 'null'
        approvers:
          title: Approvers
          items:
            $ref: '#/components/schemas/ApproverDictSchema'
          type:
            - array
            - 'null'
        approved_by:
          title: Approved By
          items:
            $ref: '#/components/schemas/ApproverDictSchema'
          type:
            - array
            - 'null'
        rejected_by:
          title: Rejected By
          items:
            $ref: '#/components/schemas/ApproverDictSchema'
          type:
            - array
            - 'null'
      required:
        - order
        - name
        - status
        - approve_condition
      title: StepChainSchema
      type: object
    ItemTaxDataOut:
      properties:
        code:
          title: Code
          type: string
        rate:
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,6}0*$
          title: Rate
          type: string
        amount:
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Amount
          type: string
        is_taxable:
          title: Is Taxable
          type:
            - boolean
            - 'null'
        tax_exempt_amount:
          title: Tax Exempt Amount
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          type:
            - string
            - 'null'
        vat_rate_id:
          title: Vat Rate Id
          type:
            - integer
            - 'null'
        gst_tax_rate_id:
          title: Gst Tax Rate Id
          type:
            - integer
            - 'null'
        tax_metadata:
          title: Tax Metadata
          additionalProperties: true
          type:
            - object
            - 'null'
        tax_components:
          title: Tax Components
          items:
            $ref: '#/components/schemas/TaxComponentSchema'
          type:
            - array
            - 'null'
        amount_with_tax:
          title: Amount With Tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          type:
            - string
            - 'null'
        rate_name:
          title: Rate Name
          type:
            - string
            - 'null'
        rate_description:
          title: Rate Description
          type:
            - string
            - 'null'
        rate_type:
          title: Rate Type
          type:
            - string
            - 'null'
        tax_treatment:
          title: Tax Treatment
          type:
            - string
            - 'null'
        valid_to:
          title: Valid To
          format: date
          type:
            - string
            - 'null'
      required:
        - code
        - rate
        - amount
      title: ItemTaxDataOut
      type: object
    QuoteTotalsBucketOut:
      properties:
        subtotal:
          description: Sum of quantity x rate before discounts and tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Subtotal
          type: string
        discount_total:
          description: Sum of inline line discounts
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Discount Total
          type: string
        tax_total:
          description: Sum of line tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Tax Total
          type: string
        total:
          description: Subtotal - discount + tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Total
          type: string
      required:
        - subtotal
        - discount_total
        - tax_total
        - total
      title: QuoteTotalsBucketOut
      type: object
    QuoteRecurringTotalsOut:
      properties:
        subtotal:
          description: Sum of quantity x rate before discounts and tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Subtotal
          type: string
        discount_total:
          description: Sum of inline line discounts
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Discount Total
          type: string
        tax_total:
          description: Sum of line tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Tax Total
          type: string
        total:
          description: Subtotal - discount + tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Total
          type: string
        billing_frequency:
          $ref: '#/components/schemas/BillingCadence'
        billing_interval:
          title: Billing Interval
          type: integer
      required:
        - subtotal
        - discount_total
        - tax_total
        - total
        - billing_frequency
        - billing_interval
      title: QuoteRecurringTotalsOut
      type: object
    QuoteYearTotalOut:
      properties:
        year:
          description: Contract year, starting at 1
          title: Year
          type: integer
        start_date:
          format: date
          title: Start Date
          type: string
        end_date:
          format: date
          title: End Date
          type: string
        total:
          description: >-
            Value of the billing periods that start in this year, net of
            discounts, before tax
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Total
          type: string
      required:
        - year
        - start_date
        - end_date
        - total
      title: QuoteYearTotalOut
      type: object
    SubstepStatus:
      description: Status of a substep in the approval workflow.
      enum:
        - completed
        - pending
        - not_started
      title: SubstepStatus
      type: string
    ApproveCondition:
      description: Condition for approving a substep.
      enum:
        - any
        - all
      title: ApproveCondition
      type: string
    ApproverSchema:
      description: Schema for approver information.
      properties:
        id:
          title: Id
          type: integer
        first_name:
          title: First Name
          type: string
        last_name:
          title: Last Name
          type: string
        email:
          title: Email
          type: string
        full_name:
          title: Full Name
          type: string
        avatar_url:
          title: Avatar Url
          type:
            - string
            - 'null'
      required:
        - id
        - first_name
        - last_name
        - email
        - full_name
      title: ApproverSchema
      type: object
    StepStatus:
      description: Status of a step in the approval chain.
      enum:
        - completed
        - pending
        - not_started
        - skipped
      title: StepStatus
      type: string
    SubstepChainSchema:
      description: Substep in approval chain.
      properties:
        order:
          title: Order
          type: integer
        status:
          $ref: '#/components/schemas/SubstepStatus'
        approve_condition:
          $ref: '#/components/schemas/ApproveCondition'
        approvers:
          items:
            $ref: '#/components/schemas/ApproverDictSchema'
          title: Approvers
          type: array
        approved_by:
          items:
            $ref: '#/components/schemas/ApproverDictSchema'
          title: Approved By
          type: array
        rejected_by:
          items:
            $ref: '#/components/schemas/ApproverDictSchema'
          title: Rejected By
          type: array
      required:
        - order
        - status
        - approve_condition
        - approvers
        - approved_by
        - rejected_by
      title: SubstepChainSchema
      type: object
    ApproverDictSchema:
      description: Approver info from pre-serialized dict.
      properties:
        id:
          title: Id
          type: integer
        first_name:
          title: First Name
          type: string
        last_name:
          title: Last Name
          type: string
        email:
          title: Email
          type: string
        full_name:
          title: Full Name
          type: string
        avatar_url:
          title: Avatar Url
          type:
            - string
            - 'null'
      required:
        - id
        - first_name
        - last_name
        - email
        - full_name
      title: ApproverDictSchema
      type: object
    TaxComponentSchema:
      description: Per-component consumption tax breakdown stored on line items.
      properties:
        component_type:
          anyOf:
            - $ref: '#/components/schemas/GstComponentType'
            - $ref: '#/components/schemas/TaxFamily'
          title: Component Type
        rate:
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,6}0*$
          title: Rate
          type: string
        amount:
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
          title: Amount
          type: string
        region:
          title: Region
          type:
            - string
            - 'null'
        position:
          title: Position
          type: integer
      required:
        - component_type
        - rate
        - amount
        - position
      title: TaxComponentSchema
      type: object
    GstComponentType:
      enum:
        - CGST
        - SGST
        - IGST
        - CESS
        - GST
        - PST
        - HST
        - QST
      title: GstComponentType
      type: string
    TaxFamily:
      description: >-
        Broad classification of a tax rate within the GST module.


        `GST` covers the single-stage value-added-style regimes (AU, NZ, SG, IN,
        CA).

        `SST` covers Malaysia's Sales and Service Tax — a non-creditable
        single-stage

        regime that replaced Malaysia's GST in 2018. SST actually has two
        sub-regimes

        (Sales Tax on goods, Service Tax on services) but they share
        registration

        format (ANN-YYMM-NNNNNNNN, self-identifying by prefix), calculation
        rules, and

        administration — so we don't split them at the family level. The rate's

        ``name`` ("Sales Tax 10%", "Service Tax 8%") carries that human
        distinction.
      enum:
        - GST
        - SST
      title: TaxFamily
      type: string

````