Browse documentation +
Getting startedInstallationConnect a clientSafety profilesWordPress ChatPro licensingAntigravity CLIAntigravity IDETroubleshootingOAuth 2.1 setupApplication PasswordsPage builder workflowsLedger and rollbackApprovals and memoryAbility reference
Pro module37 abilities

Fluent Forms

These abilities register when Fluent Forms is detected on the site and a Pro licence is active. If either is missing the module stays absent rather than failing at call time.

At a glance

Fluent Forms registers 37 abilities: 21 that only read, 5 that write, and 11 marked destructive. That split is the practical answer to how much of this module can run unattended. Reads cost nothing and are safe to repeat, so discovery is the part to be generous with; the writes are where review belongs, and the destructive calls stop for an explicit confirmation every single time regardless of which profile is active.

What this module is for

Manage Fluent Forms forms, fields, settings, confirmations, notifications, submissions, integrations, subscriptions, and transactions through WPPilot Pro.

Before you rely on it: Financial and subscription operations deserve least-privilege access, human review, and provider-side verification.

Typical workflows

  • Build and test a multi-step form configuration
  • Summarize submissions without altering the form
  • Review subscription and transaction records separately from content edits

The Fluent Forms integration page covers the same module from the workflow side, with the capability map and the questions worth asking before a first write.

Availability on your site

The Fluent Forms module needs three things at once: WPPilot Free as the MCP foundation, an active Pro licence, and the companion plugin detected on the site. Miss any one and the module does not register, which is deliberate: an ability that appears in the tool list but fails at call time is worse than an ability that was never offered. What the connected agent can actually call is then narrowed twice more: by the safety profile active on the site, and by the WordPress capabilities of the user behind the credential. A read that succeeds for an administrator can be absent entirely for an editor.

Every write these abilities perform is recorded in the change ledger, and destructive calls can be routed through the approval queue so a person signs off before anything is applied. A successful tool result means the operation returned, not that the front end, the cache, and every dependent template are correct: that still needs a look.

Reads

Available in every safety profile, including Read Only. Inspection costs nothing and is not rate limited.

AbilityWhat it does
wppilot/fluentforms-check-setupCheck Fluent Forms SetupSee the plugin source for this ability's contract.
wppilot/fluentforms-export-submissionsExport Fluent Forms SubmissionsSee the plugin source for this ability's contract.
wppilot/fluentforms-get-confirmationGet Fluent Forms confirmationSee the plugin source for this ability's contract.
wppilot/fluentforms-get-field-type-schemaGet a Fluent Forms Field Type DetailDetailed schema for ONE Fluent Forms field type. Returns {type, label, description, category, pro_only, supported_settings[] — the WHITELIST of keys add-field/edit-field accept under settings.*, default_attributes (FF-native), default_settings, example_input — a ready-to-pass {type, label, required, settings:{…}} payload}. Returns fluentforms_invalid_input (400) when the type is absent from the catalog. The catalog ALWAYS includes Pro types — even on a free install — so the agent can learn what would unlock with Pro; add-field still rejects Pro-only types on a free install.
wppilot/fluentforms-get-field-types-schemaList Fluent Forms Field TypesReturn the catalog of every Fluent Forms field type the integration can build via add-field / create-form. Output is compact: per entry {type, label, category, pro_only}. Use this FIRST when constructing a form, then call wppilot/fluentforms-get-field-type-schema for the per-type setting whitelist + example_input. When Pro is absent, entries with pro_only=true are filtered out — the agent never sees a type it cannot use. Categories: general (12 standard inputs + choices), advanced (composite + decorative), pro_advanced (file/image/repeater/NPS/phone/chained-select/post-selection/rich-text/…), pro_container (multi-step form_step), pro_payment (payment_method/coupon/subscription/…).
wppilot/fluentforms-get-formGet a Fluent Forms FormFetch one Fluent Forms form by id. Always returns id, title, status, type, has_payment, has_conversion, created_at, updated_at. The fields[] array, settings blob, notifications list, confirmation block, and meta_keys index are OPT-IN via the include parameter — progressive disclosure keeps the default payload small. Valid include values: "fields" (decoded form_fields.fields[] + submit_button), "settings" (decoded formSettings JSON), "notifications" (decoded notifications JSON), "confirmation" (the formSettings.confirmation sub-block), "meta_keys" (deduplicated list of meta_key column values for this form). Returns fluentforms_form_not_found (404) when the id is absent.
wppilot/fluentforms-get-form-canonicalGet Fluent Forms Form (Canonical)Reads a single Fluent Forms form by id and returns it mapped to the plugin-agnostic form-model-schema vocabulary (17 canonical types: text/email/tel/url/number/textarea/date/time/datetime/select/radio/checkbox/file/hidden/submit/consent/group) used by the form-model-migration skill. Fluent Forms native field elements (~40 including Pro) fold onto those 17 — composites (input_name, address, container, accordion) collapse to canonical group; structural-only types (section_break, custom_html, shortcode, action_hook) drop with informational warnings; anti-spam (recaptcha, hcaptcha, turnstile), multi-page (form_step, save_progress_button), and Pro payment types (payment_method, subscription_payment, item_quantity, multi_payment_component, custom_payment_component, payment_summary_component, coupon) drop with structural warnings. The form fields blob lives at wp_fluentform_forms.form_fields (JSON-encoded {fields:[], submitButton:{}}); notifications live in wp_fluentform_form_meta (one row per notification, meta_key="notifications"); the single confirmation lives at formSettings.confirmation. Output keys: fields[] with canonical types, mail_config{} from the first enabled notification, notifications[] from the remaining ones, messages{} (empty — Fluent has no built-in message catalogue), conditional_rules[] from per-field settings.conditional_logics (mapped 1:1 when expressible), meta{} (source plugin + version + lossless formSettings echo for round-trip), plus warnings[] for everything that does not fit the canonical shape (anti-spam, payments, conversational mode, custom redirects). Smart-tag syntax {inputs.<name>} inside subject / message / recipient is rewritten to [<name>] to match the CF7 / WPForms / Gravity Forms canonical convention. Honours the same max_field_bytes truncation contract as the other canonical readers (default 8192 bytes for mail_config.body, notifications[].body, with *_truncated flags); pass max_field_bytes: 0 to disable truncation when full-fidelity canonical is required before an execute-mode migration. Returns WP_Error fluentforms_form_not_found when the id does not exist. Use this ability inside the form-model-migration workflow (Phase 2 — read source schema); for ad-hoc inspection outside the migration pipeline, prefer fluentforms-get-form which returns the Fluent-native shape.
wppilot/fluentforms-get-form-settingsGet Fluent Forms form settingsSee the plugin source for this ability's contract.
wppilot/fluentforms-get-notificationGet a Fluent Forms notificationFetch one notification by id. Required: form_id, notification_id. Returns {form_id, notification}. Returns fluentforms_notification_not_found (404) when no matching id exists on the form. Capability: fluentform_settings_manager.
wppilot/fluentforms-get-quiz-reportGet Fluent Forms quiz reportSee the plugin source for this ability's contract.
wppilot/fluentforms-get-submissionGet a Fluent Forms SubmissionFetch one Fluent Forms submission by id. Always returns the compact row PLUS the decoded response mapped to friendly triples [{field_name, label, value, truncated?, full_size?}]. When Pro is loaded AND the submission has payment data, the payment block surfaces (status, method, type, currency, total, paid) — read-only. Optional: fields (whitelist — only return these field names in response[]); max_field_bytes (per-field byte cap, default 4 KiB, capped at 64 KiB). Returns fluentforms_submission_not_found (404) for missing ids.
wppilot/fluentforms-get-subscriptionGet a Fluent Forms subscriptionSee the plugin source for this ability's contract.
wppilot/fluentforms-get-transactionGet a Fluent Forms transactionSee the plugin source for this ability's contract.
wppilot/fluentforms-list-draft-submissionsList Fluent Forms draft submissionsList save-and-resume draft submissions (partial entries the user has not yet finalised). Filterable by form_id, user_id, used (true = the user resumed and submitted; false = abandoned drafts). Compact rows include id, form_id, hash (resume token), type, step_completed, user_id, source_url, browser, device, used, created_at, updated_at. Per_page capped at 100. Capability: fluentform_entries_viewer (per-form when form_id is supplied).
wppilot/fluentforms-list-formsList Fluent FormsList Fluent Forms forms with optional filters. Returns compact rows (id, title, status, type, has_payment, has_conversion, submissions_total, submissions_unread, created_at, updated_at) plus pagination metadata (page, per_page, total, total_pages). Fields[] and full settings are NOT included — fetch them with wppilot/fluentforms-get-form when needed (progressive disclosure). Filters: search (partial title match), status (published|unpublished), type (form|post), has_payment (bool), page (default 1), per_page (default 25, max 200). Use this before any per-form CRUD ability to discover form ids.
wppilot/fluentforms-list-integrationsList Fluent Forms integration feedsList the marketing-integration / webhook / payment-platform feeds configured on a Fluent Forms form. Each entry returns {feed_id, integration, name, enabled, raw — the decoded feed body}. Required: form_id. The integration vocabulary (mailchimp / activecampaign / hubspot / convertkit / getresponse / mailerlite / google_sheet / slack / discord / zapier / make / webhook / trello / airtable / hubspot / …) is the same surface check-setup advertises under integrations_active.feeds. Empty list when the form has no configured feeds. Capability: fluentform_settings_manager (falls back to forms_manager).
wppilot/fluentforms-list-notificationsList Fluent Forms notificationsList the email notifications configured on a Fluent Forms form. Progressive disclosure: each entry is a COMPACT row {id (the storage row id), name, subject, enabled, recipient (a flat summary of sendTo — the address, or "field:<name>" / the routing type), has_conditionals}. The heavy fields are omitted by default and opted into via include: pass any of ["message","sendTo","conditionals"] to materialise them inline; or fetch one notification in full with wppilot/fluentforms-get-notification. Required: form_id. Returns {form_id, notifications: list}. Capability: fluentform_settings_manager (falls back to forms_manager).
wppilot/fluentforms-list-quiz-questionsList Fluent Forms quiz questionsList the quiz-enabled questions on a Fluent Forms Pro quiz form. Each entry returns {field_name, label, type, answer (correct value), points, weight}. Reads the _quiz_settings form_meta key (set when an admin enables Quiz on a form via Settings → Quiz Settings). Returns is_quiz=false and an empty list when the form has no quiz settings. Required: form_id. Capability: fluentform_settings_manager (falls back to forms_manager).
wppilot/fluentforms-list-submissionsList Fluent Forms SubmissionsSee the plugin source for this ability's contract.
wppilot/fluentforms-list-subscriptionsList Fluent Forms subscriptionsList recurring-billing subscriptions captured by Fluent Forms Pro. Filterable by form_id, submission_id, status (active|trialing|cancelled|expired|past_due), billing_interval (day|week|month|year). Compact rows include item_name, plan_name, recurring_amount, billing_interval, bill_times, bill_count, vendor_subscription_id, status, expiration_at. Per_page capped at 50. Capability: fluentform_view_payments.
wppilot/fluentforms-list-transactionsList Fluent Forms transactionsList payment transactions captured by Fluent Forms Pro. Filterable by form_id, submission_id, subscription_id, status (paid|pending|failed|refunded|cancelled), payment_method (stripe|paypal|square|razorpay|offline|…), payment_mode (test|live), from / to (ISO date range on created_at). Returns compact rows (no payment_note / billing_address blobs to keep the payload small) plus pagination metadata. Per_page capped at 100. Capability: fluentform_view_payments.

Writes

Gated by the active profile and your WordPress capabilities. Rate limited to 120 per minute per credential.

AbilityWhat it does
wppilot/fluentforms-add-fieldAdd a Field to a Fluent Forms FormAppend a new field to an existing form. Required: form_id, field — the agent-facing descriptor {type, label?, required?, name?, settings?}. The ability resolves the form, decodes form_fields.fields[], appends the new element (or inserts it at the optional position index, 0-based), re-encodes and persists. Unknown field types are rejected with fluentforms_invalid_input. Pro-only field types on a free install are rejected with fluentforms_pro_field_not_available. The name is auto-assigned (collision-safe within the form) when omitted. Returns {form_id, field — the FF-native element row just inserted, position, dropped_settings — keys filtered by the catalog whitelist}. Capability: fluentform_forms_manager.
wppilot/fluentforms-create-formCreate a Fluent Forms FormCreate a new Fluent Forms form. Required: title (non-empty string). Optional: status ("published" | "unpublished", default "published"; an "unpublished" form renders as EMPTY output on the front end, with no message); type ("form" | "post", default "form"); fields[] — list of field descriptors using the agent-facing input shape ({type, label, required, name?, settings?}). Each field is run through ff_build_element so it lands as the native FF {element, attributes, settings, editor_options} structure. Returns the freshly-created form (compact shape) plus optional warnings.dropped_settings_per_field listing settings keys that fell outside the catalog whitelist for each field. Use wppilot/fluentforms-get-field-types-schema first to discover available field types and supported settings.
wppilot/fluentforms-create-notificationCreate a Fluent Forms notificationSee the plugin source for this ability's contract.
wppilot/fluentforms-duplicate-formDuplicate a Fluent Forms FormClone an existing Fluent Forms form. Required: form_id. Optional: title — when omitted, the duplicate is titled "{original title} (copy)". Optional: include_meta (default true) — when true, copies every form_meta row so notifications, confirmations, settings, and conditional logic transfer to the clone. Submissions are NEVER copied. Returns the freshly-created form (compact shape). Capability: fluentform_forms_manager.
wppilot/fluentforms-mark-submissionMark a Fluent Forms SubmissionMark one submission. Required: submission_id. Mutually exclusive — pass exactly ONE of: status (unread|read|spam|trashed) — sets the submission status; favourite (bool) — toggles the is_favourite flag. Returns the updated compact row. Idempotent: marking an already-read submission as read is a no-op success. Returns fluentforms_submission_not_found (404) for missing ids; fluentforms_invalid_input (400) when neither (or both) action is passed. Capability: fluentform_manage_entries.

Destructive

Marked destructive in the source, so each call needs an explicit confirmation flag, every time.

AbilityWhat it does
wppilot/fluentforms-cancel-subscriptionCancel a Fluent Forms subscriptionSee the plugin source for this ability's contract.
wppilot/fluentforms-delete-draft-submissionDelete a Fluent Forms draft submissionSee the plugin source for this ability's contract.
wppilot/fluentforms-delete-fieldDelete a Fluent Forms FieldRemove a field from a form, identified by its name. Required: form_id, name. Returns {form_id, removed_name, fields_remaining: int, warnings?}. When the removed field was the last one, warnings.empty_form flags that the form now has no fields and renders as empty output. Returns fluentforms_field_not_found (404) when the name is absent. NOTE: existing submissions retain the value under the old field name in their response JSON — deleting the field on the form does not retroactively redact entries. Capability: fluentform_forms_manager.
wppilot/fluentforms-delete-formDelete a Fluent Forms FormPermanently delete a Fluent Forms form. Required: form_id. Optional: cascade (default false) — when true, also deletes all submissions, submission_meta, entry_details and form_meta rows associated with the form (irreversible). When false (default) the form row is deleted but related data stays orphaned in the FF tables. Returns {success: true, form_id, cascaded: bool, deleted: {submissions, submission_meta, entry_details, form_meta}}. Returns fluentforms_form_not_found (404) if the id is absent. Capability: fluentform_forms_manager.
wppilot/fluentforms-delete-notificationDelete a Fluent Forms notificationRemove one notification by id. Required: form_id, notification_id. Returns fluentforms_notification_not_found (404) when the id is absent. Other notifications keep their ids — there is no reindexing. Capability: fluentform_settings_manager.
wppilot/fluentforms-delete-submissionDelete a Fluent Forms SubmissionPermanently delete one Fluent Forms submission, including its submission_meta + entry_details rows. Required: submission_id. Returns {success: true, submission_id, form_id, deleted: {submission, submission_meta, entry_details}}. There is NO trash bin — use wppilot/fluentforms-mark-submission with status=trashed for soft-delete semantics. Returns fluentforms_submission_not_found (404) for missing ids. Capability: fluentform_manage_entries.
wppilot/fluentforms-edit-confirmationEdit Fluent Forms confirmationPartial-update the confirmation block. The confirmation payload is shallow-merged into formSettings.confirmation — only whitelisted keys are kept (messageToShow, redirectTo, customPage, customUrl, samePageFormBehavior); unknown keys land in warnings.dropped_keys. Pass null on a whitelisted key to remove it. When redirectTo=customUrl the customUrl must be a valid URL (esc_url_raw is applied). Required: form_id, confirmation. Capability: fluentform_settings_manager.
wppilot/fluentforms-edit-fieldEdit a Fluent Forms FieldPatch one field in an existing form, identified by its name (the FF submission-key under attributes.name). Required: form_id, name. Mutable: label, required, settings (partial merge into the existing settings, NOT a replace — pass null on a key to remove it). Returns {form_id, field — updated FF-native row, dropped_settings}. Returns fluentforms_field_not_found (404) when the name is absent. Renaming a field is NOT supported via this ability (would orphan existing submissions); to rename, delete + add. Capability: fluentform_forms_manager.
wppilot/fluentforms-edit-formEdit a Fluent Forms FormPartial-update a Fluent Forms form. Required: form_id. Mutable attributes (all optional, omitted means "leave as-is"): title, status, type, fields[]. fields[] is REPLACE-semantics (passing it overwrites the entire form_fields array) — for partial field-level changes use wppilot/fluentforms-add-field / edit-field / delete-field instead. Returns the updated compact form plus optional warnings.dropped_settings_per_field. Returns fluentforms_form_not_found (404) for missing ids, fluentforms_invalid_input (400) for bad shapes.
wppilot/fluentforms-edit-form-settingsEdit Fluent Forms form settingsPartial-update the formSettings blob. The settings payload is shallow-merged into the stored blob — only whitelisted top-level keys are accepted (restrictions, layout, submitButton, conditionals); unknown keys land in warnings.dropped_keys. Pass null on a whitelisted key to remove it. Login-required and form scheduling are NOT top-level keys — they live under restrictions (restrictions.requireLogin, restrictions.scheduleForm). Confirmation is NOT mutable here — use wppilot/fluentforms-edit-confirmation for that. Required: form_id, settings. Capability: fluentform_settings_manager (falls back to forms_manager). Returns the updated settings + warnings.dropped_keys.
wppilot/fluentforms-edit-notificationEdit a Fluent Forms notificationPatch one notification by id. Shallow merge — only the keys you pass in notification are touched; pass null on a key to delete it. The id is immutable. Required: form_id, notification_id, notification. Returns fluentforms_notification_not_found (404) on missing id. Capability: fluentform_settings_manager.