documenso-core-workflow-b
Enables the creation of documents from pre-defined templates and the generation of direct signing links.
Install
mkdir -p .claude/skills/documenso-core-workflow-b && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/8435" && unzip -o skill.zip -d .claude/skills/documenso-core-workflow-b && rm skill.zipInstalls to .claude/skills/documenso-core-workflow-b
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Implement Documenso template-based workflows and direct signing links.Key capabilities
- →Generate documents from reusable templates
- →Implement direct signing links for public access
- →Embed signing experiences using React components
- →Prefill fields during document generation
- →Create multi-document envelopes
How it works
Templates serve as blueprints that define PDF structure and fields, allowing for the rapid generation of documents via API or direct signing links.
Inputs & outputs
When to use documenso-core-workflow-b
- →Creating reusable document templates
- →Generating documents from templates
- →Implementing direct signing links
- →Prefilling fields in templates
About this skill
Documenso Core Workflow B: Templates & Direct Signing
Overview
Create reusable templates, generate documents from templates with prefilled fields, and implement direct signing links for public/anonymous signers. Templates define the PDF, fields, and recipient roles once — then stamp out documents on demand.
Prerequisites
- Completed
documenso-core-workflow-a - At least one PDF uploaded to Documenso as a template
- Understanding of recipient roles and field types
Instructions
Step 1: Create a Template via Dashboard
Templates are created in the Documenso UI:
- Navigate to Templates in the sidebar.
- Click Create Template and upload a PDF.
- Add placeholder recipients (e.g., "Signer 1", "Approver") — these become roles that get filled when creating documents from the template.
- Place fields on the PDF and assign them to placeholder recipients.
- Save the template and note the template ID from the URL.
Step 2: Create Document from Template (v1 REST API)
// The v1 API has a dedicated template endpoint
const templateId = 42; // From the dashboard URL
const res = await fetch(
`https://app.documenso.com/api/v1/templates/${templateId}/create-document`,
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DOCUMENSO_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Service Agreement — Acme Corp",
recipients: [
{
email: "[email protected]",
name: "Alice CEO",
role: "SIGNER",
},
],
// Optionally prefill fields by their IDs
prefillFields: [
{ id: "field_abc123", value: "2026-03-22" },
{ id: "field_def456", value: "Acme Corporation" },
],
}),
}
);
const document = await res.json();
console.log(`Created document ${document.documentId} from template ${templateId}`);
Step 3: Template Workflow Patterns
// Pattern: Batch document generation from template
async function generateContracts(
templateId: number,
clients: Array<{ email: string; name: string; company: string }>
) {
const results = [];
for (const client of clients) {
const res = await fetch(
`https://app.documenso.com/api/v1/templates/${templateId}/create-document`,
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DOCUMENSO_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
title: `Service Agreement — ${client.company}`,
recipients: [
{ email: client.email, name: client.name, role: "SIGNER" },
],
}),
}
);
const doc = await res.json();
// Send immediately after creation
await fetch(
`https://app.documenso.com/api/v1/documents/${doc.documentId}/send`,
{
method: "POST",
headers: { Authorization: `Bearer ${process.env.DOCUMENSO_API_KEY}` },
}
);
results.push({ documentId: doc.documentId, client: client.email });
}
return results;
}
Step 4: Direct Signing Links
Direct links let anyone sign without receiving an email — perfect for public forms, walk-in signers, or embedded flows.
Setup in Dashboard:
- Open a template.
- Click Direct Link in template settings.
- Choose which recipient role the direct link signer fills.
- Copy the generated URL.
Direct Link URL format:
https://app.documenso.com/sign/direct/{token}
Embedding a Direct Link in an iframe:
<iframe
src="https://app.documenso.com/sign/direct/abc123token"
width="100%"
height="800"
frameborder="0"
allow="clipboard-write"
></iframe>
Step 5: Embedded Signing with React
npm install @documenso/embed-react
// DirectSigningPage.tsx
import { EmbedDirectTemplate } from "@documenso/embed-react";
export function DirectSigningPage() {
return (
<EmbedDirectTemplate
token="your-direct-link-token"
host="https://app.documenso.com"
// Pre-fill recipient data
name="Jane Doe"
email="[email protected]"
// Lock pre-filled fields so signer can't change them
lockName={true}
lockEmail={true}
// Callbacks
onDocumentReady={() => console.log("Document loaded")}
onDocumentCompleted={() => console.log("Signing complete!")}
onDocumentError={(err) => console.error("Error:", err)}
/>
);
}
Step 6: Embedded Authoring (Document Editor)
Let users create and edit documents directly in your app:
import { EmbedCreateDocument } from "@documenso/embed-react";
export function CreateDocumentPage() {
return (
<EmbedCreateDocument
presignToken="presign-token-from-api"
host="https://app.documenso.com"
onDocumentCreated={(doc) => {
console.log(`Document ${doc.documentId} created`);
}}
/>
);
}
Presign tokens are obtained from the API and expire after 1 hour by default.
Step 7: v2 Envelope API (Multi-Document)
The v2 API uses "envelopes" that can contain multiple documents:
// Create envelope with multipart/form-data
const form = new FormData();
form.append("payload.title", "Multi-Doc Envelope");
form.append("payload.type", "DOCUMENT"); // or "TEMPLATE"
form.append("files", pdfBlob1, "contract.pdf");
form.append("files", pdfBlob2, "appendix.pdf");
const envelope = await fetch("https://app.documenso.com/api/v2/envelope/create", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.DOCUMENSO_API_KEY}` },
body: form,
});
const { envelopeId } = await envelope.json();
// Distribute (send) the envelope
await fetch("https://app.documenso.com/api/v2/envelope/distribute", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DOCUMENSO_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ envelopeId }),
});
Template vs Direct Document Comparison
| Feature | Document (ad-hoc) | Template | Direct Link |
|---|---|---|---|
| PDF upload | Every time | Once | Once (via template) |
| Field placement | Every time | Once | Once (via template) |
| Recipient known upfront | Yes | Yes | No |
| Public/anonymous signing | No | No | Yes |
| Batch generation | Manual | API call per client | N/A |
| Embedding | SignDocument | DirectTemplate | iframe/embed |
Error Handling
| Error | Cause | Solution |
|---|---|---|
| Template not found (404) | Invalid template ID or deleted | Verify ID in dashboard URL |
| Recipient mismatch | Wrong number vs template roles | Match template's placeholder roles |
| Field not found for prefill | Invalid prefillFields[].id | GET template first, inspect field IDs |
| Direct link disabled | Feature not enabled on template | Enable in template settings |
| Presign token expired | Token older than 1 hour | Request a new presign token |
Resources
Next Steps
For error handling patterns, see documenso-common-errors.
When not to use it
- →Creating ad-hoc, one-off documents
- →Manual field placement for every document
Prerequisites
Limitations
- →Presign tokens expire after 1 hour
- →Direct links require template-level configuration
How it compares
Templates eliminate the need to re-upload PDFs and re-place fields for recurring document types.
Compared to similar skills
documenso-core-workflow-b side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| documenso-core-workflow-b (this skill) | 0 | 25d | Review | Intermediate |
| mcp-builder | 136 | 3mo | Review | Advanced |
| telegram-mini-app | 62 | 6mo | Review | Advanced |
| stripe-integration | 48 | 2mo | No flags | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
mcp-builder
anthropics
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
telegram-mini-app
davila7
Expert in building Telegram Mini Apps (TWA) - web apps that run inside Telegram with native-like experience. Covers the TON ecosystem, Telegram Web App API, payments, user authentication, and building viral mini apps that monetize. Use when: telegram mini app, TWA, telegram web app, TON app, mini app.
stripe-integration
wshobson
Implement Stripe payment processing for robust, PCI-compliant payment flows including checkout, subscriptions, and webhooks. Use when integrating Stripe payments, building subscription systems, or implementing secure checkout flows.
copilot-sdk
github
Build agentic applications with GitHub Copilot SDK. Use when embedding AI agents in apps, creating custom tools, implementing streaming responses, managing sessions, connecting to MCP servers, or creating custom agents. Triggers on Copilot SDK, GitHub SDK, agentic app, embed Copilot, programmable agent, MCP server, custom agent.
nodejs-backend-patterns
wshobson
Build production-ready Node.js backend services with Express/Fastify, implementing middleware patterns, error handling, authentication, database integration, and API design best practices. Use when creating Node.js servers, REST APIs, GraphQL backends, or microservices architectures.
chatgpt-app-builder
mcp-use
Build ChatGPT apps with interactive widgets using mcp-use and OpenAI Apps SDK. Use when creating ChatGPT apps, building MCP servers with widgets, defining React widgets, working with Apps SDK, or when user mentions ChatGPT widgets, mcp-use widgets, or Apps SDK development.