The invoice is owed the moment the payment clears — not when someone gets to it.
Trigger → artefact
Payment succeeds in your systema numbered tax invoice and a receipt, both as PDF bytes
Invoices look simple until the second tax rate arrives. Then it is subtotals per rate, a rounding rule, a line count nobody predicted, and a footer that has to land on the last page and only the last page. That logic ends up spread across a template, a helper file and a Chrome flag.
Here it lives inside the document. You POST the rows; the arithmetic, the per-rate tax table and the pagination happen during the render. Send a line item without an amount and the render fails and names the field, rather than shipping an invoice with a blank in it.
Built with the HTML API. Need a designed image or certificate instead? Use the Canvas API — same data, same free year.
Tax invoice — rendered by the template this page calls.
What ships in this category
The documents, and the part of each that is hard.
Tax invoice
A compliant tax invoice with seller and buyer identity, per-rate tax breakdown and totals — in your currency, with your tax named the way your jurisdiction names it.
Hard part Tax subtotals per rate, computed from the lines you send.
template_id 001eb79f-5fcc-4c5d-bb1e-3fe0b891097a
Order receipt
The paid-in-full confirmation: payment method and reference, discounts, shipping and the amount actually taken.
Hard part Discount and shipping lines that only appear when they apply.
template_id 2f686558-0b28-4b9d-9572-ec7fe61e5df6
Credit note
The invoice going the other way: returned lines with the reason, the tax adjustment on what was credited, and how the credit settles — against the account or as a refund.
Hard part Tax reversed on the credited lines, not on the original invoice total.
template_id 4d35ed62-1657-4dad-9c39-a7847146aad2
Rent receipt
Money actually received for a period: rent, arrears brought forward, any late fee, and withholding tax deducted at source where the law requires it.
Hard part A receipt that states what was received, not what is owed — and says so on its face.
template_id b3d6d998-56a3-441d-a228-48f51dc76e18
Maintenance bill
Per-unit association billing: common-area charges, sinking fund, arrears, late fee, and the bank and UPI details to pay it.
Hard part Arrears carried in from the last period, added without being folded into a charge line.
Send as many as you have. Pagination, running totals and the carried-forward header are the renderer's problem, not yours.
What you would ask next.
Our invoice has to look like ours, not like yours.
Describe it in a sentence, or paste the HTML you already send, and you get a working template with named fields — measured at about 30 seconds for the first one. Every document on this page was produced that way.
Who owns the invoice number?
You do. We never generate a number, a date or a sequence. We render exactly the values you send, which is the only way a finance document can be reproducible.
Can we regenerate an old invoice byte-for-byte?
Yes, if you pin the template version in the call. Renders are deterministic and a published template is locked; that is a contract, not a best effort.
Your system already knows when the document is owed.