# Create Joist estimates from a job description

> Turn site-visit notes into a saved Joist estimate with your own item rates, deposit, tax and expiry date, matched to the right client and left unsent.

Source: https://cotlet.dev/integrations/joist-api-mcp-server/create-estimates-from-job-description

You walk the job, jot the scope in your phone, and that evening someone has to rebuild it in Joist: find the client, type each line, then add the deposit, tax and expiry the client will see.

Cotlet does it in your own Joist account with list\_clients, add\_client, list\_items and create\_estimate, called by your AI agent, an n8n workflow or a script.

[Request access](https://cotlet.dev/app/signup?app=joist) [All Joist tools](https://cotlet.dev/integrations/joist-api-mcp-server)

Hosted · nothing to install or maintain

Official options

## Can Joist do this on its own?

Joist has no API for estimates (checked 12 Oct 2026). Inside the app, Quick Estimate with AI turns a text or voice description into a draft with line items, but Joist says it is rolling out with limited availability on iOS and web, and that deposit requests, discounts, taxes, payment schedules and expiry dates must be added by hand after the draft. Nothing outside the Joist app can start an estimate.

By hand

## How you do it in Joist today

1. On the web, click Estimates in the left-hand menu, then Create New; on iPhone, tap Estimates in the bottom bar, then + and Create Estimate.
2. Add the client and type each task and material as a line item with quantity and rate, then Save.
3. For a deposit, scroll to the subtotal section (Payment Option on mobile), click Add beside Request a deposit, choose $ or % and click Done.
4. Set the Expiration Date in the top right of the estimate; on iPhone and Android, turn on Allow Document to Expire in the Expiration section first.
5. Quick Estimate with AI in Joist can draft the line items from a typed or spoken description, but the deposit, tax, discount and expiry still go in by hand on every single estimate.

With an agent

## How to create Joist estimates from a job description

Prompt

```
Make an estimate for Dana Lee: 2 interior doors installed at my usual rate, 50% deposit, 8.25% tax, expires in 14 days. Do not send it yet.
```

1. 01  
### Match the client before anything else  
The agent searches list\_clients by the name, phone or street from your note. One clear match is used as is. Two Dana Lees, or a match with a different address, make it stop and ask which one. With no match it creates the client with add\_client, using only the details you gave.
2. 02  
### Price from your own Items list  
For each task it looks for a saved item with list\_items and reuses your wording and rate. A rate written in your note wins over the saved one. A task with neither a saved item nor a rate is left out and named in the report, because the agent does not invent prices.
3. 03  
### Turn the money terms into fields  
"50% deposit" becomes a percent deposit, "$500 down" an amount. "Valid two weeks" becomes a calendar date counted from today. Tax and discount are applied only when you mention them, so a tax-exempt client is not charged by habit.
4. 04  
### Save, then stop  
create\_estimate saves the estimate and the agent reads back the total and the Deposit Due line. Sending is a separate step: only if you say so does it call send\_document, which waits for your OK.

### What you get back

Example data

```
Estimate #318 saved for Dana Lee (existing client, 14 Maple Street)
2 x Interior door, installed @ $350.00 (your saved item) = $700.00
Tax 8.25%: $57.75, total $757.75
Deposit Due: $378.88 (50%)
Expires 26 Oct 2026
Not sent. Say "send it" to email it to dana@example.com
```

### Other ways to ask

- New client Priya Nair, 22 Oak Ave, priya@example.com: deck repair, 120 sq ft at $18 per sq ft, 8.25% tax, valid 30 days.
- Here are my notes from three site visits today. Make one estimate per client with a 25% deposit and list every line you could not price.
- Quote Mark Ruiz for the kitchen job using only my saved items, no new prices, and leave it as a draft.

Before you automate it

## What Joist allows, and what to know first

- Joist lists Quick Estimate with AI on all plans, but as of 28 Aug 2026 it was still rolling out with limited availability on iOS and web, and it does not create line item groups or markups from the prompt.
- A Joist estimate expiry date cannot be in the past, and once it passes the client can no longer approve the estimate, only request a new one.
- The Joist estimates list colors each estimate by expiry: grey with more than 7 days left or no expiry, yellow under 7 days, red once expired.
- A Joist deposit shows under the total as Deposit Due, and with Joist Payments on the client can pay it right away; the remaining balance then updates on its own.

add\_client and create\_estimate change only your own Joist data and reach no one else, so they run without asking first.

Sources: [Joist Help Center: Quick Estimate and Invoice with AI](https://support.joistapp.com/en/articles/16760523-quick-estimate-and-invoice-with-ai) · [Joist Help Center: how do I create an estimate?](https://support.joistapp.com/en/articles/9212926-how-do-i-create-an-estimate) · [Joist Help Center: estimate expiry](https://support.joistapp.com/en/articles/10452332-estimate-expiry) · [Joist Help Center: can I use Joist Payments to request a deposit?](https://support.joistapp.com/en/articles/9212819-can-i-use-joist-payments-to-request-a-deposit)

REST

## Call create\_estimate from a script

curl

```
curl https://cotlet.dev/api/v1/joist/create_estimate \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"client_id":"cl_3307","line_items":[{"name":"Interior door, installed","description":"Supply and hang a pre-hung interior door","quantity":2,"rate":"350.00"}],"tax_rate":"8.25","deposit":{"type":"percent","value":50},"expires_on":"2026-10-26"}'
```

Example response

```
{
"estimate_id": "est_20418",
"number": "318",
"client": "Dana Lee",
"line_items": [
{
"name": "Interior door, installed",
"quantity": 2,
"rate": 350,
"amount": 700
}
],
"total": 700,
"deposit_due": 350,
"expires_on": "2026-10-25",
"sent": false
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the tool is joist\_create\_estimate. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/joist-api-mcp-server#automations)

Tools

## Joist tools this automation uses

__Cotlet Joist tools used to create Joist estimates from a job description__
| Tool | Parameters |
| ---------------- | ------------------------------------------------------------------------- |
| list\_clients | search, limit, cursor |
| add\_client | name, email, phone, address |
| list\_items | search |
| create\_estimate | client\_id, line\_items, tax\_rate, discount, deposit, expires\_on, notes |

[All 13 Joist tools with descriptions](https://cotlet.dev/integrations/joist-api-mcp-server#tools)

## More Joist automations

- [Turn signed Joist estimates into invoices](https://cotlet.dev/integrations/joist-api-mcp-server/convert-estimates-to-invoices)
- [Record check and cash payments on Joist invoices](https://cotlet.dev/integrations/joist-api-mcp-server/record-payments-on-invoices)
- [Follow up on unpaid and overdue Joist invoices](https://cotlet.dev/integrations/joist-api-mcp-server/follow-up-unpaid-invoices)
- [Joist API and MCP server: every tool](https://cotlet.dev/integrations/joist-api-mcp-server)
- [All use cases](https://cotlet.dev/use-cases)

## Give your agent access to Joist.

Free 7-day trial with 5,000 credits, no card needed. Cotlet is independent and not affiliated with Joist.

[Request access](https://cotlet.dev/app/signup?app=joist)
