Settlement cycle closes → every seller gets their statement
Sellers ask why the payout is not the sum of their orders, and support answers it one email at a time.
Trigger → artefact
The settlement period ends and the transfer is initiateda payout statement per seller, reconciling gross to the amount transferred
The payout number is never the sales number. Commission, payment fees, tax withheld, a refund from a cycle ago and a promotion the platform co-funded all sit between them. Sellers do not distrust the deduction — they distrust the arithmetic they cannot see, and that turns into a support ticket per seller per cycle.
You send the cycle’s transactions and adjustments. The statement lays out every line, totals each deduction column, applies the adjustments, and ends on the figure you actually transferred — with the reference the seller will see on their bank statement.
Built with the HTML API. Need a designed image or certificate instead? Use the Canvas API — same data, same free year.

The whole integration
One call. Named fields. No SDK to install.
# once per seller, when the settlement cycle closes
curl https://api.pixldocs.com/v1/render \
-H "Authorization: Bearer $PIXLDOCS_KEY" \
-H "Content-Type: application/json" \
-d '{
"template_id": "0a81a089-9392-4095-867d-2a3a47656cf6",
"format": "pdf",
"data": {
"platform_name": "Kettle & Co Marketplace",
"seller_name": "Harbour Loom Textiles",
"seller_id": "SLR-100482",
"statement_number": "PO-2026-W31-00418",
"period_start": "27 Jul 2026",
"period_end": "02 Aug 2026",
"payout_method": "Bank transfer (ACH)",
"payout_reference": "ACH-KC-88213",
"balance_brought_forward": 312.40,
"transactions": [
{ "date": "27 Jul 2026", "reference": "KC-884120", "kind": "sale",
"description": "Stonewashed linen throw, indigo — 1 unit",
"gross": 4850, "commission": 582, "payment_fee": 96.03, "tax_withheld": 48.50 },
{ "date": "29 Jul 2026", "reference": "KC-884120-R", "kind": "refund",
"description": "Refund — colour not as listed",
"gross": -4850, "commission": -582, "payment_fee": 0, "tax_withheld": -48.50 }
],
"adjustments": [
{ "date": "31 Jul 2026", "reference": "PROMO-JUL",
"description": "Summer Sale co-funding", "amount": 1840 }
]
}
}' --output payout-statement.pdfRun against our API before publishing: 200, application/pdf, 63,420 bytes, 1.4s. Send two transactions or two hundred — the table paginates and the totals follow.
Measured, not estimated
- every deduction column
- totalled and shown against the lines it came from
- refunds and reversals
- carried as negative lines, not netted out of sight
- adjustments
- chargebacks, promotions and subsidies listed with a reason
- the closing figure
- the amount transferred, with the bank reference
- a full cycle of sellers
- 142 documents a minute, measured
A statement that explains itself is a support ticket that never opens. The reconciliation is inside the document, so it cannot drift from the transfer your finance system made.
The contract
Exactly what you send, exactly what you get.
The payout statement template takes these named keys. Nothing about layout, fonts or page breaks appears in your code.
Payout statement
0a81a089-9392-4095-867d-2a3a47656cf6Fields · 27
Rows · transactions[]
date · reference · description · kind · gross · commission · payment_fee · tax_withheld
Send as many as you have. Pagination, running totals and the carried-forward header are the renderer's problem, not yours.
Rows · adjustments[]
date · reference · description · amount
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 commission rules are per category.
Send the computed commission per transaction — your rules stay in your system, where they can be tested. The statement presents and totals what you send; it does not re-derive your pricing.
Sellers in different countries and currencies?
Currency code and locale are fields, so formatting and symbol follow the seller. One template, not one per market.
Can we send it as an attachment automatically?
The call returns the bytes, so your settlement job attaches it to the email it already sends. There is nothing to poll for a single statement.
Your system already knows when the document is owed.
Free to start · No credit card required