Document Stack
Document Stack
Docs

Node.js SDK

Generate PDFs from your Node.js or TypeScript applications with a simple, type-safe client.

Installation

Bash
npm install @documentstack/sdk

Or with other package managers:

Bash
# pnpm
pnpm add @documentstack/sdk

# yarn
yarn add @documentstack/sdk

# bun
bun add @documentstack/sdk

Quick Start

Generate a PDF in just a few lines of code:

TypeScript
import { DocumentStack } from "@documentstack/sdk";
import fs from "fs";

const client = new DocumentStack({
  apiKey: process.env.DOCUMENTSTACK_API_KEY!,
});

const pdf = await client.generate({
  templateId: "tmpl_abc123",
  data: {
    customer_name: "Acme Corp",
    invoice_number: "INV-001",
    total: "$5,000.00",
  },
});

fs.writeFileSync("invoice.pdf", pdf);
console.log("PDF generated successfully!");
The SDK returns a Buffer containing the PDF binary data. You can write it to a file, stream it to the client, upload to S3, or attach it to an email.

Configuration

OptionTypeDefaultDescription
apiKeystringYour API key (required)
baseUrlstringAPI URLCustom API base URL for self-hosted instances
timeoutnumber30000Request timeout in milliseconds

Express.js Example

Serve generated PDFs directly from an Express route:

TypeScript
import express from "express";
import { DocumentStack } from "@documentstack/sdk";

const app = express();
const client = new DocumentStack({
  apiKey: process.env.DOCUMENTSTACK_API_KEY!,
});

app.get("/invoices/:id/pdf", async (req, res) => {
  const invoice = await getInvoiceFromDatabase(req.params.id);

  const pdf = await client.generate({
    templateId: "tmpl_invoice",
    data: {
      customer_name: invoice.customerName,
      invoice_number: invoice.number,
      line_items: invoice.items,
      total: invoice.total,
    },
  });

  res.setHeader("Content-Type", "application/pdf");
  res.setHeader("Content-Disposition", `attachment; filename="invoice-${invoice.number}.pdf"`);
  res.send(pdf);
});

Next.js API Route Example

TypeScript
// app/api/generate-pdf/route.ts
import { DocumentStack } from "@documentstack/sdk";
import { NextResponse } from "next/server";
import { generateDocsMetadata, generateDocsJsonLd } from "@/lib/docs-seo";


export const metadata = generateDocsMetadata("/docs/sdk-node");

const client = new DocumentStack({
  apiKey: process.env.DOCUMENTSTACK_API_KEY!,
});

export async function POST(request: Request) {
  const { templateId, data } = await request.json();

  const pdf = await client.generate({ templateId, data });

  return new NextResponse(pdf, {
    headers: {
      "Content-Type": "application/pdf",
      "Content-Disposition": 'attachment; filename="document.pdf"',
    },
  });
}

Error Handling

TypeScript
try {
  const pdf = await client.generate({
    templateId: "tmpl_abc123",
    data: { name: "Test" },
  });
} catch (error) {
  if (error instanceof DocumentStackError) {
    console.error("Generation failed:", error.message);
    console.error("Status:", error.status); // e.g. 404
  }
}

TypeScript Support

The SDK is written in TypeScript and ships with full type definitions. You get autocompletion and type checking out of the box — no@types package needed.

View on GitHub

The source code is available on GitHub. Report issues, view examples, or contribute improvements.