Generating statements at volume: batch and async jobs

8 April 2026 · 8 min read · Nextarp B.V.

Producing one document is easy. Producing fifty thousand personalised, signed statements on the first of the month - reliably, resumably, and without melting your API - is an engineering problem. Here is how to approach it.

Do not generate synchronously

A monthly run should never be a single blocking request. Submit the run as a job, get an id back immediately, and let the platform process it in the background while your caller moves on.

Make runs resumable

At scale, something will fail partway - a bad data row, a restart, a transient error. A statement run should track per-item status so it can resume from where it stopped rather than restarting from zero or, worse, producing duplicates.

Report completion with webhooks

Polling a job endpoint works but wastes cycles. A signed webhook callback tells your system the moment a run - or each item - completes, and the signature lets you verify the callback really came from your platform.

Personalisation and language

  • Per-recipient data merged from your source of record.
  • Per-recipient language and culture-aware number and date formatting.
  • Consistent signing and archival (PDF/A) across the whole run.

Throughput and back-pressure

Cap concurrency, respect back-pressure, and prefer steady sustained throughput over bursts. A well-designed run is boring - it just finishes.

Related articles

DocsNG is the free, self-hostable platform for generating, signing and verifying documents. Get DocsNG or try the live demo.

← Back to the blog