Skip to main content

QuickBooks

Convert an estimate to an invoice

Turns a QuickBooks estimate into an invoice, in full or in part. Intuit's API has no endpoint for this.

POSThttps://api.clickr.cloud/v2/integrations/quickbooks/estimates/convert-to-invoice
  • Uses 1 run: 100 a day on Standard, 500 on Velocity, reset at midnight UTC.
  • Needs Estimates on your QuickBooks connector.
  • For assistants, the MCP tool convert_quickbooks_estimate_to_invoice.

Request

curl -X POST https://api.clickr.cloud/v2/integrations/quickbooks/estimates/convert-to-invoice \
  -H "Authorization: Bearer $CLICKR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "txnId": "1187",
    "percentage": "50",
    "invoiceDate": "11/04/2026",
    "dueDate": "12/04/2026",
    "statusCallbackUrl": "https://example.com/clickr/runs"
  }'

Response

200
{
  "receipt": "6729c1f04b7e3d0012a91e07"
}

Invoice the whole estimate by sending only txnId. For part of it, send a percentage or an amount, or set each line with lineItems; only one of the three.

Body

JSON, with Content-Type: application/json.

txnIdstringRequired

QuickBooks' transaction id for the estimate.

percentagestring

Invoice this percentage of the estimate, as a number: 50 invoices half. Not with amount or lineItems.

amountstring

Invoice this amount of the estimate, as a number. Not with percentage or lineItems.

lineItemsarray of objects

Sets invoice lines one by one, each found by its match or, without one, by position. Not with percentage or amount.

matchobject

Names the invoice line this entry fills, instead of its position in the array. Matched exactly, ignoring case. Either every entry has a match or none does, and no two can be the same. Prefer it: a progress invoice carries over only the estimate lines with a balance left, so positions stop lining up once part of an estimate is invoiced.

productOrServicestring

Product or service name of the invoice line to fill.

descriptionstring

Description of the invoice line to fill.

productOrServicestring

Product or service name.

descriptionstring

The line's description.

dueobject

How much of this line to invoice, where the account uses progress invoicing.

valuestringRequired

How much of the line to invoice.

unitstringRequired

Whether value is a percentage or an amount.

One of percent, amount

qtystring

Quantity, as a number.

ratestring

Unit rate, as a number.

amountstring

The line's total, as a number.

invoiceNumberstring

The new invoice's number.

invoiceDatestring

Invoice date, as MM/DD/YYYY.

dueDatestring

Due date, as MM/DD/YYYY.

noteToCustomerstring

The note printed on the invoice.

memoOnStatementstring

The memo shown on the customer's statement.

statusCallbackUrlstring

A URL Clickr POSTs the run's result to when it finishes, as JSON with your metaData. Sent once, with a 30-second timeout.

metaDataobject

Any JSON object of your own, such as your id for the job. Sent back with the result to statusCallbackUrl.

Response

200, as JSON, once the run is queued. What the run did comes from Get a run, or is POSTed to your statusCallbackUrl.

receiptstring

The id of the run this call started. Pass it to Get a run.

Errors

JSON with an error and, on most, a message saying what to change. All errors

StatusErrorWhen
401Bad inputThe body is missing txnId, combines options that can't go together, or has a field in the wrong format. The message says which.
401No API Key providedThe Authorization header is missing.
401No account found for api key providedThe key isn't recognised: mistyped, revoked, or held by someone who has left the account.
401No integration found for accountThe account has no connector connected yet.
401This integration is still pending setup…QuickBooks isn't fully set up in Clickr: its sign-in or two-factor setup is unfinished. The error says what to do.
403ForbiddenYour access on the account doesn't include this action.
403Operation not allowedEstimates isn't on your QuickBooks connector.
403Daily cap exceededThe account has used its runs for the day: 100 on Standard, 500 on Velocity. They reset at midnight UTC.