Hanzo Sign
Document signing and e-signature platform
Hanzo Sign
Hanzo Sign is a document signing platform for creating, sending, and managing legally binding electronic signatures. Built for teams that need secure, compliant e-signatures integrated with the Hanzo ecosystem.
Features
- PDF Signing: Upload and sign PDF documents with legally binding e-signatures
- Templates: Create reusable document templates with pre-defined signing fields
- Signing Fields: Text, signature, initials, date, checkbox, dropdown, and more
- Teams & Organizations: Multi-tenant workspace management
- Webhooks: Real-time notifications for signing events
- Per-Org OIDC: Organization-scoped SSO portals
- Hanzo IAM SSO: Single sign-on via Hanzo identity
Endpoints
| Environment | URL |
|---|---|
| Production | https://sign.hanzo.ai |
| API | https://sign.hanzo.ai/api/v1 |
Architecture
+---------------------------------------------------------------+
| HANZO SIGN |
+---------------------------------------------------------------+
| |
| +-----------------------+ +-------------------------------+ |
| | Documents | | Templates | |
| | +------+ +-------+ | | +--------+ +-------------+ | |
| | | PDF | | Fields| | | | Layout | | Variables | | |
| | +------+ +-------+ | | +--------+ +-------------+ | |
| +-----------------------+ +-------------------------------+ |
| |
| +-----------------------+ +-------------------------------+ |
| | Recipients | | Signing | |
| | +------+ +-------+ | | +--------+ +-------------+ | |
| | |Email | | Order | | | |Workflow| | Completion | | |
| | +------+ +-------+ | | +--------+ +-------------+ | |
| +-----------------------+ +-------------------------------+ |
| |
+---------------------------------------------------------------+Quick Start
Create a Document
Upload a PDF and add recipients:
const response = await fetch('https://sign.hanzo.ai/api/v1/documents', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiToken}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'Service Agreement',
recipients: [
{ email: 'signer@example.com', name: 'Jane Doe', role: 'SIGNER' },
{ email: 'cc@example.com', name: 'John Doe', role: 'CC' }
]
})
})Add Signing Fields
await fetch(`https://sign.hanzo.ai/api/v1/documents/${docId}/fields`, {
method: 'POST',
headers: { 'Authorization': `Bearer ${apiToken}` },
body: JSON.stringify({
fields: [
{ type: 'SIGNATURE', page: 1, x: 100, y: 500, width: 200, height: 50 },
{ type: 'DATE', page: 1, x: 350, y: 500, width: 150, height: 30 },
{ type: 'TEXT', page: 1, x: 100, y: 560, width: 300, height: 30 }
]
})
})Send for Signing
await fetch(`https://sign.hanzo.ai/api/v1/documents/${docId}/send`, {
method: 'POST',
headers: { 'Authorization': `Bearer ${apiToken}` }
})Field Types
| Type | Description |
|---|---|
SIGNATURE | Electronic signature |
INITIALS | Signer initials |
TEXT | Free text input |
DATE | Date picker |
CHECKBOX | Boolean checkbox |
DROPDOWN | Select from options |
NUMBER | Numeric input |
RADIO | Radio button group |
Webhooks
Configure Webhook
await fetch('https://sign.hanzo.ai/api/v1/webhooks', {
method: 'POST',
headers: { 'Authorization': `Bearer ${apiToken}` },
body: JSON.stringify({
url: 'https://myapp.com/webhooks/sign',
events: [
'DOCUMENT_SENT',
'DOCUMENT_SIGNED',
'DOCUMENT_COMPLETED'
]
})
})Webhook Events
| Event | Description |
|---|---|
DOCUMENT_CREATED | Document uploaded |
DOCUMENT_SENT | Sent for signing |
DOCUMENT_OPENED | Recipient opened document |
DOCUMENT_SIGNED | A recipient signed |
DOCUMENT_COMPLETED | All recipients signed |
DOCUMENT_REJECTED | Recipient rejected |
Authentication
Hanzo Sign supports multiple authentication methods:
- Hanzo IAM: SSO via
https://hanzo.id(recommended) - Google OAuth: Sign in with Google
- Email Magic Link: Passwordless email login
- Passkeys: WebAuthn/FIDO2 authentication
IAM Integration
# Environment variables
HANZO_IAM_URL=https://hanzo.id
HANZO_IAM_CLIENT_ID=app-sign
HANZO_IAM_CLIENT_SECRET=<from-kms>Self-Hosting
Docker
docker run -d \
--name hanzo-sign \
-p 3000:3000 \
-e DATABASE_URL=postgres://... \
-e HANZO_IAM_URL=https://hanzo.id \
-e HANZO_IAM_CLIENT_ID=app-sign \
ghcr.io/hanzoai/sign:latestEnvironment Variables
| Variable | Description |
|---|---|
DATABASE_URL | PostgreSQL connection string |
NEXT_PUBLIC_WEBAPP_URL | Public URL of the application |
HANZO_IAM_URL | Hanzo IAM server URL |
HANZO_IAM_CLIENT_ID | IAM application client ID |
HANZO_IAM_CLIENT_SECRET | IAM application client secret |
NEXT_PRIVATE_ENCRYPTION_KEY | Document encryption key |
NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY | Secondary encryption key |
NEXT_PRIVATE_SMTP_HOST | SMTP server host |
NEXT_PRIVATE_SMTP_PORT | SMTP server port |
API Reference
Documents
POST /api/v1/documents- Create documentGET /api/v1/documents- List documentsGET /api/v1/documents/:id- Get documentPOST /api/v1/documents/:id/send- Send for signingDELETE /api/v1/documents/:id- Delete document
Templates
POST /api/v1/templates- Create templateGET /api/v1/templates- List templatesPOST /api/v1/templates/:id/use- Create document from template
Recipients
POST /api/v1/documents/:id/recipients- Add recipientsDELETE /api/v1/documents/:id/recipients/:recipientId- Remove recipient
Next Steps
Secure document sharing and analytics
Equity management platform
Identity and access management
How is this guide?
Last updated on