# Cost API

> Read buildx.pro's cost calculators, line-item breakdowns, quality tiers and regional price factors as JSON.

Source: https://docs.buildx.pro/docs/agents/cost-api/

buildx.pro's cost calculators are backed by public JSON endpoints. They're the same numbers the [calculators](https://docs.buildx.pro/docs/calculators/how-they-work.md) and Ask BuildX use. They're read-only, need no key, and are meant for server-side calls. They don't send CORS headers, so a web page on another site can't call them from the browser.

Base URL: `https://buildx.pro`

## Find the right calculator

`GET /api/search?query=<text>&type=services&limit=<1-50>`

```bash
curl 'https://buildx.pro/api/search?query=laminate%20flooring&type=services&limit=2'
```

```json
{
  "results": [
    { "type": "calculator", "title": "Laminate Flooring", "slug": "laminate-flooring", "href": "/costs/laminate-flooring", "category": "materials" },
    { "type": "calculator", "title": "Install Laminate Flooring", "slug": "install-laminate-flooring", "href": "/costs/install-laminate-flooring", "category": "service" }
  ]
}
```

`query` needs 2 to 100 characters. `type` is `all`, `services` or `contractors`. The `slug` is what the other endpoints take. The calculator page for a slug is `https://buildx.pro/costs/<slug>`.

## Price a job

`GET /api/chat/cards?slug=<slug>&zip=<5-digit ZIP>`

```bash
curl 'https://buildx.pro/api/chat/cards?slug=install-laminate-flooring&zip=78704'
```

Response, abridged:

```json
{
  "costBreakdown": {
    "service_name": "Install Laminate Flooring",
    "quantity": 200,
    "unit_label": "sq ft",
    "total_low": 728.08,
    "total_high": 2184.24,
    "labor_pct": 43,
    "regional_adjusted": true,
    "components": [
      { "name": "Materials", "category": "material", "low": 300.16, "high": 900.48 },
      { "name": "Labor", "category": "labor", "low": 315.36, "high": 946.08 },
      { "name": "Supplies & Other", "low": 75.04, "high": 225.12 },
      { "name": "Equipment & Disposal", "low": 37.52, "high": 112.56 }
    ]
  },
  "qualityTiers": {
    "economy":  { "low": 3.09, "high": 9.28,  "description": "…builder-grade materials and basic finishes." },
    "standard": { "low": 3.64, "high": 10.92, "description": "…" },
    "premium":  { "low": 4.55, "high": 13.65, "description": "…" }
  },
  "contractors": []
}
```

- `costBreakdown` is priced for the calculator's default quantity (here 200 sq ft) at the standard tier, adjusted for the ZIP. To price another quantity, scale by quantity. Better still, send the user to the calculator with the job filled in: `https://buildx.pro/costs/install-laminate-flooring?qty=350&zip=78704&tier=premium` (`tier` is `basic`, `standard` or `premium`).
- `qualityTiers` are prices **per unit** (here per sq ft). On the calculator page the same tiers are called Basic, Standard and Premium.
- `contractors` lists contractors for the trade near the ZIP when it can find them; it's often empty. Use the [MCP server](https://docs.buildx.pro/docs/agents/mcp-server.md) to search contractors.
- Limit: 100 requests a minute per IP.

## Regional price factors

`GET /api/regional-multiplier?zip=<ZIP>`

```bash
curl 'https://buildx.pro/api/regional-multiplier?zip=78704'
```

```json
{ "matched": true, "multiplier": 0.907, "material_factor": 0.938, "labor_factor": 0.876, "zip_prefix": "787", "city_name": "Austin", "state_code": "TX" }
```

Factors are per 3-digit ZIP prefix. Labor lines are multiplied by `labor_factor` and material, supply and equipment lines by `material_factor`. When the prefix isn't covered, `matched` is `false` and every factor is `1.0` (national pricing). Sources and coverage: [Regional pricing reference](https://docs.buildx.pro/docs/calculators/regional-pricing-reference.md). Limit: 20 requests a minute per IP.

## List calculators

`GET /api/services?category=<category>`

Returns every calculator, optionally filtered by browse category (for example `flooring`, `roofing`, `plumbing`). Each item has `slug`, `name`, `unitLabel` and the per-unit base range `basePriceLow` / `basePriceHigh` before tier and region. Limit: 20 requests a minute per IP.

## Errors and limits

- Invalid input returns `400` with an `error` message, for example `Invalid ZIP code. Must be 3-10 digits.`
- Over a limit returns `429` with `Retry-After` in seconds.
- There's no API key, no versioned path and no SLA. Field names can change. Cache results, and link users to the calculator page so they see the live number.

## Don't use these for quote requests

buildx.pro also has endpoints behind its forms, like quote requests and the chat. They aren't an API for agents. A quote request emails real contractors. To help a user get quotes, send them to the calculator's **Get Free Quotes** form or the **Request Quotes** button in [Ask BuildX](https://docs.buildx.pro/docs/owners/ask-buildx.md), or use `submit_lead` on the [MCP server](https://docs.buildx.pro/docs/agents/mcp-server.md) with the user's go-ahead.

## Related

- [How cost calculators work](https://docs.buildx.pro/docs/calculators/how-they-work.md)
- [Recipes](https://docs.buildx.pro/docs/agents/recipes.md)
