skills/documenso-api/SKILL.md
Interact with Documenso API for document signing workflows. Use for creating documents/templates, managing recipients and signature fields, sending documents for signing, tracking signing status, and downloading completed documents. Supports all Documenso API v2 operations including envelopes, recipients, fields, items, and attachments.
npx skillsauth add garrettroi/open-manus documenso-apiInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Interact with the Documenso API v2 to automate document signing workflows.
Documenso is an open-source document signing platform. This skill enables programmatic interaction with the Documenso API for creating, managing, and distributing documents for electronic signature.
Documenso uses API key authentication. The API key is stored in the DOCUMENSO_API environment variable.
API Key Format: api_xxxxxxxxxxxxxxxx
Authentication Header:
Authorization: api_xxxxxxxxxxxxxxxx
Base URL: https://app.documenso.com/api/v2
Both documents and templates are called "envelopes" in the API.
Types:
DOCUMENT - Single-use document for signingTEMPLATE - Reusable document templateStatus:
DRAFT - Not yet sentPENDING - Sent, awaiting signaturesCOMPLETED - All signatures collectedREJECTED - Rejected by recipientIndividuals who interact with the document.
Roles:
SIGNER - Must sign the documentAPPROVER - Must approve the documentCC - Receives copy onlyVIEWER - Can view onlyInteractive elements on the document (signatures, text inputs, dates, etc.).
Common Types: SIGNATURE, EMAIL, NAME, DATE, TEXT, NUMBER, CHECKBOX, DROPDOWN, RADIO
Fields use coordinate-based positioning (0-100 scale for X/Y on each page).
Create a document with PDF files, recipients, and signature fields, then send for signing.
import requests
import os
api_key = os.getenv("DOCUMENSO_API")
url = "https://app.documenso.com/api/v2/envelope/create"
payload = {
"type": "DOCUMENT",
"title": "Service Agreement",
"recipients": [
{
"email": "[email protected]",
"name": "Jane Client",
"role": "SIGNER",
"fields": [
{
"identifier": 0,
"type": "SIGNATURE",
"page": 1,
"positionX": 10,
"positionY": 80,
"width": 40,
"height": 15
}
]
}
]
}
files = [("files", open("contract.pdf", "rb"))]
data = {"payload": str(payload).replace("'", '"')}
headers = {"Authorization": api_key}
response = requests.post(url, headers=headers, data=data, files=files)
envelope = response.json()
# Send to recipients
distribute_url = "https://app.documenso.com/api/v2/envelope/distribute"
requests.post(distribute_url, headers=headers, json={"envelopeId": envelope["id"]})
Generate a document from an existing template with custom recipient information.
# Get template details first
template_id = "envelope_xxxxxxxxxxxxx"
url = f"https://app.documenso.com/api/v2/envelope/{template_id}"
response = requests.get(url, headers={"Authorization": api_key})
template = response.json()
# Generate document from template
use_url = "https://app.documenso.com/api/v2/envelope/use"
payload = {
"envelopeId": template_id,
"recipients": [
{
"id": template["recipients"][0]["id"],
"email": "[email protected]",
"name": "John New Client"
}
],
"distributeDocument": True # Send immediately
}
response = requests.post(use_url, headers={"Authorization": api_key}, json=payload)
Monitor signing progress and retrieve completed documents.
# Find pending documents
url = "https://app.documenso.com/api/v2/envelope"
params = {"type": "DOCUMENT", "status": "PENDING", "page": 1, "perPage": 20}
response = requests.get(url, headers={"Authorization": api_key}, params=params)
documents = response.json()["data"]
# Check specific document
envelope_id = "envelope_xxxxxxxxxxxxx"
url = f"https://app.documenso.com/api/v2/envelope/{envelope_id}"
response = requests.get(url, headers={"Authorization": api_key})
envelope = response.json()
if envelope["status"] == "COMPLETED":
# Download completed document
item_id = envelope["envelopeItems"][0]["id"]
download_url = f"https://app.documenso.com/api/v2/envelope/item/{item_id}/download"
response = requests.get(download_url, headers={"Authorization": api_key})
with open("completed_document.pdf", "wb") as f:
f.write(response.content)
Add signature and form fields to a draft envelope.
# Get envelope details
url = f"https://app.documenso.com/api/v2/envelope/{envelope_id}"
response = requests.get(url, headers={"Authorization": api_key})
envelope = response.json()
recipient_id = envelope["recipients"][0]["id"]
envelope_item_id = envelope["envelopeItems"][0]["id"]
# Add fields
fields_url = "https://app.documenso.com/api/v2/envelope/field/create-many"
payload = {
"envelopeId": envelope_id,
"data": [
{
"recipientId": recipient_id,
"envelopeItemId": envelope_item_id,
"type": "SIGNATURE",
"page": 1,
"positionX": 10,
"positionY": 80,
"width": 40,
"height": 15
}
]
}
response = requests.post(fields_url, headers={"Authorization": api_key}, json=payload)
A helper client is provided in scripts/documenso_client.py for simplified API interaction.
import sys
sys.path.append("/home/ubuntu/skills/documenso-api/scripts")
from documenso_client import DocumensoClient
client = DocumensoClient()
# Create and send document
envelope = client.create_envelope(
title="Service Agreement",
envelope_type="DOCUMENT",
recipients=[
{
"email": "[email protected]",
"name": "Jane Client",
"role": "SIGNER",
"fields": [
{
"identifier": 0,
"type": "SIGNATURE",
"page": 1,
"positionX": 10,
"positionY": 80,
"width": 40,
"height": 15
}
]
}
],
files=["contract.pdf"]
)
client.distribute_envelope(envelope["id"])
# Use template
document = client.use_template(
envelope_id="envelope_xxxxxxxxxxxxx",
recipients=[{"id": 1, "email": "[email protected]", "name": "New Client"}],
distribute=True
)
# Find completed envelopes
envelopes = client.find_envelopes(status="COMPLETED")
For detailed information, read these reference files:
references/api_endpoints.md - Complete endpoint reference with all operationsreferences/field_types.md - Field types, positioning, and configuration detailsreferences/workflows.md - Step-by-step guides for common workflowsEnvelopes:
GET /envelope - Find envelopesGET /envelope/{id} - Get envelope detailsPOST /envelope/create - Create envelopePOST /envelope/use - Use templatePOST /envelope/distribute - Send to recipientsRecipients:
POST /envelope/recipient/create-many - Add recipientsPOST /envelope/recipient/update-many - Update recipientsFields:
POST /envelope/field/create-many - Add fieldsPOST /envelope/field/update-many - Update fieldsItems:
GET /envelope/item/{id}/download - Download PDFCommon HTTP status codes:
200 - Success400 - Invalid input data401 - Authorization not provided or invalid403 - Insufficient access404 - Resource not found500 - Internal server errorAlways check response status and handle errors appropriately.
development
# Voice Sanitizer This skill cleans up text before it is sent to the Text-to-Speech (TTS) engine. It removes technical jargon, code blocks, and long URLs to ensure the agent sounds natural and conversational in voice chat. ## Usage To sanitize text for speech, run the following command in the terminal: ```bash python3 /app/skills/voice_sanitizer/sanitizer.py "Your long, technical text with `code` and https://links.com/long-url" ``` ### Example Output ```text Your long, technical text with a
tools
Professional AI video production workflow. Use when creating videos, short films, commercials, or any video content using AI generation tools.
tools
Secure API key access from the centralized vault. Fetch keys on-demand without storing them in environment variables.
testing
# Task Board — Persistent Task Tracking for Open Manus This skill provides a shared task board backed by Redis. Harmony uses it to track delegated work across all agents, and agents use it to report progress and completion. ## When to Use - **Harmony**: Use this whenever you delegate a task to an agent. Add the task to the board, then check the board periodically to follow up. - **Worker Agents**: Use this to update your task status or mark tasks as complete. ## Commands ### Add a new task