# Formidable Forms

> Connect Formidable Forms with WPsigner for content signing, PDF template feeds, optional 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 take a PDF that **E2Pdf** already built — 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. **E2Pdf** is optional and not bundled. 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 designed in E2Pdf, then signed in WPsigner | E2Pdf template (plugin separate) | Same feed screen, **E2Pdf template** dropdown | Yes (or a developer hook) |

> **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 mapping fields in **E2Pdf**? Use **E2Pdf + feed** — WPsigner does not remap those fields.

---

## 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** | Name + email fields from the form (required) |
| **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 (Name). 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 or E2Pdf template. Those dropdowns stay 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 | Yes | Primary signer name (First / Middle / Last sub-fields are listed) |
| 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

| Control | Meaning |
|---------|---------|
| **Name field** | Formidable field for signer name |
| **Email field** | Formidable field for signer email |

Both are required. If either is empty or the email is invalid on submit, that feed run is skipped.

#### 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, **no signing email** is sent. Formidable confirmation redirects the browser to `/insigner/{token}`. |
| **Send signing request by email** | Document is set to **sent** and each signer receives the signing-request email. **No** browser redirect to the signing page. |

#### 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

Use this when **E2Pdf** already fills a PDF from the Formidable entry and you want WPsigner to collect the signature.

**E2Pdf is not included in WPsigner.** Install it separately. If E2Pdf is inactive, the **E2Pdf template** dropdown is hidden and WPsigner does not load extra front-end scripts.

Full reference (shortcodes, signature placement, every hook, what is not supported): **[E2Pdf](/integrations/e2pdf/)**.

```
Form submitted
  → E2Pdf fills its template (dataset = Formidable entry ID)
  → WPsigner stores a copy of that PDF
  → Empty signature field is added (last page by default)
  → After submit: open for signing or email the request
```

### Setup

1. Install and activate **E2Pdf**. Create a template with **extension = Formidable** and **item = your form**.
2. Map fields inside the E2Pdf builder (not in WPsigner).
3. Go to **WPsigner → Integrations → Formidable Forms → New Feed**.
4. Select the form, Name + Email fields, delivery mode, and the **E2Pdf template**.
5. Leave the WPsigner template empty. Field mapping is hidden because E2Pdf already filled the PDF.
6. Save and submit a test.

Choose **either** a WPsigner template **or** an E2Pdf template on the same feed — not both.

WPsigner does **not** delete the PDF that E2Pdf saved in uploads. Temp files are removed only after a secure copy is stored.

### Developer hook (no feed UI)

To pick an E2Pdf template from code (including when no feed is saved):

```php
add_filter('wps_formidableforms_e2pdf_template_id', function ($template_id, $feed, $entry, $form) {
    if ($template_id > 0) {
        return $template_id;
    }
    if (!empty($feed['template_id'])) {
        return 0; // Keep WPsigner PDF-template feeds
    }
    return 12; // E2Pdf template ID
}, 10, 4);
```

The form still needs Name and Email fields so WPsigner can create the signer.

---

## Integration settings page

**WPsigner → Integrations → Formidable Forms**

- Connection status and counts
- Feed list (with delivery badges such as **Open for signing** / **Email signing request**)

---

## Managing feeds

### Edit

**Edit** on the feed card → change settings → **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 and mapped in E2Pdf | E2Pdf feed (E2Pdf plugin + WPsigner feed) |

---

## 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 or an E2Pdf 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);
```

### E2Pdf filters and actions

| Hook | Type | Purpose |
|------|------|---------|
| `wps_formidableforms_e2pdf_template_id` | filter | Override or supply the E2Pdf template ID (`$id, $feed, $entry, $form`) |
| `wps_formidableforms_e2pdf_shortcode` | filter | Change the `[e2pdf-save … apply="true"]` string |
| `wps_formidableforms_e2pdf_pdf_path` | filter | Return a local PDF path to skip generation |
| `wps_formidableforms_e2pdf_signature_fields` | filter | Change empty signature field placement |
| `wps_formidableforms_e2pdf_generated` | action | After a valid PDF path is produced |
| `wps_formidableforms_e2pdf_document_created` | action | After the WPsigner document exists (`$document_id, $entry_id, $entry, $form, $feed, $template_id, $pdf_path`) |

```php
add_filter('wps_formidableforms_e2pdf_signature_fields', function ($fields, $document_id, $signer_id, $feed, $form, $index) {
    $fields[0]['page_number'] = 1;
    $fields[0]['position_x']  = 80;
    $fields[0]['position_y']  = 640;
    return $fields;
}, 10, 6);
```

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

---

## Troubleshooting

| Issue | Cause | Solution |
|-------|-------|----------|
| No document created | Feed disabled or incomplete | Enable feed; set form, WPsigner or E2Pdf template, signer name/email |
| E2Pdf dropdown missing | E2Pdf inactive | Install/activate E2Pdf. WPsigner does not bundle it |
| E2Pdf template created but not in the feed list | Extension is not Formidable, or the template is in the E2Pdf trash | Set extension to Formidable and item to this form. Inactive (not license-activated) templates still appear |
| E2Pdf feed created no PDF | Wrong template, or shortcode returned HTML | Use a Formidable E2Pdf template; check `debug.log` for `[inSigner FormidableE2Pdf]` |
| Signature box in the wrong place | Default last-page placement | Filter `wps_formidableforms_e2pdf_signature_fields` |
| 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, or feed failed | Use **Open signing page immediately**; confirm name/email valid |
| 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 |
| 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]` or `[inSigner FormidableE2Pdf]` 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) |
| E2Pdf | Optional, not bundled. Detected when active (`e2pdf-save` / `E2Pdf`) |
| WPsigner | **3.2.12+** |
| 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 bridge | Yes (optional plugin) | 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

- [E2Pdf](/integrations/e2pdf/) — Full E2Pdf bridge: setup, shortcodes, hooks, and limits
- [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
