Draft an estimate for work not yet agreed
create_estimate drafts a quote for a client and never touches the money side: an estimate has no balance, and list_estimates answers "what quotes are outstanding". Use it before work starts, and create_invoice once work is delivered.
Written and reviewed by the Billr team. Published , last reviewed .
- Who this is for
- People who price a project before they build it, or who need a signed-off scope before starting.
- Billr capabilities used
create_estimateget_estimatelist_estimates
What you need first
- A client record, because an estimate belongs to one client and one business.
- A key with the Read and draft profile.
- The scope, either as written lines or as saved items from your catalog.
Step by step
01Write the lines once
line_itemsis required and each line needs adescription,quantityandrate. A line may referenceitem_nameoritem_idinstead, which pulls the stored description and rate.create_estimate { "request_id": "2e6b4d18-9c37-4a55-8f12-5d3a7c9b0e26", "client_name": "Harbor & Lane", "line_items": [ { "description": "Discovery", "quantity": 1, "rate": 1200 }, { "description": "Content migration", "quantity": 1, "rate": 3400 } ], "terms": "Valid for 30 days. 50% up front." }02Set the dates deliberately
issue_datedefaults to today andexpiry_dateis optional. An expiry is what lets an old quote be treated as expired rather than silently converted later.03Add adjustments only if you mean them
discount_typewithdiscount_value,tax_rateandshipping_amountbehave the same way they do on an invoice, so a quote and the invoice it becomes can match.04Read it back
get_estimatereturns the stored lines, totals, status and the estimate link, andlist_estimatesfilters by status, includingacceptedandconverted. The link is yours to check while the quote is a draft; the public page refuses drafts, so a client cannot view or accept it until it is sent.
Worked example
Fictional account, field names as returned by the server
You say
Quote Harbor & Lane $1,200 for discovery and $3,400 for the migration.
Your agent calls
create_estimate { "request_id": "2e6b4d18-9c37-4a55-8f12-5d3a7c9b0e26", "client_name": "Harbor & Lane", "line_items": [ { "description": "Discovery", "quantity": 1, "rate": 1200 }, { "description": "Content migration", "quantity": 1, "rate": 3400 } ] }
Expected response, abridged
{
"summary": "Drafted estimate EST-0213 for Harbor & Lane: $4,600.00",
"estimate": {
"estimate_number": "EST-0213",
"status": "draft",
"currency": "USD",
"total": 4600
}
}Limits and gotchas
- Estimates never carry a balance, and no tool reports money owed for one.
- A draft is not emailed, and its public page does not serve drafts, so a client cannot view or answer it until
send_estimatedelivers it. line_itemsis required even when the scope is obvious; there is no amount-only estimate.- An estimate does not reserve a number in the invoice series; the invoice gets its own number when you convert.
Troubleshooting
- The quote came out in the wrong currency
- Estimates take the client currency, the same rule as invoices. Fix the client first with
update_clientif needed. - A catalog line was not priced as expected
- The saved item was renamed or the name was ambiguous. Run
list_itemsand passitem_idfor an exact match. - The client never saw the quote
- A draft estimate is not delivered. Send it with
send_estimate, or share the link fromget_estimate.
Sources
Reviewed 2026-09-20 against Billr's own tool implementations and the client documentation linked above.
Read next
A draft estimate is not emailed, and its public page only serves estimates that have been sent, so nothing reaches the client until you send it.
Send the estimate