n8n Integration
Integrate WPsigner with n8n for powerful, self-hosted workflow automation. Build complex document signing workflows with n8n’s visual editor while keeping all your data on your own infrastructure.
How It Works
Section titled “How It Works”WPsigner connects to n8n in two directions:
Incoming: WPsigner → Webhook → n8n Workflow → External AppOutgoing: External App → n8n Workflow → WPsigner REST API| Direction | n8n Node | Use Case |
|---|---|---|
| WPsigner → n8n | Webhook node | Trigger workflows when documents are signed, created, etc. |
| n8n → WPsigner | HTTP Request node | Create documents, send for signing, look up status |
Requirements
Section titled “Requirements”- WPsigner 1.3.0+ (webhooks) / 1.8.0+ (REST API)
- n8n instance — either self-hosted or n8n Cloud
- A WPsigner API key with Full permissions (for outgoing calls)
Part 1: Receiving WPsigner Events (Triggers)
Section titled “Part 1: Receiving WPsigner Events (Triggers)”This enables n8n to react when something happens in WPsigner.
Step 1: Add a Webhook Node
Section titled “Step 1: Add a Webhook Node”- Open your n8n editor
- Click + to add a new node
- Search for Webhook and select it
- Configure:
- HTTP Method:
POST - Path: Choose a custom path (e.g.
wpsigner-events)
- HTTP Method:
- Click Listen for test event (or Execute workflow in production mode)
- Copy the webhook URL shown (e.g.
https://your-n8n.com/webhook/wpsigner-events)
Step 2: Register the Webhook in WPsigner
Section titled “Step 2: Register the Webhook in WPsigner”- Go to WPsigner → More → Webhooks in your WordPress admin
- Click Add Webhook
- Fill in:
- Name:
n8n - Document Events - URL: Paste the n8n webhook URL from Step 1 (use the Production URL)
- Events: Select which events should trigger the workflow
- Secret (optional): Add an HMAC secret for signature verification
- Name:
- Click Save
Step 3: Test the Connection
Section titled “Step 3: Test the Connection”- In n8n, click Listen for test event on the Webhook node
- In WPsigner, create or sign a test document
- n8n should receive the webhook payload and display the data structure
- You can now add more nodes to process the data
Step 4: Add Processing Nodes
Section titled “Step 4: Add Processing Nodes”After the Webhook node, add any n8n node to process the data:
Common nodes:
- IF — Filter by event type
- Set — Transform/rename fields
- Slack — Send notifications
- Google Sheets — Log to spreadsheet
- HTTP Request — Call external APIs
- Email (SMTP) — Send custom emails
- Postgres / MySQL — Write to database
Part 2: Calling WPsigner API (Actions)
Section titled “Part 2: Calling WPsigner API (Actions)”This enables n8n to create documents, send for signing, and query status.
Step 1: Generate API Credentials
Section titled “Step 1: Generate API Credentials”- Go to WPsigner → Settings → API Keys
- Click Generate New Key
- Set Permissions to
Full - Copy the API Key and API Secret
Step 2: Store Credentials in n8n
Section titled “Step 2: Store Credentials in n8n”For reusability, store your WPsigner credentials in n8n:
- Go to Settings → Credentials in n8n
- Click Add Credential → Header Auth
- Add two header parameters:
- Name:
X-WPS-API-KEY→ Value: your API key - Name:
X-WPS-API-SECRET→ Value: your API secret
- Name:
- Save as
WPsigner API
Now you can reuse this credential in all HTTP Request nodes.
Step 3: Create a Document
Section titled “Step 3: Create a Document”Add an HTTP Request node:
| Setting | Value |
|---|---|
| Method | POST |
| URL | https://yoursite.com/wp-json/wpsigner/v1/documents |
| Authentication | Header Auth → WPsigner API |
| Body Content Type | JSON |
| Body | See below |
{ "title": "{{ $json.deal_name }} Agreement"}Step 4: Add a Signer
Section titled “Step 4: Add a Signer”Add another HTTP Request node:
| Setting | Value |
|---|---|
| Method | POST |
| URL | https://yoursite.com/wp-json/wpsigner/v1/documents/{{ $json.id }}/signers |
| Body | See below |
{ "name": "{{ $json.contact_name }}", "email": "{{ $json.contact_email }}", "role": "signer"}Step 5: Send for Signing
Section titled “Step 5: Send for Signing”Add a third HTTP Request node:
| Setting | Value |
|---|---|
| Method | POST |
| URL | https://yoursite.com/wp-json/wpsigner/v1/documents/{{ $node['Create Document'].json.id }}/send |
Example Workflows
Section titled “Example Workflows”Workflow 1: Document Signed → Slack + Google Sheets
Section titled “Workflow 1: Document Signed → Slack + Google Sheets”Log signed documents and notify your team simultaneously.
┌──────────┐ ┌────────┐ ┌──────────┐│ Webhook │───▶│ IF │───▶│ Slack ││ WPsigner │ │ event= │ │ Notify ││ │ │ signed │ └──────────┘│ │ │ │ ┌──────────┐│ │ │ │───▶│ Sheets │└──────────┘ └────────┘ │ Log Row │ └──────────┘IF node condition: {{ $json.event }} equals document.signed
Slack message:
📝 Document "{{ $json.data.document.title }}" signed by {{ $json.data.signer.name }} ({{ $json.data.signer.email }})Workflow 2: CRM Deal → Auto-Create Contract
Section titled “Workflow 2: CRM Deal → Auto-Create Contract”When a deal closes in your CRM, automatically generate and send a contract.
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐│ CRM │───▶│ Create │───▶│ Add │───▶│ Send ││ Trigger │ │ Document │ │ Signer │ │ Document │└──────────┘ └──────────┘ └──────────┘ └──────────┘Workflow 3: Document Completed → Database + Cloud Storage
Section titled “Workflow 3: Document Completed → Database + Cloud Storage”When all signers finish, archive the record.
┌──────────┐ ┌────────┐ ┌──────────┐│ Webhook │───▶│ IF │───▶│ Postgres ││ WPsigner │ │ event= │ │ INSERT ││ │ │ compl. │ └──────────┘│ │ │ │ ┌──────────┐│ │ │ │───▶│ S3 │└──────────┘ └────────┘ │ Upload │ └──────────┘Workflow 4: Scheduled Document Status Check
Section titled “Workflow 4: Scheduled Document Status Check”Run daily to find unsigned documents and send reminders.
┌──────────┐ ┌──────────┐ ┌────────┐ ┌──────────┐│ Cron │───▶│ HTTP │───▶│ IF │───▶│ Email ││ Daily │ │ GET │ │ status │ │ Reminder ││ 9:00AM │ │ /docs │ │ =sent │ │ │└──────────┘ └──────────┘ └────────┘ └──────────┘HTTP Request:
GET https://yoursite.com/wp-json/wpsigner/v1/documents?status=sent
IF condition: Filter documents older than 3 days
Available Events
Section titled “Available Events”Register these events when creating your webhook in WPsigner:
| Event | Triggered When |
|---|---|
document.created | New document is created |
document.sent | Document emails sent to signers |
document.viewed | Signer opens the signing page |
document.signed | Individual signer applies their signature |
document.completed | All signatures complete |
document.declined | Signer declines to sign |
document.expired | Document expires unsigned |
signer.reminded | Reminder sent to a signer |
Webhook Payload Structure
Section titled “Webhook Payload Structure”All events send data in this format:
{ "event": "document.signed", "timestamp": "2026-01-15T11:00:00-05:00", "data": { "document": { "id": 123, "title": "Service Agreement", "status": "sent", "created_at": "2026-01-15T10:30:00-05:00" }, "signer": { "id": 1, "name": "John Doe", "email": "john@example.com", "status": "signed", "signed_at": "2026-01-15T11:00:00-05:00" } }, "meta": { "site_url": "https://yourdomain.com", "site_name": "Your Site", "plugin_version": "1.8.0" }}API Endpoints Reference
Section titled “API Endpoints Reference”These are the WPsigner REST API endpoints you can call from n8n’s HTTP Request node:
| Endpoint | Method | Description |
|---|---|---|
/wp-json/wpsigner/v1/documents | GET | List all documents |
/wp-json/wpsigner/v1/documents | POST | Create a new document |
/wp-json/wpsigner/v1/documents/{id} | GET | Get document details |
/wp-json/wpsigner/v1/documents/{id}/signers | POST | Add a signer |
/wp-json/wpsigner/v1/documents/{id}/send | POST | Send for signing |
For the full API reference, see REST API Documentation.
Tips & Best Practices
Section titled “Tips & Best Practices”Credential Management
Section titled “Credential Management”- Store WPsigner API credentials as Header Auth credentials in n8n for reuse
- Never hardcode secrets in workflow expressions
- Use separate API keys for production vs. testing workflows
Error Handling
Section titled “Error Handling”- Add Error Trigger nodes to catch and log failures
- Use n8n’s built-in retry on fail option on HTTP Request nodes
- Set up a Slack/email notification for failed workflow executions
Performance
Section titled “Performance”- WPsigner API keys have configurable rate limits (default: 1000 req/hour)
- Use n8n’s Wait node between bulk operations
- If you see
429 Too Many Requests, increase the rate limit on your API key - For high-volume workflows, consider using n8n’s queue mode
Testing
Section titled “Testing”- Use n8n’s test URL during development
- Switch to the production URL when activating the workflow
- Test with a sample document before going live
- Monitor the first few executions for data mapping issues
Troubleshooting
Section titled “Troubleshooting”| Issue | Cause | Solution |
|---|---|---|
| Webhook not received | URL incorrect or workflow inactive | Verify the URL and ensure workflow is active (not just saved) |
| n8n shows “Waiting for webhook” | WPsigner hasn’t sent an event yet | Trigger an event (create/sign a document) or check webhook URL |
401 Unauthorized from API | Invalid API key or secret | Double-check X-WPS-API-KEY and X-WPS-API-SECRET headers |
403 Forbidden | Read-only API key | Generate a new key with Full permissions |
404 Not Found | Wrong endpoint URL | Verify the URL includes /wp-json/wpsigner/v1/ |
| Expressions not resolving | Wrong n8n expression syntax | Use {{ $json.field }} for current node data |
| Webhook data incomplete | Not all events selected | Check WPsigner → Webhooks and enable the needed events |
Self-Hosting Tips
Section titled “Self-Hosting Tips”If you’re self-hosting n8n:
- Ensure your n8n instance has a public URL or use a tunnel (ngrok, Cloudflare Tunnel)
- Set
WEBHOOK_URLenvironment variable to your public URL - Use
N8N_PROTOCOL=httpsfor secure webhook delivery - Consider using Docker with a reverse proxy (nginx/Caddy) for production
Next Steps
Section titled “Next Steps”- Make Integration — Hosted visual automation alternative
- Zapier Integration — Connect with 6,000+ apps
- API Overview — Full REST API documentation
- Google Drive Integration — Auto-backup signed documents