Skip to content
Documentation menu

Formats & limits

Supported file types, output formats, size caps, expiry windows, and quotas across both surfaces.

Source documents

FormatCompareMerge / combine / version history
.docxYesYes
.docYesYes
.pdfYesYes

Anything that is not already .docx is converted server-side before comparison, so .doc and .pdf sources spend noticeably longer in processing than .docx ones.

Output formats

Over REST, pass the renderings you want as the format query parameter. It is repeatable and also accepts a comma-separated list, so ?format=docx&format=md and ?format=docx,md both ask for two:

formatCompareMerge
docxWord document with tracked changes — the defaultThe merged Word document — the default
pdfPDF rendering of the redline
pdf_changed_pages_onlyPDF of only the changed pages
mdMarkdown rendering of the redlineMarkdown rendering of the merged document

Over MCP, pass them in download_options, or ["all"] for every available format:

Operationdownload_options valueProduces
Compareword_redlineWord document with tracked changes
Comparepdf_redlinePDF rendering of the redline — the default
Comparepdf_changed_pages_onlyPDF of only the changed pages
Mergemerged_docxMerged Word document
Combinecombined_docxCombined Word document
Version historyversion_history_docxAttributed Word document

Note the different defaults. REST defaults to docx, the Word tracked-changes file. MCP defaults to the comparison's previewable rendering, pdf_redline. Set the format explicitly if it matters to you.

Renderings do not finish together — the PDF and the Markdown trail the Word document. A REST response returns every requested format that is ready and names the rest in pending_formats, and reports status: "ready" only once all of them exist. Asking for one format gets you an answer sooner than asking for several.

Size and rate limits

LimitValue
Maximum file size100 MB per file
Revisions per mergeAt least 2
Server-side URL fetch (create_comparison_from_links)100 MB, 30-second timeout, at most 3 redirects
Concurrent MCP uploads16 server-wide; a saturated server returns 503 with Retry-After: 1
MCP upload request timeout300 seconds
MCP wait-tool budgetAbout 55 seconds per call, with keepalives every 5 seconds
REST suggested poll interval5 seconds, via Retry-After

Files larger than 100 MB need the in-app upload flow rather than either API.

Expiry

Every signed URL — upload authorizations, upload manifests, download manifests, per-file download URLs, and text_url — is valid for one hour from issue.

This is rarely a real constraint. The wait tools and the REST status endpoint mint fresh URLs on every call, so a finished artifact stays reachable indefinitely; only the link itself ages out. If an upload manifest lapses before its transfers happen, call the create tool again with the same version_story_id to stage fresh ones.

Quotas

Organizations on a metered plan have a monthly document-upload allowance covering free seats. When it is exhausted:

  • REST returns 402 with code USAGE_LIMIT_REACHED. The check runs before anything is created, so a rejected request costs nothing.
  • MCP raises a tool error whose message includes an upgrade link.

This is a billing state, not a transient failure — retrying will not clear it. Paid seats are not subject to the upload allowance.