ReferenceGenerated
Settings reference
Every configurable per-shop setting in Thermal and its default value, plus the optional modules a shop can switch on — generated directly from the settings schema, so a new setting shows up here automatically the next time this doc regenerates.
Org settings
A brand-new shop starts with these defaults. Settings are edited from the in-app Settings pages; nothing here requires support or engineering involvement to change.
| Setting | Type | Default |
|---|---|---|
capabilities.rentals | boolean | false |
capabilities.capitalPlanning | boolean | false |
capabilities.marketing | boolean | false |
capabilities.customer-portal | boolean | false |
capabilities.vendor-portal | boolean | false |
capabilities.hvac_pack | boolean | false |
capabilities.fire_pack | boolean | false |
capabilities.plumbing_pack | boolean | false |
capabilities.electrical_pack | boolean | false |
capabilities.accountingSync | boolean | false |
capitalPlan.horizonYearsDefault | number | 3 |
capitalPlan.contingencyBasis | string | none |
capitalPlan.contingencyPercentBps | number | 0 |
capitalPlan.contingencyFixedCents | number | 0 |
scheduling.assignWithNoTimePolicy | string | anchor-else-unscheduled |
dashboard.goals | array | [{"key":"ftfr","target":85},{"key":"utilization","target":80},{"key":"avgTicket","target":520}] |
automation.masterOn | boolean | true |
automation.overnightAutoSchedule | boolean | false |
automation.moduleLevels.smart-scheduling | string | auto |
automation.moduleLevels.dispatch-auto-assign | string | suggest |
automation.moduleLevels.equipment-health | string | suggest |
automation.moduleLevels.kpi-watch | string | suggest |
automation.moduleLevels.upsell | string | off |
automation.moduleLevels.ar-collections | string | suggest |
automation.moduleLevels.quote-follow-up | string | suggest |
automation.moduleLevels.agreement-renewal | string | suggest |
automation.moduleLevels.pm-sweep | string | auto |
automation.moduleLevels.pm-optimization | string | suggest |
automation.moduleLevels.call-intake | string | suggest |
automation.moduleLevels.acceptance-run | string | suggest |
automation.rateCaps.smart-scheduling | number | 6 |
automation.rateCaps.dispatch-auto-assign | number | 6 |
automation.guardrails.afterHoursDispatch | boolean | true |
automation.guardrails.sendToCustomer | boolean | true |
automation.quietHoursStart | string | 20:00 |
automation.quietHoursEnd | string | 07:00 |
automation.notifications.inApp | boolean | true |
automation.notifications.textOwner | boolean | true |
automation.notifications.dailyDigest | boolean | false |
automation.syncOwnership.customerContact | string | thermal |
automation.syncOwnership.address | string | thermal |
automation.syncOwnership.invoiceLineItems | string | thermal |
automation.syncOwnership.payments | string | quickbooks |
automation.syncOwnership.taxRates | string | quickbooks |
automation.syncOwnership.chartOfAccounts | string | quickbooks |
automation.rejectionBand.warnAbovePercent | number | 20 |
automation.rejectionBand.windowDays | number | 14 |
business.addressLine1 | string | (empty string) |
business.addressLine2 | string | (empty string) |
business.city | string | (empty string) |
business.state | string | (empty string) |
business.postalCode | string | (empty string) |
business.country | string | US |
business.hoursStart | number | 7 |
business.hoursEnd | number | 19 |
invoicing.taxProvider | string | manual |
invoicing.taxRateBps | number | 0 |
invoicing.paymentTermsDays | number | 30 |
invoicing.invoicePrefix | string | INV |
invoicing.estimatePrefix | string | P |
invoicing.workOrderPrefix | string | WO |
invoicing.poPrefix | string | PO |
invoicing.defaultNotes | string | (empty string) |
invoicing.billingEngineProvider | string | platform_default |
invoicing.prebillPolicy | string | optional |
invoicing.prebillThresholdCents | number | 0 |
invoicing.coiEnforcement | string | warn |
invoicing.coiWarnWindowDays | number | 30 |
proposals.financingAprBps | number | 990 |
proposals.financingTermMonths | number | 60 |
proposals.defaultValidityDays | number | 30 |
proposals.requireInternalApprovalBeforeSend | boolean | false |
customerImport.rawUploadRetentionDays | number | 14 |
notifications.enabled | boolean | false |
notifications.appointmentReminder | boolean | false |
notifications.enRoute | boolean | false |
notifications.jobAssigned | boolean | false |
notifications.invoiceSent | boolean | false |
notifications.invoiceReminder | boolean | false |
notifications.proposalReminder | boolean | false |
notifications.proposalSent | boolean | false |
notifications.inspectionSent | boolean | false |
notifications.agreementRenewalReminder | boolean | false |
webhooks.enabled | boolean | false |
nte.warnThresholdPct | number | 80 |
nte.enforcement | string | warn |
payroll.cadence | string | biweekly |
payroll.anchorDate | string | 2026-01-02 |
timeValidation.minWeeklyHours | number | 40 |
timeValidation.maxDailyHours | number | 16 |
timeValidation.lateEntryThresholdDays | number | 3 |
timeValidation.requireAttributionForChargeable | boolean | true |
timeValidation.requireWorkLocationMultiBranch | boolean | false |
overtime.mode | string | weekly40 |
overtime.weeklyThresholdHours | number | 40 |
overtime.dailyThresholdHours | number | 8 |
overtime.dtThresholdHours | number | 12 |
overtime.workWeekStartDay | number | 1 |
overtime.travelCountsTowardBase | boolean | false |
inventory.costingMethod | string | manual_only |
priceBook.marginFloorPct | number | 35 |
priceBook.roundingStrategy | string | exact |
priceBook.memberTierDeltaPct | number | -10 |
priceBook.commercialTierDeltaPct | number | -15 |
compliance.credentialExpiryThresholdDays | number | 30 |
compliance.inspectionCredentialPolicy | string | block |
frosty.enabled | boolean | false |
apMatching.toleranceCents | number | 2500 |
apMatching.toleranceBps | number | 200 |
deposits.enabled | boolean | false |
deposits.basis | string | none |
deposits.percentBps | number | 2000 |
deposits.fixedAmountCents | number | 0 |
deposits.treatment | string | appliedToFinalInvoice |
calloutFee.enabled | boolean | false |
calloutFee.amountCents | number | 0 |
calloutFee.covers | string | driveTimePlusFirstHour |
calloutFee.firstHourMinimum | boolean | true |
rentalMovementBilling.transportChargeCents | number | 0 |
rentalMovementBilling.installLaborChargeCents | number | 0 |
rentalMovementBilling.deinstallLaborChargeCents | number | 0 |
rentals.defaultYardBranchId | null | null |
billableTime.roundingMode | string | exact |
billableTime.laborPricebookItemId | null | null |
warranty.reportingEnabled | boolean | false |
warranty.secureAttachmentsEnabled | boolean | false |
warranty.attachmentRetentionDays | number | 365 |
agreements.renewalHorizonDays | number | 30 |
agreements.expiryGraceDays | number | 0 |
agreements.defaultRenewalEscalationBps | number | 500 |
jobCosting.reportsEnabled | boolean | false |
jobCosting.captureEnabled | boolean | false |
jobCosting.compensationEnabled | boolean | false |
jobCosting.backfillCompletedAt | null | null |
jobCosting.backfillCount | null | null |
agentSpend.monthlyCeilingUsd | number | 50 |
prevailingWage.enabled | boolean | false |
Optional modules (capabilities)
Every module is included for every shop. A new shop starts with each one in the state below and can switch it on from Settings → Capabilities.
| Module | Default |
|---|---|
| Rentals & Leasing | Off |
| Capital Planning | Off |
| Marketing | Off |
| Customer portal | Off |
| Vendor portal | Off |
| HVAC pack | Off |
| Fire & Life Safety pack | Off |
| Commercial Plumbing pack | Off |
| Commercial Electrical pack | Off |
| Accounting sync | Off |