Official multi-language SDKs for document generation, digital signatures, and AI-powered workflows
Have an AI coding agent (Claude Code, Cursor, Copilot, Codex, Gemini CLI, OpenCode) install the right TurboDocx SDK for your language, configure your env, write working route handlers, and wire them into your app:
npx skills add TurboDocx/quickstartThen run /turbodocx-sdk inside your agent — or one of the focused shortcuts:
| Shortcut | What it scaffolds |
|---|---|
/turbodocx-sdk turbosign |
Send documents for e-signature, check status, download signed PDF |
/turbodocx-sdk deliverable |
Generate documents from templates with variable substitution |
/turbodocx-sdk turbopartner |
Provision and manage customer organizations (partner accounts) |
/turbodocx-sdk turbowebhooks |
Subscribe to signature.document.completed events + verify HMAC |
The skill auto-detects your framework (Express, NestJS, Next.js, FastAPI, Django, Spring Boot, Laravel, Gin, …) and follows your existing project conventions. Source: github.com/TurboDocx/quickstart.
|
Battle-tested infrastructure processing thousands of documents daily. Enterprise-grade reliability with 99.9% uptime SLA. Average API response time under 200ms. Optimized for high-throughput document workflows. End-to-end encryption. Your documents never stored longer than necessary. |
Built from the ground up for AI agents and automation. Perfect for n8n, Zapier, Make, and custom integrations. Legally binding digital signatures with full audit trails. DocuSign alternative at a fraction of the cost. Comprehensive SDKs, detailed documentation, and responsive support. Ship faster with less friction. |
Install the TurboDocx SDKs in a single prompt using the TurboDocx Quickstart Agent Skill — works with Claude Code, GitHub Copilot, Cursor, OpenCode, and other AI coding agents.
npx skills add TurboDocx/quickstartTwo skills are included:
| Skill | What it does |
|---|---|
turbodocx-sdk |
Scaffolds document generation in your project — picks the right SDK for your language, installs it, and writes a working code example |
turbodocx-html-to-docx |
Installs and configures @turbodocx/html-to-docx (open-source HTML → DOCX converter) |
Prefer manual install? Jump straight to Available SDKs below.
| Language | Package | Install | Registry |
|---|---|---|---|
| @turbodocx/sdk | npm install @turbodocx/sdk |
||
| turbodocx-sdk | pip install turbodocx-sdk |
||
| turbodocx/sdk | composer require turbodocx/sdk |
||
| turbodocx-sdk | go get github.com/TurboDocx/SDK/packages/go-sdk |
||
| com.turbodocx:turbodocx-sdk | implementation 'com.turbodocx:turbodocx-sdk:0.1.4' |
| Language | Status |
|---|---|
| 🚧 In Progress | |
| 🚧 In Progress | |
| 🚧 In Progress |
Get up and running in under 2 minutes:
Sign up at turbodocx.com and grab your API key from the dashboard.
JavaScript / TypeScript
npm install @turbodocx/sdk
# or
yarn add @turbodocx/sdk
# or
pnpm add @turbodocx/sdkPython
pip install turbodocx-sdk
# or
poetry add turbodocx-sdkGo
go get github.com/turbodocx/sdkPHP
composer require turbodocx/sdkJava
<dependency>
<groupId>com.turbodocx</groupId>
<artifactId>turbodocx-sdk</artifactId>
<version>0.1.4</version>
</dependency>import { TurboSign } from '@turbodocx/sdk';
// Configure once
TurboSign.configure({ apiKey: process.env.TURBODOCX_API_KEY });
// Send for signature
const { documentId, recipients } = await TurboSign.prepareForSigningSingle({
fileLink: 'https://example.com/contract.pdf',
recipients: [
{ name: 'John Doe', email: 'john@example.com', order: 1 }
],
fields: [
{ type: 'signature', page: 1, x: 100, y: 500, width: 200, height: 50, recipientOrder: 1 }
]
});
console.log(`✅ Document sent! Sign URL: ${recipients[0].signUrl}`);Send documents for legally-binding eSignatures with full audit trails.
| Method | Description |
|---|---|
prepareForReview() |
Upload document for preview without sending emails |
prepareForSigningSingle() |
Upload and immediately send signature requests |
getStatus() |
Check document and recipient signing status |
download() |
Download the completed signed document |
void() |
Cancel/void a signature request |
resend() |
Resend signature request emails |
Generate documents from templates with dynamic data.
Specify exact positions for signature fields using page coordinates:
const result = await TurboSign.prepareForSigningSingle({
fileLink: 'https://example.com/contract.pdf',
recipients: [
{ name: 'Alice Smith', email: 'alice@example.com', order: 1 },
{ name: 'Bob Johnson', email: 'bob@example.com', order: 2 }
],
fields: [
// Alice's signature and date on page 1
{ type: 'signature', page: 1, x: 100, y: 650, width: 200, height: 50, recipientOrder: 1 },
{ type: 'date', page: 1, x: 320, y: 650, width: 100, height: 30, recipientOrder: 1 },
// Bob's signature and date on page 1
{ type: 'signature', page: 1, x: 100, y: 720, width: 200, height: 50, recipientOrder: 2 },
{ type: 'date', page: 1, x: 320, y: 720, width: 100, height: 30, recipientOrder: 2 },
// Initials on page 2
{ type: 'initials', page: 2, x: 500, y: 750, width: 60, height: 30, recipientOrder: 1 },
{ type: 'initials', page: 2, x: 500, y: 780, width: 60, height: 30, recipientOrder: 2 }
],
documentName: 'Service Agreement',
senderName: 'Acme Corp',
senderEmail: 'contracts@acme.com'
});Use text anchors in your PDF to automatically position signature fields:
const result = await TurboSign.prepareForSigningSingle({
fileLink: 'https://example.com/contract-with-placeholders.pdf',
recipients: [
{ name: 'Alice Smith', email: 'alice@example.com', order: 1 },
{ name: 'Bob Johnson', email: 'bob@example.com', order: 2 }
],
fields: [
// Fields anchored to text markers in the PDF
{ type: 'signature', anchor: '{SIGNATURE_ALICE}', width: 200, height: 50, recipientOrder: 1 },
{ type: 'date', anchor: '{DATE_ALICE}', width: 100, height: 30, recipientOrder: 1 },
{ type: 'signature', anchor: '{SIGNATURE_BOB}', width: 200, height: 50, recipientOrder: 2 },
{ type: 'date', anchor: '{DATE_BOB}', width: 100, height: 30, recipientOrder: 2 },
// Text fields for additional info
{ type: 'text', anchor: '{TITLE_ALICE}', width: 150, height: 25, recipientOrder: 1 },
{ type: 'text', anchor: '{TITLE_BOB}', width: 150, height: 25, recipientOrder: 2 }
]
});Tip: Template-based fields are ideal when your PDF layout may change. Add text markers like
{SIGNATURE_1}to your document, and the signature fields will automatically align to them.
import { TurboSign } from '@turbodocx/sdk';
TurboSign.configure({ apiKey: process.env.TURBODOCX_API_KEY });
// 1. Send document for signature
const { documentId } = await TurboSign.prepareForSigningSingle({
fileLink: 'https://example.com/contract.pdf',
recipients: [
{ name: 'Alice', email: 'alice@example.com', order: 1 },
{ name: 'Bob', email: 'bob@example.com', order: 2 }
],
fields: [
{ type: 'signature', page: 1, x: 100, y: 500, width: 200, height: 50, recipientOrder: 1 },
{ type: 'signature', page: 1, x: 100, y: 600, width: 200, height: 50, recipientOrder: 2 }
]
});
console.log(`Document ID: ${documentId}`);
// 2. Check status
const status = await TurboSign.getStatus(documentId);
console.log(`Status: ${status.status}`); // 'pending', 'completed', 'voided'
for (const recipient of status.recipients) {
console.log(` ${recipient.name}: ${recipient.status}`);
}
// 3. Download when complete
if (status.status === 'completed') {
const signedPdf = await TurboSign.download(documentId);
// Save to file, upload to S3, etc.
}
// 4. Void if needed
await TurboSign.void(documentId, 'Contract terms changed');
// 5. Resend to specific recipients
await TurboSign.resend(documentId, ['recipient-uuid']);| Type | Description |
|---|---|
signature |
Signature field (draw or type) |
initials |
Initials field |
text |
Free-form text input |
date |
Date stamp |
checkbox |
Checkbox / agreement |
full_name |
Full name |
first_name |
First name |
last_name |
Last name |
email |
Email address |
title |
Job title |
company |
Company name |
| SDK | Minimum Version |
|---|---|
| JavaScript/TypeScript | Node.js 16+ |
| Python | Python 3.9+ |
| PHP | PHP 8.1+ |
| Go | Go 1.21+ |
| Java | Java 11+ |
We love contributions! Whether it's bug fixes, new features, or documentation improvements.
# Clone the repo
git clone https://github.com/TurboDocx/SDK.git
# Navigate to your SDK
cd SDK/packages/<sdk-name>
# Follow SDK-specific setup in its READMESee CONTRIBUTING.md for detailed guidelines.
We're looking for community maintainers for each SDK. Interested? Open an issue or reach out on Discord.
|
Documentation |
Discord |
GitHub Issues |
MIT License — see LICENSE for details.

