Documenso Hello World
SkillDev tools'Create a minimal working Documenso example.
Use Documenso Hello World in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Documenso Hello World and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Documenso Hello World skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
What this skill tells your AI
The instructions your AI receives, as published by jeremylongshore/tons-of-skills-marketplace in skills/.curated/documenso-hello-world/SKILL.md and read by Ahel’s review.
Output
- A verified synthetic development document/signing workflow with a redacted lifecycle receipt.
- A cleanup/disable action that leaves no real signer or production-document tutorial artifact.
Examples
Create a development document using placeholder content and a synthetic signer, verify the intended role and lifecycle transition, then archive/delete it under the test policy. Record only environment and opaque correlation/state; never use a real agreement, signer, signing URL, or production workspace for a hello-world exercise.
Overview
Minimal working example that creates a document, adds a recipient with a signature field, and sends it for signing — all in one script. Uses the Documenso TypeScript SDK (v2 API) with a Python equivalent.
Prerequisites
- Completed
documenso-install-authsetup - Valid API key in
DOCUMENSO_API_KEYenvironment variable - A PDF file to upload (or generate a test one below)
Instructions
Step 1: Generate a Test PDF (Optional)
If you don't have a PDF handy:
npm install pdf-lib
// generate-test-pdf.ts
import { PDFDocument, StandardFonts } from "pdf-lib";
import { writeFileSync } from "fs";
async function createTestPdf() {
const pdf = PDFDocument.create();
const page = (await pdf).addPage([612, 792]); // US Letter
const font = await (await pdf).embedFont(StandardFonts.Helvetica);
page.drawText("Please sign below:", { x: 50, y: 700, size: 16, font });
const bytes = await (await pdf).save();
writeFileSync("test-contract.pdf", bytes);
console.log("Created test-contract.pdf");
}
createTestPdf();
Step 2: Complete Signing Workflow (TypeScript)
// documenso-hello.ts
import { Documenso } from "@documenso/sdk-typescript";
import { readFileSync } from "fs";
async function main() {
const client = new Documenso({
apiKey: process.env.DOCUMENSO_API_KEY!,
});
// 1. Create a document
const doc = await client.documents.createV0({
title: "Hello World Contract",
});
console.log(`Document created: ID ${doc.documentId}`);
// 2. Upload the PDF
const pdfBuffer = readFileSync("test-contract.pdf");
await client.documents.setFileV0(doc.documentId, {
file: new Blob([pdfBuffer], { type: "application/pdf" }),
});
// 3. Add a recipient (signer)
const recipient = await client.documentsRecipients.createV0(doc.documentId, {
email: "signer@example.com",
name: "Jane Doe",
role: "SIGNER",
});
console.log(`Recipient added: ${recipient.recipientId}`);
// 4. Add a signature field at specific coordinates
await client.documentsFields.createV0(doc.documentId, {
recipientId: recipient.recipientId,
type: "SIGNATURE",
pageNumber: 1,
pageX: 50, // X position (left offset, percentage-based 0-100)
pageY: 80, // Y position (top offset, percentage-based 0-100)
pageWidth: 30, // Width as percentage of page
pageHeight: 5, // Height as percentage of page
});
// 5. Send for signing
await client.documents.sendV0(doc.documentId);
console.log("Document sent for signing!");
}
main().catch(console.error);
Run: npx tsx documenso-hello.ts
Step 3: Python Equivalent
# documenso_hello.py
import os
from documenso_sdk_python import Documenso
client = Documenso(api_key=os.environ["DOCUMENSO_API_KEY"])
# Create document
doc = client.documents.create_v0(title="Hello World Contract")
print(f"Document created: ID {doc.document_id}")
# Upload PDF
with open("test-contract.pdf", "rb") as f:
client.documents.set_file_v0(doc.document_id, file=f.read())
# Add recipient
recipient = client.documents_recipients.create_v0(
doc.document_id,
email="signer@example.com",
name="Jane Doe",
role="SIGNER",
)
# Add signature field
client.documents_fields.create_v0(
doc.document_id,
recipient_id=recipient.recipient_id,
type="SIGNATURE",
page_number=1,
page_x=50,
page_y=80,
page_width=30,
page_height=5,
)
# Send for signing
client.documents.send_v0(doc.document_id)
print("Document sent for signing!")
Step 4: REST API Equivalent (curl)
# Create document
DOC=$(curl -s -X POST "https://app.documenso.com/api/v1/documents" \
-H "Authorization: Bearer $DOCUMENSO_API_KEY" \
-F "title=Hello World Contract" \
-F "file=@test-contract.pdf" | jq -r '.id')
# Add recipient
RECIP=$(curl -s -X POST "https://app.documenso.com/api/v1/documents/$DOC/recipients" \
-H "Authorization: Bearer $DOCUMENSO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"signer@example.com","name":"Jane Doe","role":"SIGNER"}' \
| jq -r '.id')
# Send
curl -s -X POST "https://app.documenso.com/api/v1/documents/$DOC/send" \
-H "Authorization: Bearer $DOCUMENSO_API_KEY"
Field Types Reference
| Type | Description | Common Use |
|---|---|---|
SIGNATURE | Electronic signature capture | Contract signing |
FREE_SIGNATURE | Hand-drawn / upload signature | Notarized documents |
INITIALS | Initials field | Page-by-page acknowledgment |
NAME | Auto-filled full name | Identity confirmation |
EMAIL | Auto-filled email address | Contact verification |
DATE | Date picker / auto-date | Timestamp of signing |
TEXT | Free text input | Custom fields (title, address) |
NUMBER | Numeric input | Amounts, quantities |
CHECKBOX | Boolean check | Terms acceptance |
DROPDOWN | Select from options | Role selection |
RADIO | Radio button group | Single-choice options |
Document Lifecycle
DRAFT → (send) → PENDING → (all sign) → COMPLETED
→ (reject) → REJECTED
→ (cancel) → CANCELLED
Error Handling
| Error | Cause | Solution |
|---|---|---|
401 Unauthorized | Invalid or missing API key | Verify DOCUMENSO_API_KEY is set |
File too large | PDF exceeds upload limit | Compress PDF or check plan limits |
Invalid field position | pageX/pageY out of range | Use 0-100 range (percentage-based) |
Recipient exists | Duplicate email on document | Update existing recipient instead |
Cannot send DRAFT | Missing required fields | Add at least one recipient + field |
Resources
Next Steps
Proceed to documenso-local-dev-loop for development workflow setup or documenso-core-workflow-a for production document management.
Signals
- GitHub stars
- 3k
- Forks
- 415
- Last commit
- Oct 2026
Ahel review
K1binfo
installs-packages
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
documenso-hello-world- Source
- github.com/jeremylongshore/tons-of-skills-marketplace
github.com/jeremylongshore/tons-of-skills-marketplace
Related picks
Skill · wshobson
The pick for Pythonpython-pro
Skill · jeffallan
The pick for Pythonsetup-ts-deep-modules
Skill · mattpocock
The pick for TypeScripttypescript-pro
Skill · jeffallan
The pick for TypeScriptgolden-pdf-ch
Skill · yusufkaraaslan
The pick for PDFpdf-co-automation
Skill · composio-community
The pick for PDF