Convert an accepted estimate into an invoice
convert_estimate_to_invoice copies the accepted quote into a draft invoice and links the two. It refuses declined and expired quotes, returns the existing invoice when the quote was already converted, and notes when a quote was converted without formal acceptance.
Written and reviewed by the Billr team. Published , last reviewed .
- Who this is for
- Anyone who quotes work and starts it once the client agrees.
- Billr capabilities used
convert_estimate_to_invoiceget_estimateget_invoice
What you need first
- An estimate that has been sent and answered, ideally with status
accepted. - A key with the Read and draft profile.
- The estimate id, from
list_estimatesorget_estimate.
Step by step
01Check the estimate status
get_estimatereturns the status and the converted invoice id when there is one. Converting an already-converted quote is safe but pointless, and the server says so.get_estimate { "estimate_id": "a4f1c8d2-6b39-4e07-9d51-2c8a6f3b1e94" }02Convert it
Only the estimate id is required.
issue_dateanddue_dateare optional overrides for the new draft, which otherwise takes today and the business payment terms.convert_estimate_to_invoice { "estimate_id": "a4f1c8d2-6b39-4e07-9d51-2c8a6f3b1e94" }03Read the result carefully
The summary names the new invoice number and total, and mentions when the estimate was not formally accepted.
already_converted: truemeans nothing new was created and the existing invoice came back.04Send it when you are ready
The new invoice is a draft like any other, so it is reviewed, corrected and then sent with
send_invoiceunder a key that has the send scope.
Worked example
Fictional account, field names as returned by the server
You say
Harbor & Lane accepted EST-0213, turn it into an invoice.
Your agent calls
convert_estimate_to_invoice { "estimate_id": "a4f1c8d2-6b39-4e07-9d51-2c8a6f3b1e94" }
Expected response, abridged
{
"summary": "Converted estimate EST-0213 into draft invoice INV-1151: $4,100.00. Call send_invoice to deliver it.",
"already_converted": false,
"invoice": {
"invoice_number": "INV-1151",
"status": "draft",
"total": 4100
}
}Limits and gotchas
- Declined and expired quotes cannot be converted; create a fresh estimate instead.
- The estimate becomes
convertedand can no longer be edited or sent. - Converting does not send anything. Delivery is a separate, scope-checked call.
- The invoice takes the estimate lines as written; it does not attach logged time or expenses.
Troubleshooting
- "Estimate EST-0213 is 'declined'"
- The client declined this quote. Reissue the scope as a new estimate and get an acceptance before invoicing.
- The summary warns the estimate was not formally accepted
- The quote was still sent or viewed. Convert only when you have the client agreement you rely on; the note exists so the record is honest.
- Two invoices exist for one quote
- Only one invoice can be linked, and retries return it rather than creating another. Check the estimate for
converted_invoice_idbefore assuming a duplicate.
Sources
Reviewed 2026-09-20 against Billr's own tool implementations and the client documentation linked above.
Read next
The invoice is a draft, so review it before sending. Source work is not involved here, which makes the draft the only place to make changes.
Review the new draft