documenso-core-workflow-a
Implement Documenso document creation and recipient management workflows. Use when creating documents, managing recipients, adding signature fields, or building signing workflows with Documenso. Trigger with phrases like "documenso document", "create document", "add recipient", "documenso signer", "signature field".
Install
mkdir -p .claude/skills/documenso-core-workflow-a && curl -L -o skill.zip "https://mcp.directory/api/skills/download/8160" && unzip -o skill.zip -d .claude/skills/documenso-core-workflow-a && rm skill.zipInstalls to .claude/skills/documenso-core-workflow-a
About this skill
Documenso Core Workflow A: Document Creation & Recipients
Overview
Complete workflow for creating documents, managing recipients with different roles, positioning fields, and controlling signing order. Covers both the SDK and v1 REST API for document-centric operations.
Prerequisites
- Completed
documenso-install-authsetup - Understanding of
documenso-sdk-patterns - PDF file ready for signing
Instructions
Step 1: Create a Document with the SDK
import { Documenso } from "@documenso/sdk-typescript";
import { readFileSync } from "fs";
const client = new Documenso({ apiKey: process.env.DOCUMENSO_API_KEY! });
// Create document shell
const doc = await client.documents.createV0({
title: "Service Agreement — Q1 2026",
});
// Upload PDF
const pdf = readFileSync("./contracts/service-agreement.pdf");
await client.documents.setFileV0(doc.documentId, {
file: new Blob([pdf], { type: "application/pdf" }),
});
Step 2: Recipient Roles
Documenso supports these recipient roles:
| Role | Behavior |
|---|---|
SIGNER | Must complete all assigned fields to finish |
VIEWER | Receives a copy but takes no action |
APPROVER | Must approve before signers can proceed |
CC | Receives a completed copy after all signatures |
// Add multiple recipients with roles
const signer = await client.documentsRecipients.createV0(doc.documentId, {
email: "ceo@acme.com",
name: "Alice CEO",
role: "SIGNER",
});
const approver = await client.documentsRecipients.createV0(doc.documentId, {
email: "legal@acme.com",
name: "Legal Team",
role: "APPROVER",
});
const cc = await client.documentsRecipients.createV0(doc.documentId, {
email: "records@acme.com",
name: "Records",
role: "CC",
});
Step 3: Signing Order
Control the sequence in which recipients act. Lower numbers go first.
// Sequential signing: legal approves, then CEO signs
await client.documentsRecipients.createV0(doc.documentId, {
email: "legal@acme.com",
name: "Legal",
role: "APPROVER",
signingOrder: 1, // Goes first
});
await client.documentsRecipients.createV0(doc.documentId, {
email: "ceo@acme.com",
name: "CEO",
role: "SIGNER",
signingOrder: 2, // Goes after legal approves
});
Step 4: Add Fields to Document
Field coordinates use percentage-based positioning (0-100 for both X and Y axes). The origin is the top-left corner of the page.
// Signature field — bottom of page 1
await client.documentsFields.createV0(doc.documentId, {
recipientId: signer.recipientId,
type: "SIGNATURE",
pageNumber: 1,
pageX: 10, // 10% from left
pageY: 85, // 85% from top
pageWidth: 30, // 30% of page width
pageHeight: 5, // 5% of page height
});
// Date field — next to signature
await client.documentsFields.createV0(doc.documentId, {
recipientId: signer.recipientId,
type: "DATE",
pageNumber: 1,
pageX: 60,
pageY: 85,
pageWidth: 20,
pageHeight: 3,
});
// Name field — auto-filled from recipient
await client.documentsFields.createV0(doc.documentId, {
recipientId: signer.recipientId,
type: "NAME",
pageNumber: 1,
pageX: 10,
pageY: 78,
pageWidth: 30,
pageHeight: 3,
});
// Text field — custom input (e.g., title/position)
await client.documentsFields.createV0(doc.documentId, {
recipientId: signer.recipientId,
type: "TEXT",
pageNumber: 1,
pageX: 60,
pageY: 78,
pageWidth: 30,
pageHeight: 3,
});
Step 5: Multi-Page Document with Multiple Signers
async function createMultiSignerContract(
pdfPath: string,
signers: Array<{ email: string; name: string; signPage: number }>
) {
const client = new Documenso({ apiKey: process.env.DOCUMENSO_API_KEY! });
const doc = await client.documents.createV0({ title: "Multi-Party Agreement" });
const pdf = readFileSync(pdfPath);
await client.documents.setFileV0(doc.documentId, {
file: new Blob([pdf], { type: "application/pdf" }),
});
for (let i = 0; i < signers.length; i++) {
const s = signers[i];
const recip = await client.documentsRecipients.createV0(doc.documentId, {
email: s.email,
name: s.name,
role: "SIGNER",
signingOrder: i + 1,
});
// Each signer gets signature + date on their assigned page
await client.documentsFields.createV0(doc.documentId, {
recipientId: recip.recipientId,
type: "SIGNATURE",
pageNumber: s.signPage,
pageX: 10, pageY: 80, pageWidth: 30, pageHeight: 5,
});
await client.documentsFields.createV0(doc.documentId, {
recipientId: recip.recipientId,
type: "DATE",
pageNumber: s.signPage,
pageX: 60, pageY: 80, pageWidth: 20, pageHeight: 3,
});
}
await client.documents.sendV0(doc.documentId);
return doc.documentId;
}
Step 6: Document Metadata and Settings
// v1 REST API: create document with metadata
const res = await fetch("https://app.documenso.com/api/v1/documents", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DOCUMENSO_API_KEY}`,
},
body: (() => {
const form = new FormData();
form.append("title", "NDA — Confidential");
form.append("file", new Blob([pdf], { type: "application/pdf" }));
return form;
})(),
});
const document = await res.json();
Step 7: Query and Filter Documents
// List documents with pagination
const { documents } = await client.documents.findV0({
page: 1,
perPage: 20,
orderByColumn: "createdAt",
orderByDirection: "desc",
});
// Get single document with all details
const detail = await client.documents.getV0(documentId);
console.log(`Status: ${detail.status}`); // DRAFT | PENDING | COMPLETED
console.log(`Recipients: ${detail.recipients.length}`);
console.log(`Fields: ${detail.fields.length}`);
Document Status Flow
DRAFT ──send()──→ PENDING ──all sign──→ COMPLETED
│
├──reject()──→ REJECTED
└──cancel()──→ CANCELLED
Only DRAFT documents can be modified (add recipients, fields, change PDF).
Error Handling
| Error | HTTP | Cause | Solution |
|---|---|---|---|
| Document not found | 404 | Invalid document ID | Verify ID with findV0() |
| Recipient exists | 400 | Duplicate email on same doc | Update existing with updateV0() |
| Invalid field position | 400 | pageX/pageY > 100 or < 0 | Use percentage values 0-100 |
| Cannot modify sent doc | 400 | Document status is PENDING | Create new document or cancel first |
| File too large | 413 | PDF exceeds plan limit | Compress PDF (plan limits vary) |
Resources
Next Steps
For template-based workflows and direct signing links, see documenso-core-workflow-b.
More by jeremylongshore
View all skills by jeremylongshore →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.
Related MCP Servers
Browse all serversCairo Coder: Expert Cairo and Starknet development support, smart contract creation, and code refactoring via the Cairo
Spec-Driven Development integrates with IBM DOORS software to track software licenses, automate requirements, and enforc
Access official Microsoft Docs instantly for up-to-date info. Integrates with ms word and ms word online for seamless wo
Integrate Feishu (Lark) for seamless document retrieval, messaging, and collaboration via TypeScript CLI or HTTP server
LLM Code Context boosts code reviews and documentation with smart file selection, code outlining, and multi-language sup
MiniMax Multimodal JavaScript integrates image, video, text-to-speech, and voice cloning for advanced multimodal experie
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.