provenance block that tells you exactly how trustworthy the record is. This is the right endpoint for building product pickers, populating quote-line dropdowns, and syncing your local product database.
Endpoint
Authentication
Requires a validx-api-key header. The endpoint resolves the appropriate dataset key based on your trade and category filters, then checks your organization’s entitlement. A 403 is returned if your key lacks access to the resolved dataset.
Query Parameters
Filter by trade vertical. One of:
solar, hvac, roofing, plumbing, electrical. Omit to browse across all trades your key is entitled to.Filter by equipment category. One of:
module, inverter, roofing, hvac, product. When a category is specified, the response includes a richer, category-specific specs object (see Category Specs below).| Category | Trade | Description |
|---|---|---|
module | solar | Solar PV modules with STC/PTC ratings, dimensions, and cell data |
inverter | solar | Solar inverters with pricing adjustments and default flags |
roofing | roofing | Roofing materials with warranty, fire class, and exposure specs |
hvac | hvac | HVAC systems with SEER2/EER2/HSPF2 ratings and AHRI certification |
product | any | Generic hardware and products without a category-specific spec table |
Case-insensitive substring filter on the manufacturer name. For example,
manufacturer=Goodman matches "Goodman Manufacturing" and "Goodman/Daikin".Case-insensitive substring filter on the SKU or model number. For example,
sku=GSX140 matches "Goodman GSX14024" and "GSX14036".Page number to retrieve, 1-indexed. Default
1.Number of records per page. Minimum
1, maximum 100, default 25. Results are ordered by manufacturer ascending, then sku ascending.Request Examples
TypeScript example
Response
Equipment Record Fields
Stable UUID for this equipment record. Use this to reference the record in quote line items and downstream systems.
The trade vertical:
solar, hvac, roofing, plumbing, or electrical.The equipment category:
module, inverter, roofing, hvac, or product.The manufacturer or brand name.
The manufacturer model number or SKU.
The catalog base cost in USD. This is the platform’s internal cost basis and may differ from observed market prices. Use
pricing.estimated_base_cost for quote calculations when available.true when the product has been discontinued or removed from active quoting. Archived records are excluded by default unless include_archived=true is passed. Archived records always have provenance.quote_safe: false.Embedded pricing intelligence derived from market price observations.
null when no pricing data has been collected for this record.Category-specific technical specifications. The shape of this object varies by
category — see Category-Specific Specs below. An empty object {} is returned for product category records or when no spec record exists.Data lineage and trust metadata for this record.
The quote_safe Flag on Equipment Records
For equipment catalog records,
quote_safe is derived directly from is_archived. Any active, non-archived record is quote_safe: true. If you need to enforce this in your UI without calling provenance.quote_safe, check is_archived === false.quote_safe as a filter parameter — the default behavior (excluding archived records) already ensures all returned records are quote-ready. If you are building a product management tool that needs to display discontinued items, pass include_archived=true and handle the is_archived flag in your UI.
Category-Specific Specs
When you filter bycategory, the specs object on each record contains the full set of fields for that category. Without a category filter, a summarized subset is returned.
module
rating_stc, rating_ptc, efficiency, voc, isc, vmp, imp, length_mm, width_mm, weight_kg, product_warranty_years, frame_color, backsheet_color, cell_quantity, temp_coeff_pmax, pan_file_urlinverter
external_id, labor_adjustment, price_adjustment, price_adjustment_per_watt, is_default, price_adjustment_per_panelroofing
material_type, warranty_years, wind_rating_mph, fire_class, impact_rating_class, exposure_inches, bundles_per_square, weight_per_square_lbs, algae_resistance_years, citation_urlhvac
seer2_rating, eer2_rating, hspf2_rating, tonnage, refrigerant_type, cooling_capacity_btu_h, compressor_staging, cold_climate, ahri_reference_number, energy_star_model_identifier, date_certified, source_url (full list includes heating capacities at 47°F/17°F/5°F, COP, and all AHRI certification fields)Errors
| Status | Message | Cause |
|---|---|---|
400 | Unsupported category "…". Use module, inverter, roofing, hvac, or product. | category value not in the allowed set |
400 | Unsupported trade "…". Use solar, roofing, hvac, plumbing, or electrical. | trade value not in the allowed set |
403 | Dataset access required: … requires production access. | Key lacks entitlement for the resolved dataset |
401 | Missing x-api-key header. | No API key provided |
500 | Internal server error. | Unexpected database error — retry with backoff |
Related Endpoints
- Search — Find equipment by name or SKU without knowing the category upfront, alongside results from other dataset types.
- Quote Context (
/api/v1/quote-context) — Returns a pre-assembled, quote-ready bundle that includes recommended equipment options, finance programs, incentives, and utility rates for a specific address and trade. Use this instead of the catalog endpoint when building a quote flow that needs fully contextualized data. - Hardware Inverters (
/api/v1/hardware/inverters) — A legacy endpoint that returns solar inverter records in the originalInverterRecordshape. New integrations should prefer the catalog endpoint withcategory=inverter.