Docs & Support

Learn about all the Formidable features and get support from our amazing customer success team.

Developer Documentation
Use the Formidable Abilities API

Use the Formidable Abilities API

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.

The Formidable Abilities API is part of Formidable Forms 7.0 and newer, including Formidable Forms Lite. Earlier versions included it in the Formidable API add-on.

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.

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.

  1. Go to Formidable → Global Settings → MCP.
  2. Toggle on Enable the Formidable MCP server.
  3. 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.

If the Formidable API add-on is active, update it to its latest version. An older copy of the add-on registers the abilities itself and keeps the setting under Global Settings → API.

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.

Protect your credentials: Store the Application Password in a protected client setting. Don't put it in source code, a browser URL, a shared document, or an AI conversation.

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 behaviorMethodInput location
Read-onlyGETInput query parameters in bracket notation, such as input[id]=12.
Destructive and idempotentDELETEInput query parameters in bracket notation.
Any other ability that changes dataPOSTJSON body with an input property.

The execution route is:

/wp-json/wp-abilities/v1/abilities/formidable-forms/ABILITY-NAME/run

Every 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

Important: Test create, update, and delete abilities on a staging site. After each change, verify the stored result with a separate get or list ability.

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.

FamilyLiteProViews
Forms500
Entries320
Fields400
Statistics010
Styles and style assignment330
Form actions500
Payments400
Subscriptions400
Applications070
Views005
View layouts005
Total281310

Forms

AbilityPurposeRequired inputTypical access
formidable-forms/list-formsList forms with optional search, sorting, and pagination.NoneView Forms List
formidable-forms/get-formGet one form by ID or key.idView Forms List
formidable-forms/create-formCreate a form and optionally include fields.nameAdd and Edit Forms
formidable-forms/update-formUpdate a form and its supported settings.idAdd and Edit Forms
formidable-forms/delete-formPermanently delete a form.idDelete Forms

Entries

Formidable Forms Lite registers list-entries, get-entry, and delete-entry. Formidable Forms Pro adds create-entry and update-entry.

AbilityPurposeRequired inputTypical access
formidable-forms/list-entriesList entries with optional form, date, search, sort, is_draft, and pagination filters.NoneView Entries from Admin Area
formidable-forms/get-entryGet one entry by ID or key.idView Entries from Admin Area
formidable-forms/create-entryCreate an entry for a form.form_idAdd Entries from Admin Area
formidable-forms/update-entryUpdate an entry and its field values.idEdit Entries from Admin Area
formidable-forms/delete-entryPermanently delete an entry.idDelete Entries from Admin Area

Fields

AbilityPurposeRequired inputTypical access
formidable-forms/list-fieldsList the fields in a form.form_idView Forms List
formidable-forms/create-fieldAdd a field and its supported options to a form.form_id, typeAdd and Edit Forms
formidable-forms/update-fieldUpdate a field.idAdd and Edit Forms
formidable-forms/delete-fieldPermanently delete a field.idDelete 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.

In Formidable Forms 7.0, list-fields returns an error for a form that has a default value in a Checkboxes, Name, or Address field. Remove that default value to list the form's fields. A fix is planned for a later release.

Statistics

— Premium Feature —

This ability is available on the Basic, Plus, Business, and Elite licenses.

AbilityPurposeRequired inputTypical access
formidable-forms/get-statsCalculate a supported statistic for one or more fields.type, field_idView 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.

AbilityPurposeRequired inputTypical access
formidable-forms/list-stylesList Formidable styles.NoneView Forms List
formidable-forms/get-styleGet one style by ID or post name.idView Forms List
formidable-forms/create-styleCreate a style.NoneAccess this Settings Page
formidable-forms/update-styleUpdate a style.idAccess this Settings Page
formidable-forms/delete-stylePermanently delete a non-default style.idAccess this Settings Page
formidable-forms/assign-style-to-formAssign a style to a form.form_id, style_idAdd 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

AbilityPurposeRequired inputTypical access
formidable-forms/list-form-actionsList the actions attached to a form.form_idView Forms List
formidable-forms/get-form-actionGet one form action.idView Forms List
formidable-forms/create-form-actionCreate a form action.form_id, typeAdd and Edit Forms
formidable-forms/update-form-actionUpdate a form action.idAdd and Edit Forms
formidable-forms/delete-form-actionPermanently delete a form action.idDelete 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

AbilityPurposeRequired inputTypical access
formidable-forms/list-paymentsList payments, optionally filtered by form and status.NoneView Entries from Admin Area
formidable-forms/get-paymentGet one payment by ID.idView Entries from Admin Area
formidable-forms/refund-paymentRefund a payment through its original gateway (Stripe, Square, or PayPal).idEdit Entries from Admin Area
formidable-forms/delete-paymentDelete Formidable's record of a payment. It doesn't refund the payment.idAdministrator role

Subscriptions

AbilityPurposeRequired inputTypical access
formidable-forms/list-subscriptionsList subscriptions, optionally filtered by form and status.NoneView Entries from Admin Area
formidable-forms/get-subscriptionGet one subscription by ID.idView Entries from Admin Area
formidable-forms/cancel-subscriptionCancel a subscription through its original gateway (Stripe, Square, or PayPal).idEdit Entries from Admin Area
formidable-forms/delete-subscriptionDelete Formidable's record of a subscription. It doesn't cancel the subscription with the gateway.idAdministrator role

A refund or cancellation fails if the gateway declines it. To stop charging a customer, use cancel-subscription, not delete-subscription.

Applications

— Premium Feature —

These abilities are available on the Basic, Plus, Business, and Elite licenses.

AbilityPurposeRequired inputTypical access
formidable-forms/list-applicationsList Applications with item counts and dates.NoneView Forms List
formidable-forms/get-applicationGet one Application with item counts and dates.application_idView Forms List
formidable-forms/list-application-itemsList the forms, Views, and pages in an Application.application_idView Forms List
formidable-forms/create-applicationCreate an Application.nameAdd and Edit Forms
formidable-forms/delete-applicationDelete an Application without deleting its items.application_idDelete Forms
formidable-forms/add-item-to-applicationAdd a form, View, or page to an Application.application_id, item_id, item_typeAdd and Edit Forms
formidable-forms/remove-item-from-applicationRemove a form, View, or page from an Application.application_id, item_id, item_typeAdd 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

AbilityPurposeRequired inputTypical access
formidable-forms/list-viewsList Views, optionally filtered by form.NoneAdd/Edit Views
formidable-forms/get-viewGet a View configuration.idAdd/Edit Views
formidable-forms/create-viewCreate a Classic, Grid, Table, Map, Timeline, or Calendar View.form_idAdd/Edit Views
formidable-forms/update-viewUpdate a View and its supported settings.idAdd/Edit Views
formidable-forms/delete-viewMove a View to the trash. Its layout rows are kept.idAdd/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

AbilityPurposeRequired inputTypical access
formidable-forms/list-view-layoutsList View layouts, optionally filtered by View and layout type.NoneAdd/Edit Views
formidable-forms/get-view-layoutGet one View layout.idAdd/Edit Views
formidable-forms/create-view-layoutCreate or replace a listing or detail layout for a View.view_idAdd/Edit Views
formidable-forms/update-view-layoutUpdate a View layout with an array of rows.id, dataAdd/Edit Views
formidable-forms/delete-view-layoutPermanently delete a View layout.idAdd/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

AbilityPurposeRequired inputTypical access
formidable-forms/list-couponsList coupons, optionally filtered by text or by the form they can be used on.NoneAccess this Settings Page
formidable-forms/get-couponGet one coupon by ID or coupon code.idAccess this Settings Page
formidable-forms/create-couponCreate a coupon with a flat or percentage discount.name, code, amountAccess this Settings Page
formidable-forms/update-couponUpdate a coupon. A coupon that has been used keeps its code and amount.idAccess this Settings Page
formidable-forms/delete-couponPermanently delete a coupon. Entries that used it keep the code.idAccess this Settings Page

Landing pages

AbilityPurposeRequired inputTypical access
formidable-forms/list-landing-pagesList form landing pages.NoneView Forms List
formidable-forms/get-landing-pageGet the landing page of a form, or one landing page by its ID.form or idView Forms List
formidable-forms/save-landing-pageCreate or update the landing page for a form. A form has at most one landing page.formAccess this Settings Page
formidable-forms/update-landing-pageUpdate an existing landing page by its ID.idAccess this Settings Page
formidable-forms/delete-landing-pageDelete a landing page (or move it to the trash) and turn off the form's landing page setting.form or idAccess 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.

  1. Go to Formidable → Global Settings → Permissions.
  2. Under each required permission, select the dedicated user's WordPress role.
  3. 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 familyPermission setting
View forms and fieldsView Forms List
Create or update forms and fieldsAdd and Edit Forms
Delete forms and fieldsDelete Forms
View entries and statisticsView Entries from Admin Area
Create entriesAdd Entries from Admin Area
Update entriesEdit Entries from Admin Area
Delete entriesDelete Entries from Admin Area
List or get stylesView Forms List
Create, update, or delete stylesAccess this Settings Page
Assign a style to a formAdd and Edit Forms
List or get form actionsView Forms List
Create or update form actionsAdd and Edit Forms
Delete form actionsDelete Forms
List or get payments and subscriptionsView Entries from Admin Area
Refund payments or cancel subscriptionsEdit Entries from Admin Area
Delete payment or subscription recordsThe WordPress administrator role
List or get applications and their itemsView Forms List
Create applications, or add and remove their itemsAdd and Edit Forms
Delete applicationsDelete Forms
List, get, or change Views and View layoutsAdd/Edit Views
List, get, or change couponsAccess this Settings Page
List or get landing pagesView Forms List
Save or update landing pagesAccess this Settings Page
Delete landing pagesAccess 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.
Was this article helpful? *

This article may contain affiliate links. Once in a while, we earn commissions from those links. But we only recommend products we like, with or without commissions.

In this article

    We have a small, but amazing team of dedicated people who are committed to helping you achieve your goals and project requirements.


    Copyright © 2026 Strategy11, LLC. Formidable Forms® is a registered trademark Strategy11, LLC.

    Complete your purchase
    Don't forget your purchase!
    Complete Purchase
    Join 400,000+ using Formidable Forms to create form-focused solutions fast. Get Formidable Forms