๐Ÿ“ Use case

Generate PDF contracts
ready to sign

Render service agreements, NDAs, and client contracts as PDFs on the fly. Your template + your data = a clean, professional PDF in milliseconds.

๐Ÿ“„
Multi-page contracts
Long contracts paginate naturally. Use CSS page-break rules to control exactly where sections break across pages.
๐Ÿ”ค
Consistent typography
Embed legal-weight fonts and ensure consistent formatting across every generated contract, regardless of operating system.
๐Ÿ–Š๏ธ
Signature-ready output
Generate the PDF, then pass it to DocuSign, HelloSign, or any e-signature platform via their API for signing.
๐Ÿ”ข
Page numbers
Add page numbers to every page footer โ€” essential for legal documents โ€” using the header/footer option (Pro+).
โšก
Generated in milliseconds
Contracts are ready in under 200ms. No delays when a user clicks "Download contract" in your app.
๐Ÿ”’
No data retention
Renderly does not store your HTML content or the generated PDF after delivery. Your contract data stays yours.

Code example (Node.js)

generate-contract.js
<span class="kw">async function</span> <span class="fn">generateContractPDF</span>(contract) {
  <span class="cm">// Render your Handlebars/EJS/Nunjucks template to HTML</span>
  <span class="kw">const</span> html = <span class="fn">renderTemplate</span>(<span class="str">'contract.html'</span>, {
    clientName:  contract.client.name,
    startDate:   contract.startDate,
    terms:       contract.terms,
    signatureLine: <span class="kw">true</span>,
  });

  <span class="kw">const</span> res = <span class="kw">await</span> fetch(<span class="str">'https://api.renderlyapi.com/v1/pdf/from-html'</span>, {
    method: <span class="str">'POST'</span>,
    headers: {
      <span class="str">'Authorization'</span>: <span class="str">`Bearer ${process.env.RENDERLY_KEY}`</span>,
      <span class="str">'Content-Type'</span>: <span class="str">'application/json'</span>,
    },
    body: JSON.<span class="fn">stringify</span>({
      html,
      format: <span class="str">'A4'</span>,
      marginTop: <span class="str">'25mm'</span>,
      marginBottom: <span class="str">'25mm'</span>,
      <span class="cm">// footerTemplate: '&lt;div style="font-size:9px;text-align:center"&gt;Page &lt;span class=pageNumber/&gt;&lt;/div&gt;',</span>
    }),
  });

  <span class="kw">return</span> Buffer.<span class="fn">from</span>(<span class="kw">await</span> res.<span class="fn">arrayBuffer</span>());
}

Other use cases

Start generating contracts

Free tier โ€” 50 PDFs/month. No credit card required.

Get your free API key โ†’