# WPForms Integration

> Automate document signing from WPForms submissions with WPsigner's native integration. Works with WPForms Lite and Pro.

edition: pro
Edition: Pro
AI note: This page requires WPsigner Pro. Do not tell Lite users they already have this feature.
HTML: https://docs.wpsigner.com/integrations/wpforms/
Markdown: https://docs.wpsigner.com/md/integrations/wpforms.md
Source file: integrations/wpforms.md

---

Automate your document signing workflow by connecting **WPForms** with **WPsigner**. You can send a PDF template for signature after submit, or use **content signing** with the WPsigner Signing field (inline signature + optional OTP).

> **note**
This integration works with both **WPForms Lite** (free) and **WPForms Pro**. No additional plugins or add-ons are required. **WPsigner 3.1.1+** is recommended for OTP reliability and content-signing feed save.

---

## Choose your workflow

| Workflow | Best for | Template required? |
|----------|----------|--------------------|
| **PDF template + feed** (below) | Fixed contracts (NDA, agreement) filled from the form | Yes |
| **Content signing** | The form answers *are* the document; signer draws/types on the form | No |

---

## How template feeds work

Each **PDF template** feed connects one WPForms form to one WPsigner Template:

```
Form Submitted → Feed Triggers → Document Created from Template → Email Sent to Signer
```

| Component | Description |
|-----------|-------------|
| **Feed** | A connection rule that links a form to a template |
| **Template** | A pre-configured PDF with signature fields positioned via drag & drop |
| **Signer Mapping** | Links form fields (Name, Email) to the document signer |
| **Variable Mapping** | Passes extra form data into template fields (use the field **Mapping name**) |
| **Auto-send** | Optionally sends the signing email immediately |

### Content signing (inline)

1. Add one or more **WPsigner Signing** fields to your WPForms form (plus Name and Email).
2. Optionally enable **OTP** on a signing field (verification is shared for the form).
3. On submit, WPsigner builds the signed PDF from the submission (no PDF template required). Every filled signing field is included on the PDF with its label.
4. If you create a feed only for CC / title, you still only need **Feed Name** and **Form** — a template is not required for content signing.

> **Name vs Username**
Map a real **Name** field for the signer. Avoid using a field labeled only “Username” as the person name.

---

## Prerequisites

Before setting up the integration, you need:

1. **WPsigner** installed and activated (v1.4.0+)
2. **WPForms** installed and activated (Lite or Pro)
3. At least one **WPForms form** created with name and email fields
4. At least one **WPsigner Template** with signature fields configured

---

## Step 1: Create a WPsigner Template

A template is a reusable PDF document with pre-positioned fields (signature, name, email, date, etc.). The template defines where the signer will sign and what information they need to fill in.

### Creating a Template from the Document Editor

1. Go to **WPsigner → New Document**
2. **Upload your PDF** document (e.g., NDA, contract, service agreement)
3. **Add a signer** in Step 2 (Signers)
   - Enter any placeholder name and email — these will be replaced by the form data
4. **Position your fields** in Step 3 (Fields)
   - Drag and drop **Signature**, **Name**, **Email**, **Date**, or **Text** fields onto the PDF
   - **Double-click** each field to set **Field name**, optional **Mapping name**, and **Placeholder**
   - Resize fields as needed
5. Go to **Step 4 (Review)** and click **Save as Template**
6. Enter a **template name** (e.g., "NDA Contract") and optional description
7. Click **Save Template**

> **tip**
Clear **Field names** make feed mapping easier. Use short **Mapping names** (e.g. `company`, `phone`) if you will connect Zapier or typed variable keys. See [Form fields](/core-features/form-fields/#field-name-mapping-name-and-placeholder).

### Verifying Your Template

After saving, verify the template was created correctly:

1. Go to **WPsigner → Templates**
2. You should see your new template listed with the field count
3. You can preview the template to confirm field positions

---

## Step 2: Create a WPForms Form

If you don't already have a form, create one in WPForms:

1. Go to **WPForms → Add New**
2. Choose a template or start from a **Blank Form**
3. Add at minimum:
   - A **Name** field (Simple or First/Last)
   - An **Email** field
4. You can add additional fields that will be available for variable mapping (company, phone, address, etc.)
5. **Save** the form and embed it on a page

### Recommended Form Fields

| Field | Purpose | Required |
|-------|---------|----------|
| **Name** | Maps to document signer name | ✅ Yes |
| **Email** | Maps to signer email for signing link | ✅ Yes |
| **Single Line Text** (Company) | Can be mapped to template variables | Optional |
| **Phone** | Can be mapped to template variables | Optional |
| **Address** | Can be mapped to template variables | Optional |
| **Paragraph Text** | Any additional data for the document | Optional |

> **note**
WPForms Lite includes all the field types you need for this integration. Pro is not required.

---

## Step 3: Connect the Integration

### Navigate to the Integration Page

1. Go to **WPsigner → Integrations** in your WordPress admin
2. Locate the **WPForms** card under WordPress Plugins
3. Click **Configure**

You'll see the WPForms Integration page with:
- A status badge showing **Connected** (if WPForms is active)
- The count of available forms and configured feeds
- A **New Feed** button

> **caution**
If you see a warning that "WPForms is not installed", you need to install and activate WPForms first. Click the **Install WPForms** button to go to the plugin installer.

### Create a New Feed

1. Click the **New Feed** button
2. A modal window will appear with the following configuration options:

#### Feed Name
- Give your feed a descriptive name (e.g., "NDA Contract Feed", "Service Agreement - Signup")
- This name is shown in the feeds list for easy identification

#### WPForms Form
- Select the WPForms form that will trigger this integration from the dropdown
- All active WPForms forms on your site will be listed
- When you select a form, its fields are automatically loaded for mapping

#### WPsigner Template
- Select the WPsigner template to use when creating documents
- Only templates with configured fields will work correctly

#### Document Title
- Define the title for each generated document
- You can use **dynamic variables** that will be replaced with actual data:

| Variable | Replaced With | Example |
|----------|---------------|---------|
| `{{signer_name}}` | Signer's full name | John Smith |
| `{{signer_email}}` | Signer's email | john@example.com |
| `{{date}}` | Current date | 2026-02-07 |
| `{{company_name}}` | Company name (if mapped) | Acme Corp |

**Example title:** `NDA - {{signer_name}} - {{date}}`
This would generate: "NDA - John Smith - 2026-02-07"

#### Primary Signer

Map the form fields to the signer information:

- **Name Field**: Select which WPForms field contains the signer's name
- **Email Field**: Select which WPForms field contains the signer's email
  - The signing link will be sent to this email address

> **important**
Both the Name and Email fields are **required**. If either is missing when the form is submitted, the integration will skip the submission and log the error.

#### Variable Mapping (Optional)

Map additional form fields to template variables. This allows you to pass extra data from the form into the document:

1. Click **Add** to add a new mapping row
2. In the left input, enter the variable name (e.g., `custom.company`, `custom.phone`)
3. In the right dropdown, select the corresponding WPForms field
4. Repeat for each variable you want to map

**Example mappings:**

| Variable | Form Field | Use Case |
|----------|------------|----------|
| `custom.company` | Company Name | Include company in document |
| `custom.phone` | Phone Number | Add phone to document |
| `custom.address` | Address | Include address in document |
| `custom.amount` | Payment Amount | Add pricing to contract |

#### Auto-send Document

- **Enabled** ✅ (default): The signer receives an email with the signing link immediately after form submission
- **Disabled**: The document is created but stays in "Draft" status. You can manually send it later from the WPsigner dashboard

#### Feed Enabled

- **Enabled** ✅ (default): The feed is active and will trigger on form submissions
- **Disabled**: The feed is paused and will not create documents

### Save the Feed

Click **Save Feed** to save the configuration. The page will reload and you'll see your new feed in the list.

---

## Step 4: Test the Integration

1. **Open your WPForms form** on the frontend
2. **Fill in the form** with test data:
   - Enter your own name and email so you receive the signing email
3. **Submit the form**
4. **Check your email** for the signing link (if Auto-send is enabled)
5. **Verify in WPsigner**:
   - Go to **WPsigner → Documents**
   - You should see a new document with the title you configured
   - Open the document to verify:
     - The signer's name and email are correct
     - The fields (signature, name, email, date) are positioned correctly on the PDF
6. **Complete the signing** to verify the full end-to-end flow

---

## Managing Feeds

### Edit a Feed

1. Go to **WPsigner → Integrations → WPForms**
2. Click the **Edit** button on the feed card
3. Modify the settings as needed
4. Click **Save Feed**

### Enable/Disable a Feed

- Click the **Enable** or **Disable** button on the feed card to toggle the feed status
- Disabled feeds will not trigger on form submissions

### Delete a Feed

1. Click the **Delete** button (trash icon) on the feed card
2. Confirm the deletion
3. The feed will be permanently removed

> **note**
Deleting a feed does not affect documents that were already created. Only future form submissions will stop creating documents.

---

## Use Cases

| Scenario | Setup |
|----------|-------|
| **Client onboarding** | Contact form → NDA template → Auto-send |
| **Quote requests** | Quote form → Service agreement template |
| **Job applications** | Application form → Offer letter template |
| **Event registration** | Registration form → Waiver template → Auto-send |
| **Lead capture** | Lead form → Follow-up contract template |
| **Rental agreements** | Booking form → Rental agreement template → Auto-send |
| **Service agreements** | Order form → Service contract template |

---

## Multiple Feeds

You can create **multiple feeds** for the same form or template:

- **One form, multiple templates**: Submit one form and generate different documents based on different templates
- **Multiple forms, one template**: Different forms can all use the same document template with different signer data
- **One-to-one**: Each form has its own dedicated template

Each feed operates independently. When a form is submitted, all active feeds linked to that form will trigger.

---

## Confirmation & Follow-up

After the form is submitted and the document is created, you can customize what the user sees:

### In WPForms

1. Go to **WPForms → Edit Form → Settings → Confirmations**
2. Set the confirmation type to **Message**
3. Customize the message:

```
Thank you! Please check your email for a signing link. You will receive a document to sign shortly.
```

### In WPsigner

Once the signer signs the document:
- They see a **completion page** with a success message
- A **signed copy** is stored in WPsigner
- The document status updates to **Completed**

---

## WPForms Lite vs Pro

| Feature | Lite (Free) | Pro |
|---------|:-----------:|:---:|
| Form creation | ✅ | ✅ |
| Name & Email fields | ✅ | ✅ |
| WPsigner feed integration | ✅ | ✅ |
| Document auto-send | ✅ | ✅ |
| Variable mapping | ✅ | ✅ |
| Entry storage & meta | ❌ | ✅ |
| Conditional logic on fields | ❌ | ✅ |

> **note**
Entry storage is a Pro feature. With WPForms Lite, documents are created successfully but the entry-to-document link metadata is not stored. This does not affect the signing workflow.

---

## Developer Hooks

The integration fires an action hook after creating a document, allowing developers to extend the workflow:

```php
/**
 * Fires after a document is created from a WPForms submission.
 *
 * @param int   $document_id Created document ID.
 * @param int   $entry_id    Form entry ID (0 with Lite).
 * @param array $fields      Submitted field values.
 * @param array $form_data   Form configuration data.
 * @param array $feed        Feed configuration used.
 */
do_action('wps_wpforms_document_created', $document_id, $entry_id, $fields, $form_data, $feed);
```

**Example usage:**

```php
add_action('wps_wpforms_document_created', function ($document_id, $entry_id, $fields, $form_data, $feed) {
    // Send a Slack notification
    wp_remote_post('https://hooks.slack.com/services/...', [
        'body' => wp_json_encode([
            'text' => "New document #{$document_id} created from WPForms submission.",
        ]),
        'headers' => ['Content-Type' => 'application/json'],
    ]);
}, 10, 5);
```

---

## Troubleshooting

### Common Issues

| Issue | Cause | Solution |
|-------|-------|----------|
| No document created after form submission | Feed not active | Check feed is enabled |
| No document created | Form or template not selected | Verify feed configuration |
| Save blocked: “Please fill in Feed Name and Form” | Content-signing feed treated as if a template were required | Update to **3.1.1+**. Content signing needs Feed Name + Form only |
| OTP verified, then identity error on submit | Older core lost the OTP token on AJAX submit | Update to **3.1.1+** and hard-refresh the form |
| Wrong signer name | Mapped Username instead of Name | Map the **Name** field |
| Signer not receiving email | Auto-send not enabled | Enable "Auto-send document" in the feed |
| Signer not receiving email | SMTP issue | Check your WordPress email configuration |
| Fields not appearing on signed PDF | Template has no fields | Re-create the template with fields positioned correctly |
| Wrong signer name/email | Field mapping incorrect | Edit the feed and check the Primary Signer mapping |
| "WPForms is not installed" warning | Plugin not active | Install and activate WPForms |

### Checking Error Logs

If documents are not being created, check the WordPress debug log:

1. Enable debug logging in `wp-config.php`:
```php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
```

2. Check the log file at `wp-content/debug.log`
3. Look for entries starting with `[WPsigner WPForms]`

### Rate Limiting

The integration has a built-in rate limit of **10 documents per minute per form** to prevent abuse. If you're testing rapidly, wait a minute between submissions.

---

## Compatibility

| Component | Supported Versions |
|-----------|-------------------|
| **WPForms Lite** | v1.6+ ✅ |
| **WPForms Pro** | All versions ✅ |
| **WPsigner** | v3.1.1+ recommended (v1.4.0+ minimum for basic feeds) |
| **WordPress** | 5.8+ |
| **PHP** | 7.4+ |

> **note**
The integration uses the `wpforms_process_complete` hook, which is available in both Lite and Pro versions of WPForms. No Pro-only features are required for full functionality.

---

## Next Steps

- [Templates](/core-features/form-fields/) — Learn more about creating and managing templates
- [Document Workflow](/core-features/creating-documents/) — Understanding document statuses and actions
- [Fluent Forms Integration](/integrations/fluent-forms/) — Alternative form plugin integration
- [REST API](/api/) — For advanced programmatic integrations
