Copying a Word template works for ten clients. At a thousand it does not, and the failure mode is not that it's slow, it's that someone eventually fat-fingers a total and nobody notices until the client does.
## The template
```html <div style="font-family: Arial, sans-serif; padding: 40px;"> <h1>Invoice #{{invoice_number}}</h1> <p>Date: {{date}} Bill to: {{client_name}}</p> <table style="width: 100%; border-collapse: collapse; margin-top: 20px;"> <tr style="background: #f5f5f5;"> <th style="padding: 10px; text-align: left;">Item</th> <th style="padding: 10px; text-align: right;">Amount</th> </tr> {{line_items}} </table> <p style="font-size: 18px; font-weight: bold; margin-top: 20px;"> Total: {{currency}}{{total}} </p> </div> ```
Fill the placeholders in your own code, then send it:
```json { "documents": [{ "title": "Invoice_2026_001", "content": "<filled HTML>" }], "template": "professional" } ```
## The rupee sign, specifically
The API's built-in font handles Latin scripts, and as of this year it also embeds a matching Noto font automatically for Devanagari and Arabic script text, so a Hindi client name or address in the invoice body renders correctly now, which it did not a few months ago.
The currency symbol is a separate problem from the script, though. The Indian Rupee sign, ₹, sits in Unicode's currency-symbols block, not in the Devanagari block, so it is not covered by that font addition. If your template literally contains ₹, it can still come back as a missing glyph even on an invoice that is otherwise entirely in English. The dollar, euro, pound and yen signs are all in the base font and work fine.
The safe move, and what we do on our own invoices: write the currency as text. "INR 1,200" instead of "₹1,200". It reads a little less polished but it never silently drops a character, and unlike a missing glyph, a wrong currency code is something a reviewer would actually catch before it goes out.
## Batching a run of invoices
Five per request:
```json { "documents": [ { "title": "INV_001", "content": "<invoice for client A>" }, { "title": "INV_002", "content": "<invoice for client B>" } ], "template": "professional" } ```
For a monthly run larger than five clients, loop in chunks of five rather than looking for a way around the batch cap, which exists specifically so one slow document in a batch cannot take the rest down with it.
## What we'd actually check before shipping this
- GST number and contact details in the template, not left as a placeholder someone forgets to fill - "professional" or "corporate" template for anything client-facing; the other 13 are built for other kinds of documents - Payment terms and due date stated plainly, not implied - If this runs on a schedule, log the response for each invoice rather than assuming a 200 means it reached the client, since generating the PDF and delivering it are two different steps