Local services & SaaS
Buildern
Projects, takeoffs, estimates, schedules, bills and client invoices in Buildern.
21 endpoints
Buildxact's REST API needs a subscription key its team approves, and it has no quote, schedule or daily log operations (checked 14 Nov 2026). Cotlet runs a hosted Buildxact MCP server with 30 tools that ChatGPT and Claude use in your own builder account. Quotes, variations and claims wait for your OK.
30 tools Read and write
Buildxact documents a REST API at developer.buildxact.com. You make an API key in Buildxact and request a subscription key, which Buildxact's team approves. No Buildxact MCP server and no official ChatGPT or Claude connector was found.
| What you need | Buildxact API | By hand | Cotlet |
|---|---|---|---|
| Ask ChatGPT or Claude to do the work | No MCP server found | Copy and paste | Hosted MCP server |
| Send quotes and variations to the client | No quote operation | One screen at a time | After your OK |
| Clients, leads, catalogs, jobs, orders | After key approval | One screen at a time | 30 tools, writes after your OK |
| Schedules, claims, daily logs | Read only or missing | One screen at a time | Read and write |
Checked 14 Nov 2026. Sources: Buildxact API: getting started · Buildxact API: authentication · Buildxact API list · Buildxact Help Center · Help: Create and send a quote · Help: Digital acceptance · Help: Job schedule · Help: Share and publish schedules · Help: Completion Percent invoicing · Help: Contract Price invoicing · Help: Cost Plus invoicing · Help: Variations / change orders · Help: Purchase orders · Help: Work orders · Help: Request for quote · Help: Daily Logs / Site Diary · Help: WIP report · Help: Client portal messages
Once, in a browser we host for you.
One address in its settings.
Price the variation, then approve it.
Your agent works in your own signed-in Cloud Browser. Writes, and anything that reaches a client, trade or supplier, wait for your OK. Who can see your session
Sign in to Buildxact in a Cloud Browser. Open app.buildxact.com in your Cotlet Cloud Browser and log in with your own Buildxact user.
Add the Cotlet address. Enter https://cotlet.dev/mcp/v1 as the MCP server or connector URL in your agent.
Let the agent in. Chat apps open a Cotlet sign-in page. Editors, n8n and scripts send an API key made in the console.
Buildxact uses the shared address https://cotlet.dev/mcp/v1, the same one as every other app you turn on, so a single connector reaches them all. Switched Buildxact on later? Refresh the connector to load the 30 Buildxact tools.
Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: buildxact_read One tool per owner workflow in the Buildxact Help Center, in Buildxact's own words. Many take an `action`: `list` and `get` only read, the other actions write and ask first.
Buildxact's order is Lead, Estimate, Job. The client portal hangs off the lead, so link estimates to it.
Buildxact recommends the order Lead, Estimate, Job, and the client portal hangs off the lead. An estimate links only to a lead for the exact same client, set in the Lead Details area of the estimate. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_leads
REST endpointPOST https://cotlet.dev/api/v1/buildxact/leads/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `link_estimate`. `list` and `get` only read. |
| lead string | string | Lead name, for `get` and `link_estimate`. |
| client string | string | For `create`: an existing client from manage_clients, or the details of a new one. |
| estimate string | string | For `link_estimate`: the estimate to link. |
{
"action": "action"
} {
"lead": "Hill St deck and pergola",
"client": "Example Homeowner",
"estimate": "Hill St deck, base scope",
"linked": true
} An import maps each spreadsheet column to a Buildxact field and shows the rows before they are added. Run `list` first so the same client is not added twice. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_clients
REST endpointPOST https://cotlet.dev/api/v1/buildxact/clients/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `import`. `list` and `get` only read. |
| client string | string | Client name, for `get`. |
| fields object | object | For `create`: name, email, phone and address. |
| file_url string | string | For `import`: a link to a spreadsheet laid out like Buildxact's client template. |
{
"action": "action"
} {
"client": "Example Homeowner",
"email": "homeowner@example.com",
"phone": "+1 555 0100",
"saved": true
} Every contact's group must be Contractors, Employees or Suppliers; Buildxact warns that any other group can break your accounting sync, so the agent checks the groups and shows you the import preview first. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → import_contacts
REST endpointPOST https://cotlet.dev/api/v1/buildxact/contacts
| Name | Type | Description |
|---|---|---|
| file_url string required | string | A link to a spreadsheet laid out like Buildxact's contact template. |
{
"file_url": "https://example.com"
} {
"imported": 3,
"groups": {
"Contractors": 2,
"Suppliers": 1,
"Employees": 0
}
} Copies, templates, Excel imports, markup in percent, scaled plans, price catalogs and recipes or assemblies.
A copy keeps the original as it is, the usual way to make a "Version 2" when a client asks for big changes. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_estimates
REST endpointPOST https://cotlet.dev/api/v1/buildxact/estimates/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `copy`, `from_template`. `list` and `get` only read. |
| estimate string | string | The estimate to read or copy, or the template for `from_template`. |
| name string | string | For `copy` and `from_template`: name, type, customer and source of the new estimate. |
| parts array | array | For `copy` and `from_template`: which parts to bring across. |
{
"action": "action"
} {
"estimate": "Hill St deck, version 2",
"copied_from": "Hill St deck, base scope",
"saved": true
} Templates live under Estimates, Templates, and manage_estimates starts new estimates from them. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_estimate_templates
REST endpointPOST https://cotlet.dev/api/v1/buildxact/estimate-templates/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create`. `list` and `get` only read. |
| name string | string | Template name, for `create`. |
| categories array | array | For a blank template: the Estimate Costings categories to add. |
| file_url string | string | For a template from Excel: a link to a file in Buildxact's estimate layout. |
{
"action": "action"
} {
"template": "Deck, hardwood, standard scope",
"categories": [
"Footings",
"Framing",
"Decking",
"Balustrade"
],
"saved": true
} One column per field, no formulas or images. Buildxact imports one unit cost and one markup per line and no wastage; takeoffs on plans are done afterwards. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → import_estimate_from_excel
REST endpointPOST https://cotlet.dev/api/v1/buildxact/estimate-from-excels
| Name | Type | Description |
|---|---|---|
| file_url string required | string | A .csv, .xls or .xlsx link. Category and Description columns are required. |
| name string required | string | Name of the new estimate. |
{
"file_url": "https://example.com",
"name": "Jane Doe"
} {
"estimate": "Rowe Ave bathroom, imported",
"lines": 46,
"saved": true
} Buildxact takes markup as a percentage only, and markups at different levels add together into the final markup. The agent reads the breakdown back so you see where it comes from. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → set_estimate_markup
REST endpointPUT https://cotlet.dev/api/v1/buildxact/estimate-markup
| Name | Type | Description |
|---|---|---|
| estimate string required | string | Estimate name or number, as list in manage_estimates returns it. |
| level string required | string | One of `item`, `category`, `estimate`. |
| target string | string | The item or category, unless the level is `estimate`. |
| percent number required | number | Markup as a percentage. |
{
"estimate": "estimate",
"level": "level",
"percent": 1
} {
"estimate": "Hill St deck, base scope",
"level": "estimate",
"percent": 20,
"quote_total": 24600,
"saved": true
} Plans go to the Plans & Takeoffs tab and are auto scaled from the scale printed on them unless you say otherwise. The drawing tools and the takeoff assistant stay off until a plan is scaled. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_plans
REST endpointPOST https://cotlet.dev/api/v1/buildxact/plans/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `upload`, `scale`. `list` and `get` only read. |
| estimate string required | string | Estimate name or number, as list in manage_estimates returns it. |
| file_url string | string | For `upload`: a link to the plan file. |
| pages string | string | For `upload`: pages or a range to import. Empty imports every page. |
| scale string | string | For `scale`: a common scale such as 1/4":1, imperial or metric by your region. |
{
"action": "action",
"estimate": "estimate"
} {
"estimate": "Hill St deck, base scope",
"plan": "A101 Deck plan",
"scale": "1/4\":1",
"scaled": true
} Catalog items are what estimates, variations and purchase orders search when you add prices. One column per field, no formulas or images. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_price_catalogs
REST endpointPOST https://cotlet.dev/api/v1/buildxact/price-catalogs/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `import`, `export`. `list` and `get` only read. |
| catalog string | string | Catalog name, for `import` and `export`. |
| file_url string | string | For `import`: a .csv, .tsv, .xls, .xlsx or .xml link. PDFs are not accepted. |
{
"action": "action"
} {
"catalog": "Example Timber Supply 2026",
"items": 212,
"imported": true
} A recipe or assembly prices one increment, such as a foot of wall or one door. Buildxact also ships ready-made recipes you can adjust. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_assemblies
REST endpointPOST https://cotlet.dev/api/v1/buildxact/assemblies/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`. `list` and `get` only read. |
| name string | string | Recipe name, for example Deck, per square metre. |
| items array | array | For `create`: material and labour items per unit. |
{
"action": "action"
} {
"recipe": "Hardwood deck, per sq ft",
"items": 4,
"unit_cost": 38.5,
"saved": true
} Preparing a quote sends nothing. Sharing it, standard or for digital acceptance, reaches your client.
Prepares the quote and returns the preview, so you can check section order and blank pages before anyone sees it. Nothing is sent: share_quote does that. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → prepare_quote
REST endpointPOST https://cotlet.dev/api/v1/buildxact/quote/prepare
| Name | Type | Description |
|---|---|---|
| estimate string required | string | Estimate name or number, as list in manage_estimates returns it. |
| sections array | array | Sections to include: cover page, letter, quote items, specifications, allowances, other estimate details. |
| items_view string | string | For quote items: one of `all_items`, `categories_only`, plus whether to show quantities and costs. |
{
"estimate": "estimate"
} {
"estimate": "Hill St deck, base scope",
"sections": [
"Cover page",
"Letter",
"Quote items",
"Allowances"
],
"total": 24600,
"pdf_preview": true
} Create the job, accept the estimate when the contract is signed, then run the schedule and the site diary.
Creating the job leaves the estimate open; accepting the estimate locks its value once the contract is signed, and variations only work after that. Buildxact warns that changing the estimate while the job is open can leave orphan orders, so the agent tells you before it does. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_jobs
REST endpointPOST https://cotlet.dev/api/v1/buildxact/jobs/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `from_estimate`, `accept_estimate`. `list` and `get` only read. |
| job string | string | Job name or number, for `get` and `accept_estimate`. |
| estimate string | string | For `from_estimate`: the estimate the job starts from. |
| invoice_method string | string | For a new job: one of `contract_price`, `completion_percent`, `cost_plus`. |
| start_date string | string | Expected ISO start date. |
{
"action": "action"
} {
"job": "Hill St deck and pergola",
"estimate": "Hill St deck, base scope",
"invoice_method": "completion_percent",
"start_date": "2026-11-24",
"created": true
} Tasks from an estimate schedule carry across when the job is created. With auto dependencies on, moving one task can shift the tasks below it, so the agent reports every task that moved. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → update_job_schedule
REST endpointPATCH https://cotlet.dev/api/v1/buildxact/job-schedule
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `update`. `list` and `get` only read. |
| job string required | string | Job name or number, as list in manage_jobs returns it. |
| task string | string | The task, for `update`. |
| start_date string | string | ISO date. |
| end_date string | string | ISO date. |
| progress number | number | Completion from 0 to 100. |
| dependency object | object | A manual dependency: the other task, `end_to_start` or `start_to_start`, and lag days. |
{
"action": "action",
"job": "job"
} {
"job": "Hill St deck and pergola",
"task": "Decking install",
"start_date": "2026-12-01",
"end_date": "2026-12-04",
"progress": 0,
"moved": [
"Balustrade",
"Final clean"
]
} Australia and New Zealand call it Site Diary. Videos and several photos per post are on the Pro and Master plans. The agent writes your notes as given. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_daily_logs
REST endpointPOST https://cotlet.dev/api/v1/buildxact/daily-logs/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create`. `list` and `get` only read. |
| job string required | string | Job name or number, as list in manage_jobs returns it. |
| date string | string | ISO date. Defaults to today. |
| text string | string | What happened on site, in your words. |
| media_urls array | array | Links to photos or videos to attach. |
{
"action": "action",
"job": "job"
} {
"job": "Hill St deck and pergola",
"date": "2026-12-02",
"text": "Joists fixed, first 40 boards laid.",
"photos": 2,
"saved": true
} External costs go on purchase orders, internal labour on work orders. Material orders stop at a submitted quote.
Quote Requests are on Buildxact's Pro and Teams plans only. Trades reply through Buildxact, and the winning reply updates the estimate. A request reaches people outside your company, so the agent lists recipients and items first. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_quote_requests
REST endpointPOST https://cotlet.dev/api/v1/buildxact/quote-requests/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `send`. `list` and `get` only read. |
| estimate string required | string | Estimate name or number, as list in manage_estimates returns it. |
| items array | array | For `send`: the estimate items to price. |
| recipients array | array | For `send`: trades or suppliers from Contacts. |
{
"action": "action",
"estimate": "estimate"
} {
"estimate": "Hill St deck, base scope",
"request": "Pergola electrical",
"recipients": [
"Example Electric",
"Sample Sparks"
],
"sent": true
} Purchase orders record external costs and can flow to your accounting system. Creating one from the estimate line keeps estimated and actual costs side by side. Sending emails the supplier. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_purchase_orders
REST endpointPOST https://cotlet.dev/api/v1/buildxact/purchase-orders/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `send`, `receive`. `list` and `get` only read. |
| job string required | string | Job name or number, as list in manage_jobs returns it. |
| order string | string | Purchase order number, for `get`, `send` and `receive`. |
| supplier string | string | For `create`: the supplier or subcontractor from Contacts. |
| lines array | array | For `create`: estimate line or cost category, description, quantity and unit cost. |
| show_costs boolean | boolean | Show prices on the order document. |
{
"action": "action",
"job": "job"
} {
"job": "Hill St deck and pergola",
"order": "PO-0412",
"supplier": "Example Timber Supply",
"total": 10350,
"status": "Sent"
} The tool fills the cart and submits it as a quote, which Buildxact saves. Going to checkout and paying stays with you. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → create_material_order
REST endpointPOST https://cotlet.dev/api/v1/buildxact/material-orders
| Name | Type | Description |
|---|---|---|
| record string | string | Estimate or job to take items from. Empty starts from a product search. |
| items array required | array | Items with quantities, or Home Depot descriptions or item codes to search. |
| description string | string | Your note, for example Flooring for Hill St. |
| delivery string | string | One of `delivery`, `pickup`, with the job work location or an address. |
{
"items": "items"
} {
"order": "Decking for Hill St",
"items": 3,
"delivery": "pickup",
"quote_submitted": true
} Work orders track internal costs, mostly labour, and unlike purchase orders they do not push costs to accounting. Completing one asks for the actual amount used, which feeds estimated against actual labour. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_work_orders
REST endpointPOST https://cotlet.dev/api/v1/buildxact/work-orders/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create`, `complete`. `list` and `get` only read. |
| job string required | string | Job name or number, as list in manage_jobs returns it. |
| line string | string | The estimate line the cost belongs to. |
| people array | array | Employees, with hours or cost per line. |
| actual number | number | For `complete`: the actual amount used. |
{
"action": "action",
"job": "job"
} {
"job": "Hill St deck and pergola",
"work_order": "Decking labour, week of 1 Dec",
"hours": 64,
"saved": true
} Contract Price, Completion Percent and Cost Plus invoices, variations, credits and due days. Each changes what someone pays.
Contract Price bills set stages such as deposit, base, frame, lockup, fixing and completion; Completion Percent bills the share of each category done since the last invoice; Cost Plus bills costs from purchase and work orders plus your markup. Retention applies where the job has it. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_invoices
REST endpointPOST https://cotlet.dev/api/v1/buildxact/invoices/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `share`, `record_payment`. `list` and `get` only read. |
| job string required | string | Job name or number, as list in manage_jobs returns it. |
| invoice string | string | Invoice number, for `get`, `share` and `record_payment`. |
| claim object | object | For `create`: the stage (Contract Price), the % done per cost category (Completion Percent), or the costs to bill (Cost Plus). |
| amount number | number | For `record_payment`: the amount received. |
{
"action": "action",
"job": "job"
} {
"job": "Hill St deck and pergola",
"invoice": "INV-0218",
"method": "completion_percent",
"lines": [
{
"category": "Decking",
"percent": 60,
"amount": 7056
},
{
"category": "Pergola",
"percent": 25,
"amount": 1860
}
],
"total": 8916,
"shared": false
} Recipes or assemblies can be added like in an estimate. Accepted variations can then go on an invoice. Sending one for approval reaches your client, and a variation changes what the client pays. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → manage_variations
REST endpointPOST https://cotlet.dev/api/v1/buildxact/variations/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `create`, `send`. `list` and `get` only read. |
| job string required | string | Job name or number, as list in manage_jobs returns it. |
| name string | string | Variation name, for `create`. |
| lines array | array | For `create`: labour, materials and other items, each with an Actual Costing category, quantity and unit cost. |
| markup number | number | Markup percentage. |
| delay_days number | number | Optional delay days. |
{
"action": "create",
"job": "Hill St deck and pergola",
"name": "Extra deck stairs",
"lines": [
{
"description": "Carpenter labour",
"category": "Decking",
"quantity": 6,
"unit": "hr",
"unit_cost": 85
},
{
"description": "Stair stringers and treads",
"category": "Decking",
"quantity": 1,
"unit": "set",
"unit_cost": 640
}
],
"markup": 20
} {
"job": "Hill St deck and pergola",
"variation": "Extra deck stairs",
"lines": 2,
"markup": 20,
"total": 1380,
"status": "Draft"
} Buildxact edits an invoice only in Pending, so recorded payments come off first and go back after; the agent reads them out before it removes them. An invoice already synced to accounting does not re-sync, and some Completion Percent invoices cannot go back to Pending. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → amend_invoice
REST endpointPOST https://cotlet.dev/api/v1/buildxact/invoice/amend
| Name | Type | Description |
|---|---|---|
| job string required | string | Job name or number, as list in manage_jobs returns it. |
| invoice string required | string | Invoice number. |
| changes object required | object | The lines, dates or amounts to change. |
{
"job": "job",
"invoice": "invoice",
"changes": "changes"
} {
"job": "Hill St deck and pergola",
"invoice": "INV-0218",
"status": "Invoiced",
"payments_restored": 1,
"saved": true
} Buildxact issues no negative invoices: a client credit is a negative variation added to an invoice with a value, or on Cost Plus jobs a negative purchase or work order that attracts the default markup. A supplier credit syncs to accounting as a negative bill, or a credit note in Xero. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → create_credit_note
REST endpointPOST https://cotlet.dev/api/v1/buildxact/credit-notes
| Name | Type | Description |
|---|---|---|
| job string required | string | Job name or number, as list in manage_jobs returns it. |
| party string required | string | One of `client`, `supplier`. |
| source string | string | Client: the invoice to attach it to. Supplier: the purchase order, at least Sent. |
| lines array required | array | Items and negative quantities or amounts. |
{
"job": "job",
"party": "party",
"lines": "lines"
} {
"job": "Hill St deck and pergola",
"party": "supplier",
"source": "PO-0412",
"amount": -420,
"saved": true
} The business default sits in Business Details, Other Settings; a job default sits on the job's Outgoing Invoices tab. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → set_invoice_due_days
REST endpointPUT https://cotlet.dev/api/v1/buildxact/invoice-due-days
| Name | Type | Description |
|---|---|---|
| job string | string | The job. Empty changes the business default in Business Details. |
| days number required | number | Default due days. |
{
"days": 1
} {
"job": "Hill St deck and pergola",
"default_due_days": 14,
"saved": true
} Messages and shared documents reach the client. The costing and WIP reports are read only.
`list` shows conversations across your client portals with unread ones first. A message reaches your client in their portal. By default you confirm each call; you can switch that off for this tool.
MCP callbuildxact_write → message_client
REST endpointPOST https://cotlet.dev/api/v1/buildxact/client/message
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `send`. `list` and `get` only read. |
| lead string | string | The lead the conversation belongs to. |
| subject string | string | For a new conversation. |
| message string | string | For `send`. |
{
"action": "action"
} {
"lead": "Hill St deck and pergola",
"subject": "Decking start",
"sent": true
} Estimated vs Actuals counts purchase orders that are receipted; Estimated vs Committed also counts orders that are sent but not yet receipted. Returns the report rows as text, the same data Buildxact prints or exports to Excel. It changes nothing and runs without asking.
MCP callbuildxact_read → get_costing_reports
REST endpointGET https://cotlet.dev/api/v1/buildxact/costing-reports
| Name | Type | Description |
|---|---|---|
| record string required | string | Estimate or job name or number. |
| report string required | string | One of `categories`, `categories_and_items`, `pc_ps_items`, `estimated_vs_actuals`, `estimated_vs_committed`. The last two exist on jobs only. |
{
"record": "record",
"report": "report"
} {
"job": "Hill St deck and pergola",
"report": "estimated_vs_committed",
"rows": [
{
"category": "Decking",
"estimated": 9800,
"committed": 10350
},
{
"category": "Pergola",
"estimated": 6200,
"committed": 5900
},
{
"category": "Electrical",
"estimated": 1900,
"committed": 0
},
{
"category": "Footings",
"estimated": 2600,
"committed": 2600
}
]
} Per job: Contract Price, Invoiced To Date, Invoiced %, Estimated Costs and the rest of the report columns. Buildxact states every figure excluding tax, counts only accepted variations and invoices dated before the end of the range, and shows Cost Plus jobs with a $0.00 contract price. It changes nothing and runs without asking.
MCP callbuildxact_read → get_wip_report
REST endpointGET https://cotlet.dev/api/v1/buildxact/wip-report
| Name | Type | Description |
|---|---|---|
| from string required | string | ISO start date of the range. |
| to string required | string | ISO end date of the range. |
{
"from": "from",
"to": "to"
} {
"from": "2026-11-01",
"to": "2026-11-30",
"jobs": [
{
"job": "Hill St deck and pergola",
"contract_price": 24600,
"invoiced_to_date": 9840,
"invoiced_percent": 40
},
{
"job": "Rowe Ave bathroom",
"contract_price": 31800,
"invoiced_to_date": 25440,
"invoiced_percent": 80
}
]
} Your logged-in Buildxact browser profile, AES-256-GCM encrypted, in Finland. Never your password.
The 30 Buildxact tools. The session cookie stays in the Cloud Browser.
The leads, estimates, jobs and invoices your Buildxact user can open, and nothing more.
Your Buildxact users, subscription, API keys and the accounting connection.
You log in again yourself, in the same Cloud Browser.
Disable Buildxact for agents, reset the browser, or change your Buildxact password.
Cotlet never sees or stores your password: you type it into Buildxact yourself, and the agent works from the session that leaves. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).
When Buildxact changes a screen, Cotlet updates its Buildxact server, and your agent keeps the same tool names and inputs.
Buildxact uses regional names: variations or change orders, Site Diary or Daily Logs, recipes or assemblies, Contract Price or Fixed Price. The tools accept either word.
If Buildxact logs you out, the Cotlet console reopens the Cloud Browser in one click so you can log in again.
| Action | How to put it right |
|---|---|
| Schedule dates, markup, due days | Call the same tool again with the earlier values |
| A draft variation or invoice | Change it before it is sent or shared |
| A shared invoice | amend_invoice: back to Pending, change, restore the payments |
| Anything shared to the client portal | Buildxact cannot remove it: talk to your client |
| Quote, quote request or purchase order sent | Already with the client or supplier: follow up directly |
All 28 write tools ask first: by default you confirm each call, and you can switch that off per tool. The 2 read tools, the costing reports and the WIP report, run at once.
{
"name": "manage_variations",
"arguments": {
"action": "create",
"job": "Hill St deck and pergola",
"name": "Extra deck stairs",
"lines": [
{
"description": "Carpenter labour",
"category": "Decking",
"quantity": 6,
"unit": "hr",
"unit_cost": 85
},
{
"description": "Stair stringers and treads",
"category": "Decking",
"quantity": 1,
"unit": "set",
"unit_cost": 640
}
],
"markup": 20
}
} curl -X POST https://cotlet.dev/api/v1/buildxact/variations/manage \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"create","job":"Hill St deck and pergola","name":"Extra deck stairs","lines":[{"description":"Carpenter labour","category":"Decking","quantity":6,"unit":"hr","unit_cost":85},{"description":"Stair stringers and treads","category":"Decking","quantity":1,"unit":"set","unit_cost":640}],"markup":20}' {
"job": "Hill St deck and pergola",
"variation": "Extra deck stairs",
"lines": 2,
"markup": 20,
"total": 1380,
"status": "Draft"
} The example adds 6 hours of labour at $85 and $640 of stair timber, $1,150, then 20% markup: $1,380. A cron job or n8n flow makes the same call over REST at /api/v1/buildxact with the same key and price, in JSON. Failed calls are free.
About $23 a monthfor a builder with four jobs on site and quotes out, 3,900 credits. Your Buildxact plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Daily log on each job | 4 × 20 | 800 |
| Schedule moves and portal updates | 2 × 20 | 400 |
| Client portal messages | 2 × 20 | 400 |
| Purchase orders and work orders | 1 × 40 | 400 |
| Quotes: copy, markup, prepare, share | 4 × 4 | 160 |
| Variations sent for approval | 2 × 6 | 120 |
| Monthly progress claims, four jobs | 2 × 4 | 80 |
| WIP report, every Friday | 1 × 4 | 40 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 240 calls | 3,900 |
The smallest pack is 5,000 credits for $29. More jobs on site or a daily log with every visit means more calls.
Credit packs are one-time purchases, not a subscription. The month above is our own example, not measured customer usage.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| Buildxact API | REST operations for clients, contacts, catalogues, leads, estimates, jobs and purchase orders. | A subscription key Buildxact approves; no quotes, schedule edits, daily logs or portal; you host the code. |
| Excel imports and exports | Buildxact's own templates for estimates, catalogs, clients and contacts. | A file at a time, by hand. |
| By hand | Open each estimate or job and click through. | One screen at a time, only while you are at the desk. |
If your job is syncing clients, catalogs or purchase orders with another system and you have a subscription key, the Buildxact API is the vendor's own route. Cotlet fits when you want ChatGPT, Claude or a script to quote, schedule and bill in Buildxact today, from your own login, with nothing to host.
Take Group sp. z o.o. builds and runs Cotlet: a software company registered in Poland, EU (VAT PL6342984273), trading since 2019. The founders are Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Ask about the Buildxact tools at contact@cotlet.dev.
Sign up free at https://cotlet.dev/signup?app=buildxact, turn on Buildxact under Integrations in the console and log in at https://app.buildxact.com/ in your Cloud Browser. Then connect your AI agent and ask it about a job. The trial needs no card.
Buildxact publishes REST API documentation at developer.buildxact.com: a customer makes an API key in the app and requests a subscription key, which Buildxact's team approves (checked 14 Nov 2026). The documented APIs cover accounts, catalogues, clients, contacts, estimates, jobs, leads and metadata. No Buildxact MCP server or official ChatGPT or Claude connector was found. Cotlet does not use that API: it works in your own signed-in Buildxact account.
Buildxact's Help Center says Quote Requests are on the Pro and Teams plans only, and videos and several photos per Daily Logs post are on the Pro and Master plans. The tools work within the plan you have.
No. Buildxact says changing an invoice that already synced to accounting does not re-sync it, so you update it in the accounting system as well. The agent tells you when an invoice it amends has synced.
The user whose work the agent should do. It sees only what that user can see in Buildxact, so an estimator's login without job access gives the agent no jobs either.
Only in how it is called. Both carry the same 30 tools, inputs, answers, API key and price. Agents use MCP; scripts and n8n HTTP steps use REST.
No. Cotlet is independent and not affiliated with Buildxact.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy