The other search
JSON in. Invoice PDF out. Cents as sent.
You searched JSON to invoice PDF. Same mill, second template. Integer cents. Tax printed as sent.
You searched JSON to invoice PDF. Same mill, second template. The packing-slip route and the invoice route are one URL: POST /v1/render. You change the template name. You send invoice fields. You get application/pdf, US Letter.
This page is the query. The product page for the invoice API is Invoice PDF API. Do not treat them as copies. Here the job is: you have invoice JSON, you want a PDF, and you do not want an HTML invoice renderer.
Amounts are integer cents. 1800 is $18.00. We print the number you posted. We do not parse $18.00 on this template. We do not guess a decimal. Line items carry sku, name, qty, and unit_amount_cents. Optional description. Optional notes.
Tax is printed as sent. tax_cents is a field, not a calculation. Slipmill is not a tax engine. We do not pick a jurisdiction. We do not file. We do not emit a customs commercial invoice. If you need those, compute them upstream or use a product built for the border.
bill_to and from are addresses you already store. invoice_id and date are yours. due_date is optional. currency is a label we print. We do not convert it. The mill is a printer, not a ledger.
Check the payload on the invoice JSON validator before you wire production. That tool does not call /v1/render. A Slipmill key still owns the PDF. Header x-sm-key. Fail closed on a bad key, a bad body, or a spent Starter or Pro cap.
Two locked templates we own. packing-slip for the box. invoice for the bill. Branding is a name, an optional hex, and on paid plans a logo URL. You do not upload HTML. You do not design a plate. Get a key and POST.
If you also need the sheet that rides in the carton, keep the same key and switch template to packing-slip. Do not send both jobs in one body. One POST is one PDF. The mill does not merge a slip and a bill onto a single page.
curl
POST /v1/render with x-sm-key. template invoice.
curl -X POST https://slipmill.com/v1/render \
-H "x-sm-key: YOUR_SLIPMILL_KEY" \
-H "Content-Type: application/json" \
-d '{
"template": "invoice",
"brand": {
"name": "Northline Goods",
"accent": "#9E2A22"
},
"data": {
"invoice_id": "INV-2208",
"date": "2026-08-31",
"bill_to": {
"name": "Cedar & Pine Outfitters",
"address": "440 Warehouse Ave, Dock 3",
"city": "Newark",
"region": "NJ",
"postal": "07105",
"country": "US"
},
"from": {
"name": "Northline Goods",
"address": "18 Mercer Street, Hoboken, NJ 07030"
},
"items": [
{
"sku": "TOTE-12",
"name": "Canvas tote — natural",
"qty": 12,
"unit_amount_cents": 1800
}
],
"currency": "USD",
"tax_cents": 0
}
}' \
--output invoice.pdfQuestions
No. Same route. template invoice. Same x-sm-key. Second locked template we own.
Integer cents. 1800 prints as $18.00. Tax is tax_cents, printed as sent. Not a tax engine.
No. It is a branded billing PDF. Not a commercial invoice.