1.0.0Epistola 1.0 is now generally available.

/ Stable integration

Advanced document generation inside Valtimo and GZAC workflows.

GZAC is an implementation of Valtimo and uses the same Epistola plugin. Case handling stays in the workflow platform while Epistola owns templates, data contracts, and rendering.

Advanced← Back to integrations

/ Clear responsibilities

Keep every concern in the system that owns it.

The plugin connects the workflow and document layers without moving case logic into Epistola.

Valtimo / GZAC owns the case

The workflow platform gathers case data, decides when a document is needed, handles ZGW APIs, and stores or presents the result.

Epistola owns the document

Epistola manages advanced templates and data contracts, validates the supplied data, and renders the requested document.

/ Architecture flow

From case data to document — watch the plugin flow.

Valtimo or GZAC orchestrates the case and its ZGW connections while Epistola generates the document. Click through the steps to see the responsibility boundary.

1

Caseworker starts process

Caseworker → Zaakafhandelsysteem

A caseworker initiates a case process in the zaakafhandelsysteem — for example handling an objection ("bezwaar").

2

Collect case data

Zaakafhandelsysteem → Data Source

GET/zaken/BZ-2024-001/eigenschappen
{ "zaaktype": "bezwaar", "eigenschappen": [...] }

The zaakafhandelsysteem gathers case data from the ZRC, ZTC, and other configured data sources.

3

Request document generation

Zaakafhandelsysteem → Epistola

POST/api/v1/documents/generate
{ "templateId": "bezwaar-v2", "data": { "zaak": "BZ-2024-001", ... } }

Plugin sends a generation request to Epistola with the resolved template and all variable data.

4

Render and store document

Epistola → Temporary Storage

PUT/documents/gen-48291.pdf
{ "contentType": "application/pdf", "size": "142KB" }

Epistola renders the template with the provided data and stores the resulting PDF in temporary storage.

5

Wait for generation

Zaakafhandelsysteem → Epistola

GET/api/v1/jobs/gen-48291
{ "status": "completed", "resourceUrl": "/tmp-storage/gen-48291.pdf" }

The Valtimo plugin tracks the Epistola generation job until the document is ready or the job reports an error.

6

Collect document

Zaakafhandelsysteem → Temporary Storage

GET/tmp-storage/gen-48291.pdf
{ "format": "application/pdf", "bytes": 145291 }

The zaakafhandelsysteem downloads the completed PDF from the Epistola result location.

7

Register in Documenten API

Zaakafhandelsysteem → DRC

POST/enkelvoudiginformatieobjecten
{ "titel": "Besluit op bezwaar", "informatieobjecttype": "besluit" }

The zaakafhandelsysteem stores the PDF in the Documenten API (DRC), linking it to the original case for archival.

8

Document available

Zaakafhandelsysteem → Caseworker

The caseworker can now view and download the generated document from within the zaakafhandelsysteem.

Step 1 / 8

/ Plugin setup

From template contract to case document in three steps.

01

Prepare the document contract

Publish the Epistola template and define the data its fields expect from the case workflow.

02

Configure the plugin

Connect Valtimo or GZAC to Epistola and map case information to the template's data contract.

03

Generate and handle the result

Generate, preview, retry when needed, and let the workflow store or present the finished document.

/ Plugin capabilities

The complete document step in your case workflow.

  • Select a published Epistola template from a process.
  • Map case data to the template's data contract.
  • Preview and review a document before final generation.
  • Wait for generation and handle success, failure, and retry paths.
  • Return the generated document to the case workflow for storage or use.

/ Next step

Interested in what Epistola can do for your product?

Schedule a call and ask us any of your questions.