Limits & Errors

What VerseDocs can and cannot do at scale, measured rather than estimated, and every error code it can return.

The two-minute ceiling

Every action runs inside the Dataverse plug-in sandbox, which imposes a hard two-minute timeout. There is no asynchronous or job-based mode: an action either finishes inside two minutes or it fails.

In practice this is generous. Measured on a live environment: a Word document with 50,000 repeated rows renders in about 112 seconds, and 20,000 rows converted to a 938-page PDF in about 59 seconds. Conversion costs roughly two to three times the native render, not an order of magnitude.

Elapsed time is not a stable function of input size. The same operation on the same data varied by more than 10× between runs, because the sandbox schedules and recycles workers outside your control — the first call after an idle period alone costs an extra 15–20 seconds. A job that has always finished in 40 seconds can fail on an unlucky day with no change to your data. Size your work so a typical run finishes comfortably under 60 seconds, and treat anything slower than that as at risk.

When a render cannot finish in time, VerseDocs stops it first and returns TEMPLATE_RENDER_ABORTED naming how many rows it reached, so a flow can branch on it. Nothing partial is returned.

File sizes

Measured against a real environment, round-tripping files of increasing size. Note that base64 encoding inflates a file by about a third on the wire, so the payload column is what actually travels.

File sizeOn the wireTimeResult
1 MB1.33 MB~2–4 sReliable
5 MB6.7 MB~4 sReliable
15 MB20 MB~8.5 sReliable
25 MB33 MB~15 sReliable
40 MB53 MB~21 sReliable
60 MB80 MB~37 sWorks, but no longer comfortable
80 MB107 MB~93 sUncomfortably close to the two-minute timeout
90 MB120 MBFlaky: succeeded 2 times in 3
100 MB133 MBFails
Design for 40–50 MB as the practical ceiling. Everything up to 40 MB is comfortably reliable and fast. Above that it still works but the margin against the timeout shrinks quickly, and past 80 MB it stops being dependable.
Timings are from a Power Platform Developer Plan environment. A production environment under load may be slower — test with your own realistic file sizes rather than treating these as guarantees.

Bulk generation

PathLimitIf you exceed it
Generate document button, from a grid100 selected records per runA plain message asks you to select fewer — nothing is generated silently for a subset.
vdocs_TemplateBatch25 rows per callTEMPLATE_BATCH_TOO_LARGE, refused in under a second before any row is rendered. Nothing partial is produced. Chunk the request — page the FetchXML or the RowIds list in your flow and call it repeatedly.

For volumes beyond that, chunk the work in the flow — a month at a time, or a page of results at a time — rather than asking for everything in one call.

Sustained bulk work: Dataverse throttling

This one catches people out, and it is not a VerseDocs limit — it is Dataverse protecting itself. The platform caps cumulative plug-in execution time per user. Sustained bulk generation can exhaust that budget and suspend that user’s API access.

The symptom looks nothing like a quota message: everything slows down, including operations that have nothing to do with VerseDocs. In testing, a trivial query for a single account row took over two minutes once the budget was spent, and recovery took roughly 20 minutes of genuine idle — shorter waits were not enough.

If you are generating hundreds of documents, spread the work over time, or across more than one service account, rather than driving it as fast as the API will accept.

What VerseDocs does not do

  • No OCR. Text is extracted from PDFs containing real, selectable text. A scanned page or a photo of a document is not made searchable.
  • No AI extraction or classification. Use AI Builder upstream, then hand VerseDocs the clean result.
  • No translation. Translate the data before it enters a template.
  • No CAD or InfoPath conversion.
  • PowerPoint templating is fields only — no loops, conditionals or image tokens in decks.

Error codes

Every failure returns JSON with a stable code and a human-readable message. Branch on the code, never on the message — codes are contractual, wording is not.

General

CodeMeaning
INVALID_INPUTA required parameter was missing or malformed. In a flow, an unbound dynamic-content field is the usual cause.
FILE_TOO_LARGEThe input exceeded the size the action accepts.
UNSUPPORTED_FILE_TYPEThe file is not a type this action handles.
UNSUPPORTED_FEATUREThe document uses something this action cannot process.
INTERNAL_ERRORAn unexpected failure. Contact support with the Meta from the response.

Licensing

CodeMeaning
UTILITY_LICENSE_REQUIREDA utility-pack action was called without a valid license key. Document generation and conversion are not affected.
EDITION_REQUIREDThe license does not cover this action. Also returned for a PDF/A request from an unlicensed environment, where a trial watermark would break the conformance the file claims.

Templating

CodeMeaning
TEMPLATE_FIELD_MISSINGA token references a path that does not exist. The message names it exactly.
TEMPLATE_INVALID_FORMATA formatter was applied to a value it cannot format.
TEMPLATE_EACH_TARGET_NOT_ARRAYA loop target is not an array.
TEMPLATE_IMAGE_MISSINGAn image token names an image that was not supplied.
TEMPLATE_SYNTAX_ERRORA malformed token — commonly an image token with no size.
TEMPLATE_UNCLOSED_BLOCKA block was opened and never closed.
TEMPLATE_MISMATCHED_BLOCKBlock tags overlap or are closed in the wrong order.
TEMPLATE_STRAY_CLOSE_TAGA closing tag with no matching opening tag.
XLSX_ROWS_RANGE_MISSINGRow data supplied but the workbook defines no rows range.
XLSX_INVALID_ROWS_RANGEThe rows range spans more than one row, or is defined more than once.
PPTX_NO_SLIDESThe deck has no slides to render.

Generating from a Dataverse row

CodeMeaning
TEMPLATE_NOT_FOUNDNo template row with that id.
TEMPLATE_INACTIVEThe template exists but is deactivated.
ROW_NOT_FOUNDThe target record does not exist, or the calling user cannot read it.
BOUND_TABLE_MISMATCHThe template's bound table does not match the record's table.
FETCHXML_INVALIDThe binding manifest is not valid FetchXML.
TEMPLATE_BATCH_TOO_LARGEThe batch request is too large to attempt.
TEMPLATE_BATCH_ABORTEDThe batch stopped part-way.
ANNOTATION_CREATE_FAILEDThe document generated but could not be attached — usually a missing Create privilege on Note.

PDF

CodeMeaning
WRONG_PASSWORDThe PDF is encrypted and the password was wrong or absent.
INVALID_PAGE_RANGEA page range is malformed or outside the document.
NO_ACROFORMThe PDF has no fillable form.
UNSUPPORTED_XFA_FORMThe PDF uses an XFA form, which is not supported.
CONVERSION_NOT_CONFIGUREDRegistered but should not occur in normal operation — conversion needs no configuration.
HTML_TO_DOCX_CONVERSION_FAILEDThe HTML could not be converted.
PDFEXTRAS_UNSUPPORTED_FILE_TYPENot a file the PDF utility actions handle.

Images, barcodes and archives

CodeMeaning
IMAGE_DECODE_FAILEDThe bytes are not a readable image.
IMAGE_UNSUPPORTED_FORMATThat image format is not supported.
IMAGE_INVALID_CROP_BOUNDSThe crop falls outside the image.
IMAGE_INVALID_WATERMARKThe watermark options are not valid.
BARCODE_UNSUPPORTED_TYPENot one of qr, code128, ean13.
BARCODE_UNSUPPORTED_FORMATOutput format is not png or svg.
BARCODE_INVALID_PAYLOADThe payload does not suit the symbology — an EAN-13 needs 12 or 13 digits.
BARCODE_UNREADABLENo barcode could be decoded from the image.
ZIP_INVALID_ARCHIVEThe file is not a readable zip archive.

Text, data and documents

CodeMeaning
TEXT_REGEX_INVALID_PATTERNThe regular expression does not compile.
TEXT_REGEX_TIMEOUTThe regular expression took too long — usually catastrophic backtracking.
TEXT_INVALID_BASE64The input is not valid base64.
TEXT_UNSUPPORTED_CASE_MODEUnknown casing mode.
TEXT_UNSUPPORTED_HASH_ALGORITHMUnknown hash algorithm.
TEXT_HMAC_KEY_MISSINGAn HMAC was requested with no key.
TEXT_INVALID_GUID_FORMATUnknown GUID format specifier.
TEXT_INVALID_PASSWORD_SPECThe password specification cannot be satisfied.
DATA_CSV_MALFORMEDThe CSV could not be parsed.
DATA_JSON_INVALIDThe JSON could not be parsed.
DATA_XML_INVALIDThe XML could not be parsed.
DATA_XLSX_SHEET_NOT_FOUNDThe named worksheet does not exist.
DOCX_INVALID_DOCUMENTThe file is not a readable .docx.
DOCX_INVALID_PATTERNThe find/redact pattern is not valid.
DOCX_MERGE_TOO_FEW_DOCUMENTSA merge needs at least two documents.
DOCX_WATERMARK_INVALID_OPTIONSThe watermark options are not valid.
EMAIL_INVALID_EMLThe file is not a readable .eml message.

Trial watermarking

Trial watermarking applies to every output format — PDF, Word, Excel and PowerPoint — in every environment not covered by a valid license key. Environment type is irrelevant: an unlicensed sandbox is watermarked on exactly the same terms as an unlicensed production environment.

A tenant-scoped Premium key covers every environment in the tenant at once. See Licensing.