# Formidable Forms

> Connect Formidable Forms with WPsigner for content signing, PDF template feeds, E2Pdf, OTP, CC emails, and signed-PDF merge tags — the same workflows as Fluent Forms.

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/formidable-forms/
Markdown: https://docs.wpsigner.com/md/integrations/formidable-forms.md
Source file: integrations/formidable-forms.md

---

Automate document signing from **Formidable Forms** submissions with **WPsigner**. You can generate a PDF from the form answers (content signing), fill a fixed WPsigner PDF template, or let **E2Pdf** build the PDF from the entry — then open the signing page immediately or email the signing request.

**Admin path:** **WPsigner → Integrations → Formidable Forms**

> **note**
Works with **Formidable Forms Lite** and **Formidable Forms Pro**. No extra Formidable add-on is required. The native Pro **Signature** field is also accepted for content signing. Requires **WPsigner 3.2.12+**.

---

## Choose your workflow

| Workflow | Best for | Template type | Where you configure it | Feed required? |
|----------|----------|---------------|------------------------|----------------|
| **[Content signing](#content-signing)** | Applications, registrations, agreements built from form answers | None (PDF built from the submission) | Form editor (+ optional feed for CC / title) | No (optional) |
| **[PDF template + feed](#pdf-template--feed)** | Fixed PDF contracts (NDA, lease, offer letter) | WPsigner PDF template | **WPsigner → Integrations → Formidable Forms** | Yes |
| **[E2Pdf + feed](#e2pdf--feed)** | PDFs already designed in E2Pdf for a Formidable form | E2Pdf template (Formidable) | **WPsigner → Integrations → Formidable Forms** (E2Pdf plugin required) | Yes |

> **tip**
- Need a signed PDF of the **form answers** with an inline signature? Use **content signing**.
- Need a **pre-designed PDF** with mapped fields in WPsigner? Use **PDF template + feed**.
- Already filling PDFs with **E2Pdf**? Use **E2Pdf + feed** so WPsigner only handles signing.

---

## How template feeds work

```
Form submitted
  → Feed runs
  → Document created from template
  → Mapped fields prefilled (signature / initials stay empty)
  → After submit:
       • Open signing page immediately  → redirect to /insigner/{token} (no signing email)
       • Send signing request by email → email with signing link (no browser redirect)
```

| Piece | Description |
|-------|-------------|
| **Feed** | Rule that links one Formidable Form to one template |
| **Primary signer** | First name / full name, optional last name, and email from the form |
| **Field mapping** | Dropdown → dropdown: template field ↔ Formidable field |
| **After submit** | Open for signing **or** email the signing request |
| **Prefill** | Text/date/name/company/etc. filled from the submission; **signature** and **initials** are never prefilled |

---

## Content signing

Generate a signed PDF from the **form submission content** plus an inline signature. No PDF template upload is required.

### How it works

```
Form submitted → PDF built from answers → Signature applied → Audit trail + Certificate of Completion
```

### Setup

1. Install **Formidable Forms** and **WPsigner** (**3.2.12+**).
2. Edit your Formidable Form and add at least:
   - A **Name** field
   - An **Email** field
   - The **WPsigner Signing** field (Draw / Type / Upload), or the Formidable Pro **Signature** field
3. **Publish** the form.

On submit, WPsigner captures the signature(s) and form data, generates the signed PDF, and runs the normal completion flow. Formidable’s success message then shows a **Download Signed PDF** button.

The **WPsigner Signing** field must appear as a **draw / type / upload pad**, not a plain text box. On Formidable 6, WPsigner registers its own field type so Pro does not convert it to `text`. If you still see a text input, update to **3.2.12+** and hard-refresh the form.

> **Name vs Username**
Use a real **person name** field. If first and last name are **separate** fields, map **First name / full name** and **Last name** on the feed. If you use one combined Name field, map that field as first/full name and leave last name empty — WPsigner already joins First + Last. Do **not** rely on a field labeled only “Username” for the signer name — WPsigner treats that as a login-style field, not the signer’s legal name.

### Optional feed (CC emails / title)

A feed is **optional** for content signing. Create one only if you need:

- **CC emails** on the completion / signed-PDF copy (a form field and/or fixed addresses)
- A **custom document title**

Path: **WPsigner → Integrations → Formidable Forms → New Feed**

1. Select a form that includes the **WPsigner Signing** field (or a Pro Signature field).
2. Set **Feed Name**, the **Formidable Form**, and optional CC / document title.
3. To copy a form value into CC, set **CC email field** (see [CC emails](#cc-emails-optional) below).
4. Save the feed — you do **not** need to choose a PDF template for content signing.

> **note**
You do **not** pick a “Signing field” in the feed UI. If the form contains **WPsigner Signing** (or a Pro Signature field), WPsigner auto-detects it and uses content-signing mode unless you choose a WPsigner template. That dropdown stays visible so you can switch to a template feed.

If the feed is misconfigured but the form still has a Signing field, WPsigner falls back to automatic content signing.

### Submission timing

OTP is checked **before** Formidable stores the entry (`frm_validate_entry`). Content signing runs **after** the entry is created (`frm_after_create_entry`). If PDF generation fails after a valid submit, check `debug.log` — the Formidable entry may already exist.

---

## WPsigner Signing field + OTP

The **WPsigner Signing** field is Draw / Type / Upload on the form (Lite and Pro). It can require a one-time password before submit.

### Enable OTP

1. Edit the Formidable Form.
2. Select the **WPsigner Signing** field.
3. Set **OTP verification** to **Enabled**.
4. Choose **OTP delivery method**:

| Method | Requirements |
|--------|--------------|
| Email | Email field on the form |
| SMS | Phone field + [Twilio](/integrations/twilio/) configured |
| Email + SMS | Both email and phone fields |
| WhatsApp | Phone field + [WhatsApp](/integrations/whatsapp/) configured |

5. Save and publish.

### Signer experience

1. User fills the form and provides a signature.
2. On submit, an OTP modal appears.
3. User enters the 6-digit code.
4. After **Identity verified**, the form submits and the signed PDF is created.

Submit stays blocked until OTP succeeds. Use E.164 phone format for SMS/WhatsApp.

---

## Download the signed PDF

After **content signing**, WPsigner appends a **Download Signed PDF** button to Formidable’s confirmation message. No merge tag is required on the success text.

Use tags when you want the link in **emails**, a custom confirmation, or a thank-you page:

| Tag | Output |
|-----|--------|
| `[wps_signed_pdf_url]` | Direct URL to download the signed PDF |
| `{inSigner:signed_pdf_url}` | Same URL (Fluent-style alias) |
| `{inSigner:download_button}` / `[wps_download_button]` | HTML button linking to the signed PDF |

Example email body:

```html
<p>Your signed document is ready:</p>
{inSigner:download_button}
```

Tags resolve after the signed PDF exists. If Formidable’s confirmation is a **redirect** to another URL (not the signing page), add a tag on that page or rely on the email.

---

## PDF template + feed

Use this when you have a **fixed PDF** (WPsigner template) and want form data mapped into fields, then either open the signing UI or email the request.

Admin page: **WPsigner → Integrations → Formidable Forms**.

### Prerequisites

1. **WPsigner** **3.2.12+**
2. **Formidable Forms** Lite or Pro
3. A published Formidable Form with name + email fields
4. A **WPsigner Template** with fields placed on the PDF (signature, name, date, text, etc.)

### Step 1 — Create a WPsigner PDF template

1. Go to **WPsigner → New Document**.
2. Upload your PDF.
3. Add a signer (placeholder name/email is fine; the form will replace them).
4. Place fields (**Signature**, **Name**, **Email**, **Date**, **Text**, etc.).
5. On Review, **Save as Template**.

> **tip**
**Double-click** each PDF field and set a clear **Field name**. Those labels appear in the feed’s **WPsigner template** dropdown. Optionally set a **Mapping name** for Zapier/API — see [Form fields](/core-features/form-fields/#field-name-mapping-name-and-placeholder).

### Step 2 — Create the Formidable Form

Minimum fields:

| Field | Required | Purpose |
|-------|----------|---------|
| Name (or First name) | Yes | Primary signer first name or full name |
| Last name | Optional | Map this when first and last are independent fields |
| Email | Yes | Primary signer email / signing identity |
| Company, phone, text, etc. | Optional | Available in **Field mapping** |

Do **not** add the **WPsigner Signing** field if you want PDF template mode. If that field is present, WPsigner treats the form as content signing and skips the PDF template feed path.

### Step 3 — Create the feed

1. Go to **WPsigner → Integrations → Formidable Forms**.
2. Click **New Feed** (centered modal).
3. Configure:

#### Feed name

Internal label shown in the feeds list (e.g. `NDA — website form`).

#### Formidable Form

Published form that triggers the feed.

#### CC emails (optional) {#cc-emails-optional}

The signed-PDF / completion copy can go to extra addresses. Configure this on the **same feed** used for content signing or for a PDF template.

| Setting | Use when |
|---------|----------|
| **CC email field** | The address comes from a Formidable field |
| **Additional CC emails** | Fixed addresses, comma-separated (`office@example.com, manager@example.com`) |

You can use both. On submit WPsigner reads the mapped field and adds the fixed list. The field may contain several addresses separated by commas or semicolons. WPsigner does **not** parse Formidable shortcodes such as `[x]` in the **Additional CC emails** box — pick the field in the dropdown instead.

**Typical setup:**

1. Add an **Email** field to the form (label it something like “CC” if you want).
2. Open **WPsigner → Integrations → Formidable Forms →** the feed.
3. Set **CC email field** to that Email field.
4. Save the feed. Submit a test. The address in that field should receive the signed-PDF copy.

Leave both settings empty if you do not need CC.

#### WPsigner template

PDF template used to create the document.

#### Document title

Supports merge tags:

| Variable | Replaced with |
|----------|----------------|
| `{{signer_name}}` | Signer name from the form |
| `{{signer_email}}` | Signer email from the form |
| `{{date}}` | Current date |
| `{{company_name}}` | Company name when available |

Example: `NDA - {{signer_name}} - {{date}}`

#### Primary signer {#primary-signer}

| Control | Meaning |
|---------|---------|
| **First name / full name** | Formidable field for first name, or a combined Name field |
| **Last name (optional)** | Independent last-name field. Leave empty when the first mapping already has the full name |
| **Email field** | Formidable field for signer email |

First name / full name and email are required. Last name is optional. If the required values are empty or the email is invalid on submit, that feed run is skipped.

#### Additional signers {#additional-signers}

Use **Add** under **Additional Signers** for a second (or third) person on the same PDF. Each row needs a Name field and an Email field on the form.

CC emails are copies, not signers.

**Signing order**

| Mode | What happens |
|------|----------------|
| **Sequential** (default when you add extra signers) | Signer 1 is invited first. When they finish, WPsigner emails signer 2. The document is completed only after everyone has signed. |
| **Parallel** | Everyone is invited at once. If **Open signing page immediately** is on, extra signers still get their email. |

#### Field mapping

Map **template fields → form fields** with **two dropdowns** (no typing `custom.*`):

| Side | Source | What you see |
|------|--------|--------------|
| Left | **WPsigner template** | Human-readable field label |
| Right | **Formidable Forms** | Form field labels, including Name (First) / (Middle) / (Last) |

Rules:

- Click **Add** for each row.
- **Signature** and **initials** template fields are **not** listed and are **never** prefilled — the signer completes them on the signing page.
- Values from the submission are written into the created document before delivery.

#### After submit

| Option | What happens |
|--------|----------------|
| **Open signing page immediately** | Document is set to **sent**, fields are prefilled. The browser opens the **first** signer’s page. Sequential extra signers are emailed after the previous person finishes; parallel extra signers are emailed now. |
| **Send signing request by email** | Document is set to **sent**. Sequential: only signer 1 is emailed now. Parallel: every signer is emailed. **No** browser redirect. |

#### Feed enabled

When disabled, the feed does not run on submissions.

4. Click **Save Feed**.

### Step 4 — Test

**Open for signing**

1. Submit the form on the front end.
2. You should be redirected to the WPsigner signing page.
3. Prefillable fields (name, date, text, etc.) should already be filled.
4. Complete **Signature** (and initials if present).

**Email**

1. Submit the form.
2. Check the signer inbox for the signing request.
3. Open the link and confirm prefilled fields + empty signature.

Also verify under **WPsigner → Documents** that the new document exists with status **sent**.

---

## E2Pdf + feed {#e2pdf--feed}

Use this when the PDF is already designed in **[E2Pdf](https://e2pdf.com/)** for a Formidable form. E2Pdf fills the file from the entry. WPsigner then stores it, adds a signature box per signer, and opens or emails the signing request.

Requires **WPsigner 3.2.25+** and an active **E2Pdf** plugin. The **E2Pdf template** dropdown is hidden when E2Pdf is not installed. Saved E2Pdf feeds show an **E2Pdf** tag on the card. **Edit** reopens the current form, template, signers, boxes, and After submit settings.

### How it works

```
Form submitted
  → E2Pdf generates the filled PDF
  → WPsigner stores the file and creates a document
  → Signature box added (one per signer)
  → After submit: open signing page or email the request
```

Pick **either** an E2Pdf template **or** a WPsigner PDF template on the same feed — not both. Field mapping is not used in this mode; E2Pdf already maps Formidable fields.

### Setup

1. Install and activate **E2Pdf**. Create a template whose source is that Formidable form.
2. Go to **WPsigner → Integrations → Formidable Forms → New Feed**.
3. Select the form, signer name/email, delivery, and optional extra signers.
4. Set **E2Pdf template**. Leave **WPsigner Template** empty.
5. Save the feed and submit a test.

> **note**
Do **not** add the **WPsigner Signing** field on this form if you want the E2Pdf feed to run. A signing field on the form still follows the content-signing path unless the feed has an E2Pdf or WPsigner template selected.

Developers can force a template with `wps_formidableforms_e2pdf_template_id`, or adjust boxes with `wps_formidableforms_e2pdf_signature_fields`.

---

## Integration settings page

**WPsigner → Integrations → Formidable Forms**

- Connection status and counts
- Feed list (with an **E2Pdf** tag when that template is used, plus delivery badges such as **Open for signing** / **Email signing request**)

---

## Managing feeds

### Edit

**Edit** on the feed card reopens the saved configuration (form, template or E2Pdf, signers, placement, After submit). Change what you need, then **Save Feed**.

### Enable / disable

Toggle on the card.

### Delete

Trash icon → confirm. Existing documents are not deleted.

---

## Multiple feeds

- **Multiple PDF feeds on different forms** — supported.
- **Multiple PDF feeds on the same form** — all enabled PDF feeds for that form can run (template mode). Prefer one clear feed per form unless you intentionally want multiple documents.

---

## Confirmation behavior

### Open signing page immediately

WPsigner sets the Formidable confirmation to a redirect (`frm_success_filter` + `frm_redirect_url`) to the primary signer’s signing URL.

You do not need a custom Formidable redirect URL for this mode.

### Send by email

Formidable shows its normal confirmation message. Point users to check email if you customize that message.

### Content signing

The signer stays on the form. The confirmation message includes **Download Signed PDF**. Emails can still use the [merge tags](#download-the-signed-pdf).

---

## Use cases

| Scenario | Recommended setup |
|----------|-------------------|
| Kiosk / same-device signing after a form | PDF template feed → **Open signing page immediately** |
| Remote signer after website form | PDF template feed → **Send signing request by email** |
| Application form that *is* the contract | **Content signing** (WPsigner Signing field on the form) |
| Fixed NDA PDF with company/phone prefilled | PDF template feed + field mapping dropdowns |
| PDF already designed in E2Pdf | E2Pdf feed (**3.2.21+**) |

---

## Developer hooks

### `wps_formidableforms_before_process`

Fires after the Formidable entry is loaded, before any WPsigner feed runs.

```php
add_action('wps_formidableforms_before_process', function ($entry_id, $form_id, $entry, $form) {
    // Inspect the submission before WPsigner creates a document
}, 10, 4);
```

### `wps_formidableforms_document_created`

Fires after a document is created from a PDF-template feed.

```php
add_action('wps_formidableforms_document_created', function ($document_id, $entry_id, $entry, $form, $feed) {
    // Custom logic after document creation
}, 10, 5);
```

### `wps_formidableforms_content_signing_completed`

Fires after inline content signing finishes.

```php
add_action('wps_formidableforms_content_signing_completed', function ($document_id, $signer_id, $entry, $feed) {
    // Custom logic after content signing
}, 10, 4);
```

Completed documents also fire the generic `wps_document_completed` and `wps_pdf_completed` hooks.

### `wps_formidableforms_e2pdf_template_id`

Return an E2Pdf template ID. Ignored when the feed already has a WPsigner `template_id`.

```php
add_filter('wps_formidableforms_e2pdf_template_id', function ($id, $feed, $entry, $form) {
    return (int) $id;
}, 10, 4);
```

### `wps_formidableforms_e2pdf_document_created`

Fires after a document is created from an E2Pdf feed.

```php
add_action('wps_formidableforms_e2pdf_document_created', function ($document_id, $entry_id, $entry, $form, $feed, $template_id, $path) {
    // Custom logic after E2Pdf document creation
}, 10, 7);
```

---

## Troubleshooting

| Issue | Cause | Solution |
|-------|-------|----------|
| No document created | Feed disabled or incomplete | Enable feed; set form, WPsigner or E2Pdf template, signer name/email |
| Feed reopens empty (name, email at zero) | Slow feed load saved empty defaults | Update to **3.2.15+**, then Save Feed once more |
| Second signer never emailed / “Document Completed” too soon | Extra person was only in CC | Add **Additional Signers** on the feed and set **Sequential** (**3.2.14+**) |
| Save blocked: “Please fill in Feed Name and Form” | Missing required fields | Fill Feed Name + Form. For content signing you do not need a template |
| Wrong signer name on the document | Mapped a Username / login field instead of Name | Map the **Name** field; avoid “Username” |
| Not redirected after submit | Delivery set to email, feed failed, or Formidable On Submit stayed on “message” | Use **3.2.25+**, **Open signing page immediately**, and confirm name/email. Formidable 6 “Show message” is rewritten to the signing URL. |
| No signing email | Delivery set to open-for-signing, or SMTP issue | Use **Send signing request by email**; check WordPress mail |
| Prefill empty | Field mapping missing or wrong fields | Re-map with dropdowns; set clear **Field names** on the template |
| Signature already filled | — | Signature/initials are never prefilled by design |
| “Formidable Forms is not installed” | Plugin inactive | Install/activate Formidable Forms Lite or Pro |
| Form submission blocked on OTP | Code missing or expired | Complete OTP; check Twilio / WhatsApp if using SMS |
| Merge tags empty | Used too early | Use in post-submission notifications after content signing succeeds. The on-page download button does not need a tag |
| No download button after signing | Confirmation is a redirect, or PDF failed | Use Formidable’s **Show message** confirmation; check **WPsigner → Documents** |
| Pad looks like a text box | Formidable 6 converted the type | Update to **3.2.12+**, hard-refresh. The field must stay type `insigner_signing` |
| “Your entry appears to be blocked spam!” | Formidable scanned the PNG as text | Update to **3.2.12+**. That message is from Formidable, not WPsigner. Name / email / message are still checked |
| E2Pdf dropdown missing | E2Pdf plugin inactive | Install/activate E2Pdf. Only Formidable-connected E2Pdf templates are listed |
| E2Pdf feed creates no PDF | Shortcode did not return a local PDF | Confirm the E2Pdf template is Formidable-based and the entry exists. Check `debug.log` for `[inSigner FormidableE2Pdf]` |
| Rapid tests stop creating docs | Rate limit | Max **10 documents per minute per form** |
| CC did not get the signed PDF | Field not mapped, or a Formidable shortcode typed in **Additional CC emails** | Set **CC email field** to the form’s Email/CC field. Put only real addresses in **Additional CC emails**. |

### Debug log

```php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
```

Check `wp-content/debug.log` for `[inSigner FormidableForms]` entries.

---

## Compatibility

| Component | Supported |
|-----------|-----------|
| Formidable Forms Lite | Current versions (field hooks `frm_available_fields`, `frm_form_fields`) |
| Formidable Forms Pro | All versions (native Signature field accepted) |
| WPsigner | **3.2.12+** (E2Pdf feeds **3.2.21+**) |
| E2Pdf | Optional. Required only for the E2Pdf template dropdown |
| WordPress | 5.8+ |
| PHP | 7.4+ |

> **note**
Template feeds use `frm_after_create_entry`. Open-for-signing uses `frm_success_filter` and `frm_redirect_url`. OTP uses `frm_validate_entry`. Confirmation download and merge tags use `frm_main_feedback` and `frm_content`. These hooks are available in Lite and Pro.

---

## Formidable vs Fluent Forms

| Topic | Formidable Forms | Fluent Forms |
|-------|------------------|--------------|
| Admin page | **WPsigner → Integrations → Formidable Forms** | **WPsigner → Integrations → Fluent Forms** |
| Signing field | **WPsigner Signing** (Lite + Pro) or native Pro **Signature** | **WPsigner Signing** |
| Content signing | Yes (feed optional) | Yes (feed optional) |
| PDF template feeds | Yes | Yes |
| E2Pdf feeds | Yes (**3.2.21+**, E2Pdf plugin required) | No |
| Document Builder feeds | Not in this release | Yes (addon) |
| OTP | Email, SMS, both, WhatsApp | Email, SMS, both, WhatsApp |
| CC field + extra addresses | Yes | Yes |
| Signed-PDF download | Auto button on success + tags | Tags in confirmation / email |
| Submit hooks | `frm_after_create_entry`, `frm_validate_entry`, `frm_success_filter`, `frm_redirect_url` | `fluentform/submission_inserted`, confirmation redirect |

---

## Next steps

- [Fluent Forms](/integrations/fluent-forms/) — Same workflows on Fluent Forms
- [Gravity Forms](/integrations/gravity-forms/) — Feed-based Gravity integration
- [Contact Form 7](/integrations/contact-form-7/) — Same workflows on Contact Form 7
- [Creating documents](/core-features/creating-documents/) — Document statuses and actions
- [Form fields](/core-features/form-fields/) — Field types on templates
- [WhatsApp](/integrations/whatsapp/) — Deliver signing links via WhatsApp
- [REST API](/api/) — Programmatic integrations
