Skip to main content
POST /vault/:vaultId/assemblies builds new PDF volumes from pages of PDFs that are already in a vault. You send a manifest that says which pages go where; Case.dev assembles them exactly as written. There is no AI in this step: the same sources and manifest always produce byte-identical volumes. Use it to turn a large record set into a production:
  • reorder and combine pages from many source PDFs
  • split the result into volumes
  • add a bookmark outline to each volume
  • stamp continuous Bates numbers across every volume
PDF assembly is in early access. Requests from organizations that are not enabled return 403. Contact support to enable it.

Create an assembly

cURL
202 Response
Each volume is reserved as a vault object right away, with ingestionStatus: "processing". Use the returned objectIds to track the volumes.

The manifest

Sources

sources lists the vault PDFs to draw pages from. Page ranges refer to a source by its index in this list, starting at 0. Each object may appear once. A searchable_pdf source must have finished ingestion. If its searchable copy does not exist yet, the request fails with 409 and code SEARCHABLE_RENDITION_MISSING. Ingest the source first, or request original.

Volumes

Each volume becomes one output PDF. Page ranges are { "source", "start", "end" }. Pages are 1-based and inclusive, so { "source": 0, "start": 1, "end": 3 } is the first three pages of the first source. Ranges can come from any source in any order, and a page can appear more than once; each copy gets its own Bates number.

Outline

outline is a tree of bookmarks. Each entry has a title, a page, and optional children. page is 1-based within that volume, not within a source. Outlines can nest up to 8 levels. Top-level entries open expanded and deeper entries start collapsed.
Source bookmarks, named destinations, page labels and form fields are not carried over. The outline you send is the only outline in the output. Form fields still render, but they are no longer fillable.
Internal links between pages that are both in the same volume keep working and point at the new page. Links to pages that were left out, or that landed in another volume, are removed. Web links are kept.

Bates numbering

bates numbers every output page once, continuing from one volume to the next. Bates text must be printable ASCII. Labels are drawn on the page’s visible area along the edge a reader sees as the bottom, including rotated and cropped pages.

Other options

Limits

Each assembly has 30 minutes to finish.

Track completion

Subscribe to vault.assembly.completed and vault.assembly.failed (see Vault Webhooks). Event payloads carry IDs and counts only, never titles or filenames.
vault.assembly.completed data
You can also read an assembly at any time:
cURL
200 Response
status is queued, processing, completed or failed. Volumes are published together: either every volume is available or none is.

After completion

Completed volumes have ingestionStatus: "uploaded". They can be downloaded, but they are not indexed for search automatically. To make a volume searchable, call POST /vault/:vaultId/ingest/:objectId. If an assembly fails, its reserved volumes are marked failed.

Errors

A failed assembly reports error:
sourceIndex and volumeIndex point into your manifest’s sources and volumes. Retry a failed assembly with a new Idempotency-Key. Sending the same key and body again returns the original assembly; the same key with a different body returns 409.