Node.js SDK
Generate PDFs from your Node.js or TypeScript applications with a simple, type-safe client.
Installation
Bash
npm install @documentstack/sdkOr with other package managers:
Bash
# pnpm
pnpm add @documentstack/sdk
# yarn
yarn add @documentstack/sdk
# bun
bun add @documentstack/sdkQuick 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
| Option | Type | Default | Description |
|---|---|---|---|
apiKey | string | — | Your API key (required) |
baseUrl | string | API URL | Custom API base URL for self-hosted instances |
timeout | number | 30000 | Request 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.