Odoo 19.0 Community · Persistent

product.template: fields, relations and API

The product.template model ("Product") is a persistent model declared by the Products & Pricelists module, then extended by 41 other modules. It exposes 205 fields, 156 of them declared directly on the model; 33 fields from other models point to it. Below you will find every field with its technical name, type, label and relations, followed by an Odoo 19 JSON-2 API call.

Model identity

Technical name
product.template
Label
Product
Type
Persistent (models.Model)
SQL table
product_template
Origin module
Products & Pricelists (product)
Extended by
account, sale, stock, stock_account, sale_stock, stock_delivery, event_product, event_sale, event_booth_sale, hr_expense, point_of_sale, loyalty, mrp, mrp_account, purchase, purchase_stock, stock_landed_costs, product_expiry, repair, sale_purchase, partnership, pos_discount, pos_sale, pos_loyalty, pos_self_order, product_email_template, product_matrix, sale_project, sale_expense, sale_gelato, sale_product_matrix, sale_timesheet, website_sale, website_sale_slides, website_event_booth_sale, website_event_sale, website_sale_stock, website_sale_collect, website_sale_wishlist, website_sale_gelato, website_sale_stock_wishlist
Default order (_order)
is_favorite desc, name
Inherits from (mixins)
mail.threadmail.activity.mixinimage.mixinpos.load.mixinrating.mixinwebsite.seo.metadatawebsite.published.multi.mixinwebsite.searchable.mixin

Model fields

156 own fields, 43 inherited from mixins and 6 automatic ORM fields. Click a name to get a direct link to that field.

205 of 205 fields shown

Technical nameLabelTypeDetails
accessory_product_idsAccessory Products

Accessories show up when the customer reviews the cart before payment (cross-sell strategy).

many2many

added by eCommerce (website_sale)

account_tag_idsAccount Tags

Tags to be set on the base and tax journal items created for this product.

many2many

added by Invoicing (account)

activeActive

If unchecked, it will allow you to hide the product without removing it.

boolean
alert_timeAlert Date

Number of days before the Expiration Date after which an alert should be raised on the lot/serial number. It will be computed on the lot/serial number.

integer

added by Products Expiration Date (product_expiry)

allow_out_of_stock_orderSell when Out-of-Stockboolean

added by Product Availability (website_sale_stock)

alternative_product_idsAlternative Products

Suggest alternatives to your customer (upsell strategy). Those products show up on the product page.

many2many

added by eCommerce (website_sale)

attribute_line_idsProduct Attributesone2many

inverse: product_tmpl_id

available_in_posAvailable in POS

Check if you want this product to appear in the Point of Sale.

boolean

added by Point of Sale (point_of_sale)

available_thresholdShow Thresholdfloat

added by Product Availability (website_sale_stock)

barcodeBarcodechar
computed
base_unit_countBase Unit Count

Display base unit price on your eCommerce pages. Set to 0 to hide it for this product.

float
requiredcomputed, stored

added by eCommerce (website_sale)

base_unit_idCustom Unit of Measure

Define a custom unit to display in the price per unit of measure field.

many2one
computed, stored

added by eCommerce (website_sale)

base_unit_nameBase Unit Name

Displays the custom unit for the products if defined or the selected unit of measure otherwise.

char
computed

added by eCommerce (website_sale)

base_unit_pricePrice Per Unitmonetary
computed

added by eCommerce (website_sale)

bom_count# Bill of Materialinteger
computed

added by Manufacturing (mrp)

bom_idsBill of Materialsone2many

inverse: product_tmpl_id

added by Manufacturing (mrp)

bom_line_idsBoM Componentsone2many

inverse: product_tmpl_id

added by Manufacturing (mrp)

can_be_expensedExpenses

Specify whether the product can be selected in an expense.

boolean
computed, stored

added by Expenses (hr_expense)

can_image_1024_be_zoomedCan Image 1024 be zoomedboolean
computed, stored
categ_idProduct Categorymany2one
colorColor Indexinteger
computed, stored
combo_idsCombo Choicesmany2many
company_idCompanymany2one
compare_list_priceCompare to Price

Add a strikethrough price to your /shop and product pages for comparison purposes.It will not be displayed if pricelists apply.

monetary

added by eCommerce (website_sale)

cost_currency_idCost Currencymany2one
computed
cost_methodCost Methodselection
computed

Values: standard (Standard Price), fifo (First In First Out (FIFO)), average (Average Cost (AVCO))

added by WMS Accounting (stock_account)

country_of_originOrigin of Goods

Rules of origin determine where goods originate, i.e. not where they have been shipped from, but where they have been produced or manufactured. As such, the ‘origin’ is the 'economic nationality' of goods traded in commerce.

many2one

added by Delivery - Stock (stock_delivery)

currency_idCurrencymany2one
computed
default_codeInternal Referencechar
computed, stored
descriptionDescriptionhtml
translatable
description_ecommerceeCommerce Descriptionhtml

added by eCommerce (website_sale)

description_pickingDescription on Pickingtext
translatable

added by Inventory (stock)

description_pickinginDescription on Receptionstext
translatable

added by Inventory (stock)

description_pickingoutDescription on Delivery Orderstext
translatable

added by Inventory (stock)

description_purchasePurchase Descriptiontext
translatable
description_saleSales Description

A description of the Product that you want to communicate to your customers. This description will be copied to every Sales Order, Delivery Order and Customer Invoice/Credit Note

text
translatable
email_template_idProduct Email Template

When validating an invoice, an email will be sent to the customer based on this template. The customer will receive an email for each product linked to an email template.

many2one

added by Product Email Template (product_email_template)

expense_policyRe-Invoice Costs

Validated expenses, vendor bills, or stock pickings (set up to track costs) can be invoiced to the customer at either cost or sales price.

selection
computed, stored

Values: no (No), cost (At cost), sales_price (Sales price)

added by Sales (sale)

expense_policy_tooltipExpense Policy Tooltipchar
computed

added by Sales Expense (sale_expense)

expiration_timeExpiration Date

Number of days after the receipt of the products (from the vendor or in stock after production) after which the goods may become dangerous and must not be consumed. It will be computed on the lot/serial number.

integer

added by Products Expiration Date (product_expiry)

fiscal_country_codesFiscal Country Codeschar
computed

added by Invoicing (account)

gelato_image_idsGelato Print Imagesone2many
read-only

inverse: res_id

added by Gelato (sale_gelato)

gelato_missing_imagesMissing Print Imagesboolean
computed

added by Gelato (sale_gelato)

gelato_product_uidGelato Product UIDchar
read-onlycomputed

added by Gelato (sale_gelato)

gelato_template_refGelato Template Reference

Synchronize to fetch variants from Gelato

char

added by Gelato (sale_gelato)

grade_idAssigned Levelmany2one

added by Partnership / Membership (partnership)

has_available_route_idsRoutes can be selected on this productboolean
computed

added by Inventory (stock)

has_configurable_attributesIs a configurable productboolean
computed, stored
hs_codeHS Code

Standardized code for international shipping and goods declaration.

char

added by Delivery - Stock (stock_delivery)

import_attribute_valuesProduct Valueschar
computed
incoming_qtyIncomingfloat
computed

added by Inventory (stock)

invoice_policyInvoicing Policy

Ordered Quantity: Invoice quantities ordered by the customer. Delivered Quantity: Invoice quantities delivered to the customer.

selection
computed, stored

Values: order (Ordered quantities), delivery (Delivered quantities)

added by Sales (sale)

is_dynamically_createdIs Dynamically Createdboolean
computed
is_favoriteFavoriteboolean
is_kitsIs Kitsboolean
computed

added by Manufacturing (mrp)

is_product_variantIs a product variantboolean
computed
is_storableTrack Inventory

A storable product is a product for which you manage stock.

boolean
computed, stored

added by Inventory (stock)

landed_cost_okIs a Landed Cost

Indicates whether the product is a landed cost: when receiving a vendor bill, you can allocate this cost on preceding receipts.

boolean

added by WMS Landed Costs (stock_landed_costs)

list_priceSales Price

Price at which the product is sold to customers.

float
location_idLocationmany2one

added by Inventory (stock)

lot_sequence_idSerial/Lot Numbers Sequence

Technical Field: The Ir.Sequence record that is used to generate serial/lot numbers for this product

many2one

added by Inventory (stock)

lot_valuatedValuation by Lot/Serial

If checked, the valuation will be specific by Lot/Serial number.

boolean
computed, stored

added by WMS Accounting (stock_account)

mrp_product_qtyManufacturedfloat
computed

added by Manufacturing (mrp)

nameNamechar
requiredtranslatable
nbr_moves_inNbr Moves In

Number of incoming stock moves in the past 12 months

integer
computed

added by Inventory (stock)

nbr_moves_outNbr Moves Out

Number of outgoing stock moves in the past 12 months

integer
computed

added by Inventory (stock)

nbr_reordering_rulesReordering Rulesinteger
computed

added by Inventory (stock)

next_serialNext Serialchar
computed

added by Inventory (stock)

optional_product_idsOptional Products

Optional Products are suggested whenever the customer hits *Add to Cart* (cross-sell strategy, e.g. for computers: warranty, software, etc.).

many2many

added by Sales (sale)

out_of_stock_messageOut-of-Stock Messagehtml

added by Product Availability (website_sale_stock)

outgoing_qtyOutgoingfloat
computed

added by Inventory (stock)

pos_categ_idsPoint of Sale Category

Category used in the Point of Sale.

many2many

added by Point of Sale (point_of_sale)

pos_optional_product_idsPOS Optional Products

Optional products are suggested when customers add items to their cart (e.g., adding a burger suggests cold drinks or fries).

many2many

added by Point of Sale (point_of_sale)

pos_sequencePOS Sequence

Determine the display order in the POS Terminal

integer

added by Point of Sale (point_of_sale)

pricelist_rule_idsPricelist Rulesone2many

inverse: product_tmpl_id

product_add_modeAdd product mode

Configurator: choose attribute values to add the matching product variant to the order. Grid: add several variants at once from the grid of attribute values

selection

Values: configurator (Product Configurator), matrix (Order Grid Entry)

added by Sale Matrix (sale_product_matrix)

product_document_countDocuments Countinteger
computed
product_document_idsDocumentsone2many

inverse: res_id

product_propertiesPropertiesproperties
product_tag_idsTagsmany2many
product_template_image_idsExtra Product Mediaone2many

inverse: product_tmpl_id

added by eCommerce (website_sale)

product_tooltipProduct Tooltipchar
computed
product_variant_count# Product Variantsinteger
computed
product_variant_idProductmany2one
computed
product_variant_idsProductsone2many
required

inverse: product_tmpl_id

project_idProjectmany2one
company-dependent

added by Sales - Project (sale_project)

project_template_idProject Templatemany2one
company-dependent

added by Sales - Project (sale_project)

property_account_expense_idExpense Account

Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used.

many2one
company-dependent

added by Invoicing (account)

property_account_income_idIncome Account

Keep this field empty to use the default value from the product category.

many2one
company-dependent

added by Invoicing (account)

property_price_difference_account_idPrice Difference Account

With perpetual valuation, this account will hold the price difference between the standard price and the bill price.

many2one
company-dependent

added by WMS Accounting (stock_account)

property_stock_inventoryInventory Location

This stock location will be used, instead of the default one, as the source location for stock moves generated when you do an inventory.

many2one
company-dependent

added by Inventory (stock)

property_stock_productionProduction Location

This stock location will be used, instead of the default one, as the source location for stock moves generated by manufacturing orders.

many2one
company-dependent

added by Inventory (stock)

public_categ_idsWebsite Product Category

The product will be available in each mentioned eCommerce category. Go to Shop > Edit Click on the page and enable 'Categories' to view all eCommerce categories.

many2many

added by eCommerce (website_sale)

public_descriptionProduct Descriptionhtml
translatable

added by Point of Sale (point_of_sale)

publish_datePublish Datedatetime
requiredcomputed, stored

added by eCommerce (website_sale)

purchase_line_warn_msgMessage for Purchase Order Linetext

added by Purchase (purchase)

purchase_methodControl Policy

On ordered quantities: Control bills based on ordered quantities. On received quantities: Control bills based on received quantities.

selection
computed, stored

Values: purchase (On ordered quantities), receive (On received quantities)

added by Purchase (purchase)

purchase_okPurchaseboolean
computed, stored
purchased_product_qtyPurchasedfloat
computed

added by Purchase (purchase)

qty_availableQuantity On Handfloat
computed

added by Inventory (stock)

removal_timeRemoval Date

Number of days before the Expiration Date after which the goods should be removed from the stock and not be counted in the Fresh On Hand Stock anymore.It will be computed on the lot/serial number.

integer

added by Products Expiration Date (product_expiry)

reordering_max_qtyReordering Max Qtyfloat
computed

added by Inventory (stock)

reordering_min_qtyReordering Min Qtyfloat
computed

added by Inventory (stock)

responsible_idResponsible

This user will be responsible of the next activities related to logistic operations for this product.

many2one
company-dependent

added by Inventory (stock)

route_from_categ_idsCategory Routesmany2many

related: categ_id.total_route_ids

added by Inventory (stock)

route_idsRoutes

Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, replenished on order, etc.

many2many

added by Inventory (stock)

sale_delayCustomer Lead Time

Delivery lead time, in days. It's the number of days, promised to the customer, between the confirmation of the sales order and the delivery.

integer

added by Inventory (stock)

sale_line_warn_msgSales Order Line Warningtext

added by Sales (sale)

sale_okSalesboolean
sales_countSoldfloat
computed

added by Sales (sale)

self_order_availableAvailable in Self Order

If this product is available in the Self Order screens

boolean

added by POS Self Order (pos_self_order)

self_order_visibleSelf Order Visibleboolean
computed

added by POS Self Order (pos_self_order)

seller_idsVendorsone2many

inverse: product_tmpl_id

sequenceSequence

Gives the sequence order when displaying a product list

integer
serial_prefix_formatCustom Lot/Serialchar
computed

added by Inventory (stock)

service_policyService Invoicing Policyselection
computed

Values computed at runtime

added by Sales - Project (sale_project)

service_to_purchaseSubcontract Service

If ticked, each time you sell this product through a SO, a RfQ is automatically created to buy the product. Tip: don't forget to set a vendor on the product.

boolean
company-dependent

added by Sale Purchase (sale_purchase)

service_trackingCreate on Orderselection
requiredcomputed, stored

Values: no (Nothing)

service_typeTrack Service

Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic account. Timesheets on contract: Invoice based on the tracked hours on the related timesheet. Create a task and track hours: Create a task on the sales order validation and track the work hours.

selection
computed, stored

Values: manual (Manually set quantities on order)

added by Sales (sale)

service_upsell_thresholdThreshold

Percentage of time delivered compared to the prepaid amount that must be reached for the upselling opportunity activity to be triggered.

float

added by Sales Timesheet (sale_timesheet)

service_upsell_threshold_ratioService Upsell Threshold Ratiochar
computed

added by Sales Timesheet (sale_timesheet)

show_availabilityShow availability Qtyboolean

added by Product Availability (website_sale_stock)

show_forecasted_qty_status_buttonShow Forecasted Qty Status Buttonboolean
computed

added by Inventory (stock)

show_on_hand_qty_status_buttonShow On Hand Qty Status Buttonboolean
computed

added by Inventory (stock)

show_qty_update_buttonShow Qty Update Buttonboolean
computed

added by Inventory (stock)

split_method_landed_costDefault Split Method

Default Split Method when used for Landed Cost

selection

Values computed at runtime

added by WMS Landed Costs (stock_landed_costs)

standard_priceCost

Value of the product (automatically computed in AVCO). Used to value the product when the purchase cost is not known (e.g. inventory adjustment). Used to compute margins on sale orders.

float
computed
supplier_taxes_idPurchase Taxes

Default taxes used when buying the product

many2many

added by Invoicing (account)

task_template_idTask Templatemany2one
computed, storedcompany-dependent

added by Sales - Project (sale_project)

tax_stringTax Stringchar
computed

added by Invoicing (account)

taxes_idSales Taxes

Default taxes used when selling the product

many2many

added by Invoicing (account)

to_weightTo Weigh With Scale

Check if the product should be weighted using the hardware scale integration.

boolean

added by Point of Sale (point_of_sale)

trackingTracking

Ensure the traceability of a storable product in your warehouse.

selection
requiredcomputed, stored

Values: serial (By Unique Serial Number), lot (By Lots), none (By Quantity)

added by Inventory (stock)

typeProduct Type

Goods are tangible materials and merchandise you provide. A service is a non-material product you provide.

selection
required

Values: consu (Goods), service (Service), combo (Combo)

uom_idUnit

Default unit of measure used for all stock operations.

many2one
required
uom_idsPackagings

Additional packagings for this product which can be used for sales

many2many
uom_nameUnit Namechar
read-only

related: uom_id.name

use_expiration_dateUse Expiration Date

When this box is ticked, you have the possibility to specify dates to manage product expiration, on the product and on the corresponding lot/serial numbers

boolean

added by Products Expiration Date (product_expiry)

use_timeBest Before Date

Number of days before the Expiration Date after which the goods starts deteriorating, without being dangerous yet. It will be computed on the lot/serial number.

integer

added by Products Expiration Date (product_expiry)

used_in_bom_count# of BoM Where is Usedinteger
computed

added by Manufacturing (mrp)

valid_product_template_attribute_line_idsValid Product Attribute Linesmany2many
computed
valuationValuationselection
computed

Values: periodic (Periodic (at closing)), real_time (Perpetual (at invoicing))

added by WMS Accounting (stock_account)

variant_seller_idsVariant Sellerone2many

inverse: product_tmpl_id

variants_default_codeVariants Default Code

Technical field to enhance performance when looking up default code of productvariants (LIKE/ILIKE)

char
computed, stored

added by eCommerce (website_sale)

virtual_availableForecasted Quantityfloat
computed

added by Inventory (stock)

visible_expense_policyRe-Invoice Policy visibleboolean
computed

added by Sales (sale)

volumeVolumefloat
computed, stored
volume_uom_nameVolume unit of measure labelchar
computed
warehouse_idWarehousemany2one

added by Inventory (stock)

website_descriptionDescription for the websitehtml

added by eCommerce (website_sale)

website_ribbon_idRibbonmany2one

added by eCommerce (website_sale)

website_sequenceWebsite Sequence

Determine the display order in the Website E-commerce

integer

added by eCommerce (website_sale)

website_size_xSize Xinteger

added by eCommerce (website_sale)

website_size_ySize Yinteger

added by eCommerce (website_sale)

weightWeightfloat
computed, stored
weight_uom_nameWeight unit of measure labelchar
computed
activity_calendar_event_idNext Activity Calendar Eventmany2one
computed

inherited from mail.activity.mixin

activity_date_deadlineNext Activity Deadlinedate
read-onlycomputed

inherited from mail.activity.mixin

activity_exception_decorationActivity Exception Decoration

Type of the exception activity on record.

selection
computed

Values: warning (Alert), danger (Error)

inherited from mail.activity.mixin

activity_exception_iconIcon

Icon to indicate an exception activity.

char
computed

inherited from mail.activity.mixin

activity_idsActivitiesone2many

inverse: res_id

inherited from mail.activity.mixin

activity_stateActivity State

Status based on activities Overdue: Due date is already passed Today: Activity date is today Planned: Future activities.

selection
computed

Values: overdue (Overdue), today (Today), planned (Planned)

inherited from mail.activity.mixin

activity_summaryNext Activity Summarychar

related: activity_ids.summary

inherited from mail.activity.mixin

activity_type_iconActivity Type Iconchar

related: activity_ids.icon

inherited from mail.activity.mixin

activity_type_idNext Activity Typemany2one

related: activity_ids.activity_type_id

inherited from mail.activity.mixin

activity_user_idResponsible Usermany2one
read-onlycomputed

inherited from mail.activity.mixin

has_messageHas Messageboolean
computed

inherited from mail.thread

image_1024Image 1024image

related: image_1920

inherited from image.mixin

image_128Image 128image

related: image_1920

inherited from image.mixin

image_1920Imageimage

inherited from image.mixin

image_256Image 256image

related: image_1920

inherited from image.mixin

image_512Image 512image

related: image_1920

inherited from image.mixin

is_seo_optimizedSEO optimizedboolean
computed, stored

inherited from website.seo.metadata

message_attachment_countAttachment Countinteger
computed

inherited from mail.thread

message_follower_idsFollowersone2many

inverse: res_id

inherited from mail.thread

message_has_errorMessage Delivery error

If checked, some messages have a delivery error.

boolean
computed

inherited from mail.thread

message_has_error_counterNumber of errors

Number of messages with delivery error

integer
computed

inherited from mail.thread

message_has_sms_errorSMS Delivery error

If checked, some messages have a delivery error.

boolean
computed

inherited from mail.thread

message_idsMessagesone2many

inverse: res_id

inherited from mail.thread

message_is_followerIs Followerboolean
computed

inherited from mail.thread

message_needactionAction Needed

If checked, new messages require your attention.

boolean
computed

inherited from mail.thread

message_needaction_counterNumber of Actions

Number of messages requiring action

integer
computed

inherited from mail.thread

message_partner_idsFollowers (Partners)many2many
computed

inherited from mail.thread

my_activity_date_deadlineMy Activity Deadlinedate
read-onlycomputed

inherited from mail.activity.mixin

rating_avgAverage Ratingfloat
computed

inherited from rating.mixin

rating_avg_textRating Avg Textselection
computed

Values: top (Happy), ok (Neutral), ko (Unhappy), none (Not Rated yet)

inherited from rating.mixin

rating_countRating countinteger
computed

inherited from rating.mixin

rating_idsRatingsone2many

inverse: res_id

inherited from mail.thread

rating_last_feedbackRating Last Feedbacktext

related: rating_ids.feedback

inherited from rating.mixin

rating_last_imageRating Last Imagebinary

related: rating_ids.rating_image

inherited from rating.mixin

rating_last_textRating Textselection

related: rating_ids.rating_text

inherited from rating.mixin

rating_last_valueRating Last Valuefloat
computed, stored

inherited from rating.mixin

rating_percentage_satisfactionRating Satisfactionfloat
computed

inherited from rating.mixin

seo_nameSeo namechar
translatable

inherited from website.seo.metadata

website_message_idsWebsite Messages

Website communication history

one2many

inverse: res_id

inherited from mail.thread

website_meta_descriptionWebsite meta descriptiontext
translatable

inherited from website.seo.metadata

website_meta_keywordsWebsite meta keywordschar
translatable

inherited from website.seo.metadata

website_meta_og_imgWebsite opengraph imagechar

inherited from website.seo.metadata

website_meta_titleWebsite meta titlechar
translatable

inherited from website.seo.metadata

create_dateCreated ondatetime
read-onlyautomatic
create_uidCreated bymany2one
read-onlyautomatic
display_nameDisplay Namechar
read-onlycomputedautomatic
idIDinteger
read-onlyautomatic
write_dateLast Updated ondatetime
read-onlyautomatic
write_uidLast Updated bymany2one
read-onlyautomatic

Relations

Models linked from this model

Fields of other models pointing here

Reading this model through the API

Odoo 19 JSON-2 API call reading the first five records with real fields of the model. Replace the instance, database and API key with your own.

curl
curl -X POST "https://your-instance.odoo.com/json/2/product.template/search_read" \
  -H "Authorization: bearer $ODOO_API_KEY" \
  -H "X-Odoo-Database: your-db" \
  -H "Content-Type: application/json" \
  -d '{"domain":[],"fields":["name","base_unit_count","publish_date","service_tracking","tracking"],"limit":5}'
Python (requests)
import requests

BASE_URL = "https://your-instance.odoo.com/json/2"
headers = {"Authorization": f"bearer {API_KEY}", "X-Odoo-Database": "your-db"}

res = requests.post(
    f"{BASE_URL}/product.template/search_read",
    headers=headers,
    json={"domain": [], "fields": ["name","base_unit_count","publish_date","service_tracking","tracking"], "limit": 5},
)
res.raise_for_status()
print(res.json())
  • External API access requires Odoo's Custom plan.
  • XML-RPC and JSON-RPC will be removed in Odoo 22 (fall 2028): use JSON-2.
  • The access rights and record rules of the key's user apply.

Cite this tool

Writing a tutorial, internal documentation or a forum answer? Copy this link to send your readers to the up-to-date reference.

<a href="https://aidoo.ai/en/outils/explorateur-modeles-odoo/product-template">product.template (Odoo 19.0)</a>

Sources

Data verified on September 23, 2026 · Odoo 19.0 Community

Have an Odoo project, or want to put your ERP to work with AI? Let's talk

Implementation, custom module development, connecting Claude or ChatGPT to your data: tell us about your context and we will reply within 24 business hours.