Formidable Forms registers its operations with the WordPress Abilities API. You can discover an operation, inspect its schema, and run it through WordPress REST API requests or a Model Context Protocol (MCP) client.
Upgrade your WordPress site with powerful, flexible forms.
Requirements
- Formidable Forms 7.0 or newer. Formidable Forms Lite registers the core abilities without a license.
- Formidable Forms Pro with an active license for the Pro abilities, and Formidable Views 5.13 or later for the View and View layout abilities.
- WordPress 6.9 or later.
- Enable the Formidable MCP server turned on under Formidable → Global Settings → MCP. This setting also controls Formidable ability registration.
- A WordPress user whose role has the permission required by each operation.
- HTTPS and a WordPress Application Password for external REST requests.
From Idea to Reality in Minutes. Build Powerful Forms, Dashboards, Apps and More.
Formidable Forms makes advanced site building simple. Launch forms, directories, dashboards, and custom WordPress apps faster than ever before.
Understand how abilities work
An ability is one defined operation. Each ability has:
- A stable name such as formidable-forms/list-forms.
- An input schema.
- An output schema.
- An execution callback.
- A permission callback.
- Annotations that identify read-only, destructive, and idempotent behavior.
WordPress validates the input and output against the schemas. It also checks the authenticated user's permission each time the ability runs.
Formidable registers the formidable-forms category. Each plugin registers the abilities for its own features: Formidable Forms Lite registers 28, Formidable Forms Pro adds 13, and Formidable Views adds 10 (version 5.13 or later). With all 3 active, the category has 51 abilities on the WordPress REST API and the Formidable MCP server. The Formidable Coupons and Formidable Landing Pages add-ons add 5 more each (see Add-on abilities).
Turn on the abilities
One setting turns on both the Formidable abilities and the Formidable MCP server.
- Go to Formidable → Global Settings → MCP.
- Toggle on Enable the Formidable MCP server.
- Click Update to save your changes.
To confirm the abilities are registered, run the list request in Discover abilities with the WordPress REST API. It returns the Formidable abilities in the formidable-forms category.
- When the setting is on, Formidable registers its abilities and MCP server.
- When the setting is off, Formidable doesn't register its abilities for the WordPress Abilities API or any MCP server.
- When a license expires past its grace period, the Pro and add-on abilities are removed. The Formidable Forms Lite abilities keep working.
The REST API setting of the Formidable API add-on controls /frm/v2 and /frm/v3. It doesn't control /wp-abilities/v1.
Discover abilities with the WordPress REST API
REST requests sign in with a WordPress username and Application Password. Use a dedicated user for each integration, as described in Apply the least privilege needed.
Sign in as that user. Then create the password under Users → Profile → Application Passwords. A user without the administrator role sees Profile as its own admin menu item, not under Users.
Don't use the API Key shown under Formidable → Global Settings → API. That key is for legacy Formidable API authentication.
Don't use a connection file from the MCP tab either. Its password only works with the Formidable MCP server.
List the Formidable abilities:
curl --silent --show-error \
--user "YOUR_USERNAME:YOUR_APPLICATION_PASSWORD" \
"https://example.com/wp-json/wp-abilities/v1/abilities?category=formidable-forms&per_page=100"Inspect one ability before you execute it:
curl --silent --show-error \
--user "YOUR_USERNAME:YOUR_APPLICATION_PASSWORD" \
"https://example.com/wp-json/wp-abilities/v1/abilities/formidable-forms/create-entry"Every ability route includes the /abilities/ segment before the ability name. The response shows the ability's input schema, output schema, and annotations.
Choose the correct HTTP method
WordPress selects the method from the ability annotations. A request that uses a different method returns a 405 error.
| Ability behavior | Method | Input location |
|---|---|---|
| Read-only | GET | Input query parameters in bracket notation, such as input[id]=12. |
| Destructive and idempotent | DELETE | Input query parameters in bracket notation. |
| Any other ability that changes data | POST | JSON body with an input property. |
The execution route is:
/wp-json/wp-abilities/v1/abilities/formidable-forms/ABILITY-NAME/runEvery Formidable ability that changes data uses POST, including the delete, refund, and cancel abilities. They're marked destructive but not idempotent. Inspect an ability to confirm its annotations before you run it.
Run a read-only ability
The list-forms ability has no required input properties. Run it with no input, or send properties such as page_size to change the results:
curl --silent --show-error --get \
--user "YOUR_USERNAME:YOUR_APPLICATION_PASSWORD" \
--data-urlencode "input[page_size]=20" \
"https://example.com/wp-json/wp-abilities/v1/abilities/formidable-forms/list-forms/run"The user must have View Forms List. This is a role-level permission. It doesn't filter the result for individual forms.
Run an ability that changes data
Use POST and put the ability input inside the input property. This example creates an entry, which needs Formidable Forms Pro. Replace the form key and field key with values from your site.
curl --silent --show-error \
--request POST \
--user "YOUR_USERNAME:YOUR_APPLICATION_PASSWORD" \
--header "Content-Type: application/json" \
--data '{
"input": {
"form_id": "contact-form",
"item_meta": {
"email-address": "person@example.com"
}
}
}' \
"https://example.com/wp-json/wp-abilities/v1/abilities/formidable-forms/create-entry/run"form_id accepts a numeric form ID or the form key returned by list-forms. Each property in item_meta must use a numeric field ID or a field key returned by list-fields. Don't use the visible form name or field label.
Available abilities
The ability catalog contains 51 abilities with Formidable Forms Lite, Formidable Forms Pro, and Formidable Views active, plus 5 each with the Coupons and Landing Pages add-ons (see Add-on abilities).
The Ability and Required input columns contain API identifiers. They aren't WordPress admin labels. Use list or get abilities to retrieve IDs and keys before you run a change.
| Family | Lite | Pro | Views |
|---|---|---|---|
| Forms | 5 | 0 | 0 |
| Entries | 3 | 2 | 0 |
| Fields | 4 | 0 | 0 |
| Statistics | 0 | 1 | 0 |
| Styles and style assignment | 3 | 3 | 0 |
| Form actions | 5 | 0 | 0 |
| Payments | 4 | 0 | 0 |
| Subscriptions | 4 | 0 | 0 |
| Applications | 0 | 7 | 0 |
| Views | 0 | 0 | 5 |
| View layouts | 0 | 0 | 5 |
| Total | 28 | 13 | 10 |
Forms
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/list-forms | List forms with optional search, sorting, and pagination. | None | View Forms List |
| formidable-forms/get-form | Get one form by ID or key. | id | View Forms List |
| formidable-forms/create-form | Create a form and optionally include fields. | name | Add and Edit Forms |
| formidable-forms/update-form | Update a form and its supported settings. | id | Add and Edit Forms |
| formidable-forms/delete-form | Permanently delete a form. | id | Delete Forms |
Entries
Formidable Forms Lite registers list-entries, get-entry, and delete-entry. Formidable Forms Pro adds create-entry and update-entry.
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/list-entries | List entries with optional form, date, search, sort, is_draft, and pagination filters. | None | View Entries from Admin Area |
| formidable-forms/get-entry | Get one entry by ID or key. | id | View Entries from Admin Area |
| formidable-forms/create-entry | Create an entry for a form. | form_id | Add Entries from Admin Area |
| formidable-forms/update-entry | Update an entry and its field values. | id | Edit Entries from Admin Area |
| formidable-forms/delete-entry | Permanently delete an entry. | id | Delete Entries from Admin Area |
Fields
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/list-fields | List the fields in a form. | form_id | View Forms List |
| formidable-forms/create-field | Add a field and its supported options to a form. | form_id, type | Add and Edit Forms |
| formidable-forms/update-field | Update a field. | id | Add and Edit Forms |
| formidable-forms/delete-field | Permanently delete a field. | id | Delete Forms |
For a complex field, call list-fields after creation. Reuse the returned field_options API structure when you make later changes. The WordPress field settings panel doesn't show this structure as an object.
Statistics
This ability is available on the Basic, Plus, Business, and Elite licenses.
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/get-stats | Calculate a supported statistic for one or more fields. | type, field_id | View Entries from Admin Area |
Styles and style assignment
Formidable Forms Lite registers list-styles, get-style, and update-style. Formidable Forms Pro adds create-style, delete-style, and assign-style-to-form.
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/list-styles | List Formidable styles. | None | View Forms List |
| formidable-forms/get-style | Get one style by ID or post name. | id | View Forms List |
| formidable-forms/create-style | Create a style. | None | Access this Settings Page |
| formidable-forms/update-style | Update a style. | id | Access this Settings Page |
| formidable-forms/delete-style | Permanently delete a non-default style. | id | Access this Settings Page |
| formidable-forms/assign-style-to-form | Assign a style to a form. | form_id, style_id | Add and Edit Forms |
Use the numeric style ID or the post_name value returned by list-styles. post_name is the style's internal CSS scope slug. It isn't the style name shown under Formidable → Styles.
Form actions
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/list-form-actions | List the actions attached to a form. | form_id | View Forms List |
| formidable-forms/get-form-action | Get one form action. | id | View Forms List |
| formidable-forms/create-form-action | Create a form action. | form_id, type | Add and Edit Forms |
| formidable-forms/update-form-action | Update a form action. | id | Add and Edit Forms |
| formidable-forms/delete-form-action | Permanently delete a form action. | id | Delete Forms |
Form action input uses API values. These values don't always match the labels under Formidable → Forms → [form] → Settings → Actions & Notifications. For example, the API type api appears as Send API Data.
The post_status value publish turns an action on. The value draft turns it off.
Inspect an existing action of the same type before you create or update one. Read the action back after the change.
Payments
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/list-payments | List payments, optionally filtered by form and status. | None | View Entries from Admin Area |
| formidable-forms/get-payment | Get one payment by ID. | id | View Entries from Admin Area |
| formidable-forms/refund-payment | Refund a payment through its original gateway (Stripe, Square, or PayPal). | id | Edit Entries from Admin Area |
| formidable-forms/delete-payment | Delete Formidable's record of a payment. It doesn't refund the payment. | id | Administrator role |
Subscriptions
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/list-subscriptions | List subscriptions, optionally filtered by form and status. | None | View Entries from Admin Area |
| formidable-forms/get-subscription | Get one subscription by ID. | id | View Entries from Admin Area |
| formidable-forms/cancel-subscription | Cancel a subscription through its original gateway (Stripe, Square, or PayPal). | id | Edit Entries from Admin Area |
| formidable-forms/delete-subscription | Delete Formidable's record of a subscription. It doesn't cancel the subscription with the gateway. | id | Administrator role |
A refund or cancellation fails if the gateway declines it. To stop charging a customer, use cancel-subscription, not delete-subscription.
Applications
These abilities are available on the Basic, Plus, Business, and Elite licenses.
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/list-applications | List Applications with item counts and dates. | None | View Forms List |
| formidable-forms/get-application | Get one Application with item counts and dates. | application_id | View Forms List |
| formidable-forms/list-application-items | List the forms, Views, and pages in an Application. | application_id | View Forms List |
| formidable-forms/create-application | Create an Application. | name | Add and Edit Forms |
| formidable-forms/delete-application | Delete an Application without deleting its items. | application_id | Delete Forms |
| formidable-forms/add-item-to-application | Add a form, View, or page to an Application. | application_id, item_id, item_type | Add and Edit Forms |
| formidable-forms/remove-item-from-application | Remove a form, View, or page from an Application. | application_id, item_id, item_type | Add and Edit Forms |
A Formidable Application is a collection of forms, Views, and pages shown under Formidable → Applications. It isn't a WordPress Application Password.
Set the item_type API value to form, view, or page. Use list-application-items after a relationship change.
Views
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/list-views | List Views, optionally filtered by form. | None | Add/Edit Views |
| formidable-forms/get-view | Get a View configuration. | id | Add/Edit Views |
| formidable-forms/create-view | Create a Classic, Grid, Table, Map, Timeline, or Calendar View. | form_id | Add/Edit Views |
| formidable-forms/update-view | Update a View and its supported settings. | id | Add/Edit Views |
| formidable-forms/delete-view | Move a View to the trash. Its layout rows are kept. | id | Add/Edit Views |
Use all for the Classic View type in API input.
New Views are private by default. Use private for an unpublished View and publish for a public View. The schema accepts draft for compatibility with older data.
View layouts
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/list-view-layouts | List View layouts, optionally filtered by View and layout type. | None | Add/Edit Views |
| formidable-forms/get-view-layout | Get one View layout. | id | Add/Edit Views |
| formidable-forms/create-view-layout | Create or replace a listing or detail layout for a View. | view_id | Add/Edit Views |
| formidable-forms/update-view-layout | Update a View layout with an array of rows. | id, data | Add/Edit Views |
| formidable-forms/delete-view-layout | Permanently delete a View layout. | id | Add/Edit Views |
View layout abilities manage the row structure behind the Listing Page and Detail Page areas in the View editor. They don't represent a separate View Layouts screen.
The API value listing maps to Listing Page. The value detail maps to Detail Page.
Add-on abilities
The Formidable Coupons and Formidable Landing Pages add-ons each add 5 abilities to the formidable-forms category. They come with Formidable Coupons 1.1 and Formidable Landing Pages 1.0.04.
Coupons
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/list-coupons | List coupons, optionally filtered by text or by the form they can be used on. | None | Access this Settings Page |
| formidable-forms/get-coupon | Get one coupon by ID or coupon code. | id | Access this Settings Page |
| formidable-forms/create-coupon | Create a coupon with a flat or percentage discount. | name, code, amount | Access this Settings Page |
| formidable-forms/update-coupon | Update a coupon. A coupon that has been used keeps its code and amount. | id | Access this Settings Page |
| formidable-forms/delete-coupon | Permanently delete a coupon. Entries that used it keep the code. | id | Access this Settings Page |
Landing pages
| Ability | Purpose | Required input | Typical access |
|---|---|---|---|
| formidable-forms/list-landing-pages | List form landing pages. | None | View Forms List |
| formidable-forms/get-landing-page | Get the landing page of a form, or one landing page by its ID. | form or id | View Forms List |
| formidable-forms/save-landing-page | Create or update the landing page for a form. A form has at most one landing page. | form | Access this Settings Page |
| formidable-forms/update-landing-page | Update an existing landing page by its ID. | id | Access this Settings Page |
| formidable-forms/delete-landing-page | Delete a landing page (or move it to the trash) and turn off the form's landing page setting. | form or id | Access this Settings Page, and a WordPress role that can delete posts |
Apply the least privilege needed
Use a dedicated WordPress user for each integration, and give its role only the permissions the integration needs.
- Go to Formidable → Global Settings → Permissions.
- Under each required permission, select the dedicated user's WordPress role.
- Click Update to save your changes.
Each selection affects all users with that role. If the integration needs a unique permission set, create a custom role with a role-management plugin or custom code.
| Task family | Permission setting |
|---|---|
| View forms and fields | View Forms List |
| Create or update forms and fields | Add and Edit Forms |
| Delete forms and fields | Delete Forms |
| View entries and statistics | View Entries from Admin Area |
| Create entries | Add Entries from Admin Area |
| Update entries | Edit Entries from Admin Area |
| Delete entries | Delete Entries from Admin Area |
| List or get styles | View Forms List |
| Create, update, or delete styles | Access this Settings Page |
| Assign a style to a form | Add and Edit Forms |
| List or get form actions | View Forms List |
| Create or update form actions | Add and Edit Forms |
| Delete form actions | Delete Forms |
| List or get payments and subscriptions | View Entries from Admin Area |
| Refund payments or cancel subscriptions | Edit Entries from Admin Area |
| Delete payment or subscription records | The WordPress administrator role |
| List or get applications and their items | View Forms List |
| Create applications, or add and remove their items | Add and Edit Forms |
| Delete applications | Delete Forms |
| List, get, or change Views and View layouts | Add/Edit Views |
| List, get, or change coupons | Access this Settings Page |
| List or get landing pages | View Forms List |
| Save or update landing pages | Access this Settings Page |
| Delete landing pages | Access this Settings Page, and a WordPress role that can delete posts |
Administrators can run the registered operations. A dedicated non-administrator can run them when its role has the required permissions. The exception is deleting payment and subscription records, which needs the administrator role.
Use the same abilities through MCP
The Formidable MCP server exposes the abilities through 3 generic MCP tools. Use MCP when an AI client needs discovery, schema inspection, and execution through one standard connection.
Before a change, ask the client to inspect the target ability. After a change, ask it to use a separate get or list ability to verify the stored result.
Learn how to connect your AI agent with MCP, including installation, connection, and safe prompt examples.
Limitations
- The 51-ability catalog requires Formidable Forms Pro with an active license and Formidable Views. The Coupons and Landing Pages abilities need those add-ons too.
- Turning off Enable the Formidable MCP server also removes the Formidable abilities from the WordPress Abilities API.
- When a license expires past its grace period, the Pro and add-on abilities are removed. The Formidable Forms Lite abilities stay available.
- View schemas accept draft for compatibility. Use private or publish for normal View workflows.
- Form action payloads vary by action type and installed add-on. Inspect and verify the stored action.
- Create abilities aren't idempotent. Running one twice creates 2 objects. If a client loses a response, list existing objects before it retries the create.
- The Formidable delete, refund, and cancel abilities use POST with a JSON body, not DELETE.
- Schema discovery describes the interface. It doesn't replace an independent read-back after a change.