Download generated Investor Packet (PDF)
const url = 'https://example.com/api/canvas/example/ip/download-pdf';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/canvas/example/ip/download-pdf \ --header 'Authorization: Bearer <token>'Download the generated PDF Investor Packet file.
Only available when Gotenberg PDF conversion is enabled (GOTENBERG_URL set). RequireEditor: matches DOCX download endpoint for consistent access control — IP PDFs are external-facing artifacts that should not be downloaded by read-only viewers; the Canvas memo PDF (which is the working-document export) uses the more permissive RequireViewer tier by design.
Wave 2 Tier 1 (2026-05-23): the Wave 1 B2 stale-PDF gate is REMOVED.
Reads now come from ApprovalSnapshotService, which is append-only —
a snapshot row is bound to the approval that minted it and cannot
be made stale by a subsequent EDITING transition. Reopening a doc
leaves all prior snapshots untouched; re-approval mints a fresh
snapshot. The historical download surface (?approval_id=...)
lets callers fetch a specific past snapshot.
B18: rate-limited (3/min/user) to match other Canvas download endpoints and prevent a held download URL from triggering a download storm.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Query Parameters
Section titled “Query Parameters ”Responses
Section titled “ Responses ”Successful Response
Example generated
exampleValidation Error
object
object
object
Example generated
{ "detail": [ { "loc": [ "example" ], "msg": "example", "type": "example", "input": "example", "ctx": {} } ]}