Create sales invoice
Save a sales invoice as Unfinished and return the totals.
POST https://cotlet.dev/api/v1/procountor/partners/{partner_id}/sales-invoices
write Confirm
Creates the invoice the way Save does in Invoice view. Procountor generates the invoice number on save. The invoice stays Unfinished: editable, not sent and not yet counted in tax reports. Returns net, VAT and gross totals and the due date calculated from the payment terms. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| partner_id string required | string | Customer ID from list_partners. |
| invoice_date string | string | YYYY-MM-DD. Default: today. |
| rows array required | array | Invoice rows: name, quantity, unit_price, vat_percent. |
| additional_info string | string | Text shown above the invoice rows. |
Request
curl -X POST https://cotlet.dev/api/v1/procountor/partners/bp_20417/sales-invoices \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"invoice_date":"2026-10-14","rows":[{"name":"Consulting","quantity":10,"unit_price":80,"vat_percent":25.5}]}' result = client.call("procountor", "create_sales_invoice", {"partner_id":"bp_20417","invoice_date":"2026-10-14","rows":[{"name":"Consulting","quantity":10,"unit_price":80,"vat_percent":25.5}]}) const result = await cotlet.call('procountor', 'create_sales_invoice', {"partner_id":"bp_20417","invoice_date":"2026-10-14","rows":[{"name":"Consulting","quantity":10,"unit_price":80,"vat_percent":25.5}]}); cotlet call procountor create_sales_invoice --data '{"partner_id":"bp_20417","invoice_date":"2026-10-14","rows":[{"name":"Consulting","quantity":10,"unit_price":80,"vat_percent":25.5}]}' Example response
{
"invoice_id": "si_10482",
"number": "10482",
"customer": "Nordic Print Oy",
"status": "unfinished",
"invoice_date": "2026-10-14",
"due_date": "2026-10-28",
"currency": "EUR",
"net_total": 800,
"vat_total": 204,
"total": 1004
}