PandaDoc Node.js SDK
The `pandadoc-node-client` is the official Node.js SDK for interacting with the PandaDoc API. It provides a comprehensive set of functionalities to programmatically manage documents, templates, content library items, webhooks, and other core PandaDoc resources directly from a Node.js environment. The current stable major version is 6.2.0, with version 7.x actively under development in release candidate stages, which introduces significant new features like a Content Library API and improved document section management. The SDK is generated to align with the PandaDoc OpenAPI Specification, ensuring it remains up-to-date with underlying API changes. Its release cadence is primarily driven by API updates and the introduction of new platform features rather than a fixed schedule. As an official SDK, it offers a reliable, type-safe experience for TypeScript users, providing robust auto-completion and compile-time checks, positioning it as a well-supported integration tool.
Common errors
-
PandaDoc API Error: Authentication failed. Invalid API key provided.
cause The API key configured for the client is either missing, incorrect, or has expired.fixEnsure the `apiKey` property in your `Configuration` object is set to a valid, active PandaDoc API key. Check your PandaDoc developer settings for the correct key. -
TypeError: Class constructor DocumentsApi cannot be invoked without 'new'
cause Attempting to call an API service class (e.g., `DocumentsApi`) as a function instead of instantiating it with `new`, or incorrect `require` usage for an ESM-first package.fixAlways instantiate API service classes using the `new` keyword: `const documentsApi = new DocumentsApi(config);`. Ensure you are using ESM `import` statements if targeting modern Node.js environments. -
TS2345: Argument of type '{ /* ... */ }' is not assignable to parameter of type 'CreateDocumentFromTemplateRequest'.cause The object provided as an argument to an API method does not match the expected TypeScript interface for that request payload.fixConsult the `CreateDocumentFromTemplateRequest` (or relevant) TypeScript interface in the SDK's types, and the PandaDoc API documentation, to ensure your payload object strictly adheres to the required structure and types.
Warnings
- breaking Version 7.0.0-rc.1 and subsequent release candidates introduce significant breaking changes and major new features. It updates the client to match OpenAPI Specification version 7.15.0, resulting in potential API endpoint and payload changes.
- gotcha The 7.x series is currently in release candidate (RC) status. While actively developed, it should be used with caution in production environments as APIs and behavior may still change before the final stable release.
- breaking In version 6.0.0, the `name` field for the 'create document from template' payload became optional, and `detect_title_variables` was added as an optional parameter to detect variables in the document name.
- gotcha This SDK is an OpenAPI generated client. Major version updates in the underlying PandaDoc API specification can lead to breaking changes in the SDK's methods, parameters, and return types, even if not explicitly highlighted in the changelog as 'breaking'.
Install
-
npm install pandadoc-node-client -
yarn add pandadoc-node-client -
pnpm add pandadoc-node-client
Imports
- Configuration
const Configuration = require('pandadoc-node-client').Configuration;import { Configuration } from 'pandadoc-node-client'; - DocumentsApi
import DocumentsApi from 'pandadoc-node-client/dist/documents';
import { DocumentsApi } from 'pandadoc-node-client'; - CreateDocumentFromTemplateRequest
import { CreateDocumentFromTemplateRequest } from 'pandadoc-node-client';
Quickstart
import { Configuration, DocumentsApi } from 'pandadoc-node-client';
const PANDADOC_API_KEY = process.env.PANDADOC_API_KEY ?? '';
async function listPandaDocDocuments() {
if (!PANDADOC_API_KEY) {
console.error('PANDADOC_API_KEY environment variable is not set.');
process.exit(1);
}
const config = new Configuration({
apiKey: PANDADOC_API_KEY,
basePath: 'https://api.pandadoc.com'
});
const documentsApi = new DocumentsApi(config);
try {
console.log('Fetching PandaDoc documents...');
const response = await documentsApi.listDocuments();
console.log(`Successfully retrieved ${response.results?.length ?? 0} documents.`);
if (response.results && response.results.length > 0) {
console.log('First document ID:', response.results[0].id);
console.log('First document Name:', response.results[0].name);
}
return response.results;
} catch (error) {
console.error('Failed to fetch documents:', error);
if (error.response?.data) {
console.error('API Error Details:', error.response.data);
}
throw error;
}
}
listPandaDocDocuments();