Render the invoice you are about to create, without creating it. The product module's invoice template is rendered against an unsaved invoice and returned as HTML. Nothing is persisted: no invoice row, no invoice number, no document and no events. The rendered invoice carries the placeholder reference INV-DRAFT, since a real invoice number is only allocated at finalisation.
Every field is optional, so an empty body renders the template's empty state. Unlike create an invoice, the selected entries do not have to be uninvoiced: nothing is written, so the only cost of previewing one is seeing it.
Guarded by invoices:create rather than invoices:read: the state being rendered only exists for someone building an invoice.
Invoicing is opt-in per organization: unless the invoicing feature flag is enabled for your organization this endpoint returns 403.
400Validation error. Examples: the product module has no invoice template configured, the template failed to render or timed out, a journal entry does not belong to the policy, or journal_entry_ids contains duplicates.
403Invoicing is not enabled for the organization, or the caller is missing the invoices:create permission.
409The policy has not been migrated to Root's current ledger.