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.

A marketplace payout statement PDF rendered by PixlDocs, reconciling gross sales through commission, fees and tax withheld to the net amount paid
Rendered by the template this page calls. Every figure comes from the transactions sent.

The whole integration

One call. Named fields. No SDK to install.

the call your product makesbash
# 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.pdf

Run 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-2a3a47656cf6

Fields · 27

platform_nameplatform_addressplatform_emailplatform_phoneplatform_tax_idstatement_numberstatement_dateperiod_startperiod_endseller_nameseller_idseller_emailseller_addressseller_tax_idpayout_methodpayout_accountpayout_referenceexpected_creditbalance_brought_forward #reserve_held #reserve_released #minimum_payout #commission_basisnotessupport_emailcurrency_codecurrency_locale

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