# Fluent Forms Integration

> Connect Fluent Forms with WPsigner for content signing, PDF template feeds, or Document Builder feeds — with field prefill and open-for-signing or email delivery.

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

---

Automate document signing from **Fluent Forms** submissions with **WPsigner**. You can generate a PDF from the form answers (content signing), fill a fixed PDF template, or use a **Document Builder** HTML template — then open the signing page immediately or email the signing request.

> **note**
Works with **Fluent Forms Free** (v5.x+) and **Fluent Forms Pro**. No Fluent Forms add-on is required.

---

## 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 → Fluent Forms** | Yes |
| **[Document Builder + feed](#document-builder--fluent-forms)** | Contracts written in Document Builder | Document Builder HTML template | **WPsigner → Fluent · Doc Builder** (addon) | Yes |

> **One feed type per form**
Do **not** enable a **PDF template** feed and a **Document Builder** feed on the **same** Fluent Form. WPsigner blocks saving/enabling the second feed. Using both would create two documents and can break the post-submit redirect.

> **tip**
- Need a signed PDF of the **form answers** with an inline signature? Use **content signing**.
- Need a **pre-designed PDF** with mapped fields? Use **PDF template + feed**.
- Need a document written in **Document Builder**? Use the Document Builder Fluent screen (addon).

---

## How template feeds work

Both **PDF template** and **Document Builder** feeds follow the same delivery idea:

```
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 Fluent Form to one template |
| **Primary signer** | Name + email fields from the form (required) |
| **Field mapping** | Dropdown → dropdown: template field ↔ Fluent Forms 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 **Fluent Forms** and **WPsigner** (**3.1.1+** recommended for large forms + OTP).
2. Edit your Fluent Form and add at least:
   - A **Name** field (or Fluent Forms **Names** = first + last)
   - An **Email** field
   - The **WPsigner Signing** field (Draw / Type / Upload)
3. **Publish** the form.

On submit, WPsigner captures the signature(s) and form data, generates the signed PDF, and runs the normal completion flow.

> **Multiple signature fields**
You can add more than one **WPsigner Signing** field (for example Client, Witness, Guarantor). Every field that contains a signature is drawn on the PDF with its own label. Leave a signing field empty only if it is optional in Fluent Forms validation.

> **Name vs Username**
Use a real **person name** field (Name / Names). 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 → Fluent Forms → New Feed**

1. Select a form that includes the **WPsigner Signing** field.
2. Set **Feed Name**, the **Fluent 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**, WPsigner auto-detects it and uses content-signing mode (template options are skipped).

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

### Submission validation

If PDF generation fails (missing signature data, server error, etc.), **the form submission is blocked**. Fluent Forms will not store an orphaned entry without a completed signed document.

---

## WPsigner Signing field + OTP

The **WPsigner Signing** field can require a one-time password before submit.

### Enable OTP

1. Edit the Fluent 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.

> **Large forms (many fields)**
Content signing with OTP works on short and long Fluent Forms. After a successful OTP, WPsigner keeps the verification token through Fluent Forms’ AJAX submit (with a browser-session fallback). If you still see “Please verify your identity…” after a green verified state, update to **WPsigner 3.1.1+** and hard-refresh the form page.

---

## Merge tags in Fluent Forms emails

Use these tags in Fluent Forms **email notifications** after content signing:

| Tag | Output |
|-----|--------|
| `{inSigner:signed_pdf_url}` | Direct URL to download the signed PDF |
| `{inSigner:download_button}` | HTML button linking to the signed PDF |

Example body:

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

Tags resolve when the signed PDF URL is available (after successful signing).

---

## 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 → Fluent Forms** (labeled **Fluent Forms · PDF templates** when Document Builder is also installed).

### Prerequisites

1. **WPsigner** **3.2.8+** for mapping a form field to CC (3.1.1+ for dropdown mapping, delivery modes, content-signing feeds, and OTP on large forms)
2. **Fluent Forms** Free v5.x+ or Pro
3. A published Fluent 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 Fluent Form

Minimum fields:

| Field | Required | Purpose |
|-------|----------|---------|
| Name | Yes | Primary signer name |
| 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 → Fluent Forms**.
2. Click **New Feed** (centered modal).
3. Configure:

#### Feed name

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

#### Fluent Form

Published form that triggers the feed.

#### 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 (**WPsigner 3.2.8+**).

| Setting | Use when |
|---------|----------|
| **CC email field** | The address comes from a Fluent Forms field (the visitor types it, or Fluent Forms fills it from the URL / query string) |
| **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 merge tags such as `{inputs.email}` in the **Additional CC emails** box — pick the field in the dropdown instead.

**Typical setup (CC from the form or from `?cc=`):**

1. Add an **Email** field to the Fluent Form (label it something like “CC” if you want).
2. Optional: let Fluent Forms fill that field from the URL (query parameter).
3. Open **WPsigner → Integrations → Fluent Forms →** the feed.
4. Set **CC email field** to that Email field.
5. 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.

> **Document Builder feeds**
The **Fluent · Doc Builder** addon feed does not include **CC email field**. Use a core Fluent Forms feed (content signing or PDF template) to map a form field to 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** | Fluent Forms field for signer name |
| **Email field** | Fluent Forms 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 (user label, or default type name such as Name / Date / Email). Duplicates become `Name (2)`. |
| Right | **Fluent Forms** | Form field labels |

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. Fluent Forms confirmation redirects the browser to `/insigner/{token}` so the submitter can sign right away. |
| **Send signing request by email** | Document is set to **sent** and each signer (including additional signers, if configured) receives the signing-request email. **No** browser redirect to the signing page. |

> **Legacy feeds**
Older feeds that only had “Auto-send” are interpreted as: Auto-send on → **email**; Auto-send off → **open signing page immediately**.

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

---

## Document Builder + Fluent Forms

If the **WPsigner Document Builder** addon is installed (**1.5.2+** recommended), you can map a Fluent Form to a **Document Builder** template instead of a PDF template.

Admin page: **WPsigner → Fluent · Doc Builder** (also linked from the PDF Fluent Forms page under “Which documents do you create from Fluent Forms?”).

### What it does

1. On submit, clones the Document Builder template into a new document.
2. Prefills mapped fields from the Fluent Forms submission.
3. Sets status to **sent** without requiring the admin wizard.
4. Delivers via the same two options:
   - **Open signing page immediately** (redirect, no email)
   - **Send signing request by email**

### Feed settings (Document Builder)

| Setting | Description |
|---------|-------------|
| Fluent Form | Published form |
| Document Builder template | Saved IDB template |
| Document title | Optional; entry id may be appended for uniqueness |
| Signer name / email fields | Dropdowns of form fields |
| Field mapping | Form field label → document field label (both dropdowns) |
| After submit | Open for signing **or** email |
| Enabled | On/off |

> **caution**
An enabled Document Builder feed on a form blocks enabling a PDF-template feed on that same form (and the reverse). Disable one before enabling the other.

---

## Integration settings page

**WPsigner → Integrations → Fluent Forms**

- Connection status and counts
- Feed list (with delivery badges such as **Open for signing** / **Email signing request**)
- When Document Builder is active: chooser cards linking **PDF templates** vs **Document Builder**, plus a warning listing forms already used by the other feed type

---

## Managing feeds

### Edit

**Edit** on the feed card → change settings → **Save Feed**.

### Enable / disable

Toggle on the card. Enabling is blocked if the same form already has an enabled feed of the other type (PDF vs Document Builder).

### 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.
- **PDF feed + Document Builder feed on the same form** — **not allowed** while both are enabled.

---

## Confirmation behavior

### Open signing page immediately

WPsigner hooks Fluent Forms confirmation (`fluentform/submission_confirmation`) and sets `redirectUrl` to the primary signer’s signing URL. The submitter lands on the signing UI after AJAX submit.

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

### Send by email

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

### Content signing

Use Fluent Forms confirmations / notifications as usual. Prefer merge tags `{inSigner:signed_pdf_url}` / `{inSigner:download_button}` in notifications after the PDF exists.

---

## Use cases

| Scenario | Recommended setup |
|----------|-------------------|
| Kiosk / same-device signing after a form | PDF or Document Builder feed → **Open signing page immediately** |
| Remote signer after website form | PDF or Document Builder 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 |
| HTML contract from Document Builder | Document Builder Fluent feed |

---

## Troubleshooting

| Issue | Cause | Solution |
|-------|-------|----------|
| No document created | Feed disabled or incomplete | Enable feed; set form, template, signer name/email |
| Save blocked: “Please fill in Feed Name and Form” | Content-signing feed treated as if a template were required | Update to **3.1.1+**. For content signing you only need Feed Name + Form (no template) |
| OTP shows verified, then “Please verify your identity…” | Older core lost the OTP token on large AJAX submits | Update to **3.1.1+**, hard-refresh the form, complete OTP again |
| Wrong signer name on the document | Mapped a Username / login field instead of Name | Map the **Name** or **Names** field; avoid “Username” |
| Save/enable blocked mentioning Document Builder / PDF feed | Same form already has the other feed type enabled | Disable the other feed or use a different form |
| 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; double-click template fields and set clear **Field names** |
| Dropdown shows only type names | Template field labels empty | Edit the template → double-click each field → set **Field name** |
| Signature already filled | — | Signature/initials are never prefilled by design |
| “Fluent Forms is not installed” | Plugin inactive | Install/activate Fluent Forms |
| Form submission blocked | Content signing PDF/OTP failure | Check Signing field, OTP channels, `debug.log` |
| Merge tags empty | Used too early | Use in post-submission notifications |
| Rapid tests stop creating docs | Rate limit | Max **10 documents per minute per form** |
| CC did not get the signed PDF | Field not mapped, merge tag typed in **Additional CC emails**, or WPsigner older than 3.2.8 | Update to **3.2.8+**. 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 `WPS`, `FluentForms`, or `IDB FluentForms` entries.

---

## Compatibility

| Component | Supported |
|-----------|-----------|
| Fluent Forms Free | v5.0+ |
| Fluent Forms Pro | All versions |
| WPsigner (PDF feeds, content signing, OTP on large forms, dropdown mapping) | **3.1.1+** recommended |
| WPsigner (CC email field on Fluent feeds) | **3.2.8+** |
| WPsigner Document Builder (Fluent Doc Builder feeds) | **1.5.2+** recommended |
| WordPress | 5.8+ |
| PHP | 7.4+ |

> **note**
Template feeds use `fluentform/submission_inserted`. Open-for-signing uses `fluentform/submission_confirmation` (and the legacy `fluentform_submission_confirmation` alias) to set the redirect URL. These hooks are available in Free and Pro.

---

## Next steps

- [Formidable Forms](/integrations/formidable-forms/) — Same workflows on Formidable Forms
- [E2Pdf](/integrations/e2pdf/) — Formidable + E2Pdf → WPsigner signing (not available on Fluent Forms)
- [Smart Signing Forms](/addons/smart-signing-forms/) — Standalone signing forms without Fluent Forms
- [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
