Docs & Support

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

Developer Documentation
Formidable REST API endpoint reference

Formidable REST API endpoint reference

Formidable API Add-On 2.0 uses /frm/v3 as the current REST namespace. It includes forms, entries, fields, statistics, Views, styles, form actions, style assignment, Applications, and View layouts.

The add-on keeps /frm/v2 as a frozen legacy namespace for existing integrations. Use /frm/v3 for new integrations.

Important: Test write operations on a staging site and verify the stored result before production use.

Requirements

  • Formidable Forms Pro and Formidable API Add-On 2.0 installed and activated.
  • A Formidable license that includes the API Add-On. The current knowledgebase lists Business or higher.
  • REST API turned on under Formidable → Global Settings → API.
  • A WordPress user whose role has the required Formidable permission.
  • Formidable Views for View and View-layout routes.
  • HTTPS and a WordPress Application Password for external user-scoped requests.

Formidable Forms makes advanced site building simple. Launch forms, directories, dashboards, and custom WordPress apps faster than ever before.

Choose the REST namespace

NamespaceUse
/wp-json/frm/v3Current full API surface. Use it for new integrations and new 2.0 resources.
/wp-json/frm/v2Frozen legacy surface. Keep it for existing integrations that depend on the old routes and response behavior.

New endpoints and behavior changes are added only to /frm/v3.

Install the API Add-On and enable the REST API

  1. Install and activate Formidable Forms Pro.
  2. Go to Formidable → Add-Ons.
  3. Find Formidable API, then install and activate it.
  4. Go to Formidable → Global Settings → API.
  5. Turn on REST API.
  6. Click Update.

When REST API is off, Formidable does not register the /frm/v2 or /frm/v3 routes. The MCP Server can remain available because it has a separate setting.

Authenticate a request

Use HTTPS. Send a WordPress username and Application Password with HTTP Basic Authentication. This example lists styles:

curl --silent --show-error \
  --user "YOUR_USERNAME:YOUR_APPLICATION_PASSWORD" \
  "https://example.com/wp-json/frm/v3/styles"

An Application Password runs with the permissions of its WordPress user. Use a dedicated user with only the required Formidable permissions.

Existing integrations can also use the Formidable API Key shown under Formidable → Global Settings → API. The API key and a WordPress Application Password are different credentials. The legacy Formidable API key gives the request administrator access. Use an Application Password for a new version 3 integration. Do not put either credential in a public repository, browser URL, AI conversation, or shared document.

Configure the WordPress user's permissions

Go to Formidable → Global Settings → Permissions. Under each required permission, select the dedicated user's WordPress role, then click Update. Each selection affects all users with that role. If the integration needs a unique permission set, create a custom role with a WordPress role-management plugin or custom code.

REST operationPermission 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
View or change stylesAccess this Settings Page
View or change form actionsAdd and Edit Forms
Assign a style to a formAdd and Edit Forms
Manage Applications and Application itemsAdd/Edit Applications
List, create, update, or delete ViewsAdd/Edit Views
List or get View layoutsView Forms List
Create, update, or delete View layoutsAdd/Edit Views

A Formidable Application is a collection of forms, Views, and pages under Formidable → Applications. It is not a WordPress Application Password. In this article, client means the external software that sends the REST request.

Match REST resources to WordPress

The REST names describe resources in these WordPress admin areas. The locations do not replace the REST permission requirements.

REST resourceRelated WordPress admin area
FormsFormidable → Forms
FieldsOpen a form in the Form Builder.
EntriesOpen the form's Entries page.
StatisticsFormidable → Reports
StylesFormidable → Styles
Form actionsOpen a form, then go to Settings → Actions & Notifications.
Form style assignmentUse the Style column under Formidable → Forms or open the form's Style page.
ApplicationsFormidable → Applications
ViewsFormidable → Views
View layoutsOpen a View and use Layout Builder on the Listing Page or Detail Page.

The route tables and examples use API identifiers such as form_id, field_id, style_id, and item_type. They are not WordPress admin labels. Use the applicable list or get route to retrieve identifiers before you make a change. The ID and Key columns under Formidable → Forms and Formidable → Views provide the identifiers shown in those lists.

Review the current route families

All paths below are relative to /wp-json/frm/v3.

ResourceMethods and routesMain inputsProduct or access note
FormsGET, POST /forms
GET, POST, PUT, PATCH, DELETE /forms/{id}
List: page, page_size, order, order_by, search, return
Write: form name, description, status, options, and supported fields
Use View Forms List, Add and Edit Forms, or Delete Forms for the requested method. IDs can be numeric IDs or form keys where the schema permits.
FieldsGET, POST, PUT, PATCH /forms/{form_id}/fields
GET, PUT, PATCH, DELETE /forms/{form_id}/fields/{id}
Field type, label, order, required state, choice options, and field optionsUse View Forms List, Add and Edit Forms, or Delete Forms for the requested method. Version 3 normalizes supported field-type aliases.
EntriesGET, POST, PUT, PATCH /entries
GET, POST, PUT, PATCH /forms/{form_id}/entries
GET, PUT, PATCH, DELETE /entries/{id}
List: form_id, date, search, sort, is_draft, and pagination filters
Write: form and field values
Use the matching entry permission. The is_draft REST parameter filters saved draft entries.
StatisticsGET /stats/{type}/{field_id}Statistic type and one field ID, field key, or comma-separated listRequires View Entries from Admin Area.
StylesGET, POST /styles
GET, POST, PUT, PATCH, DELETE /styles/{id}
List: page, page_size, order, order_by, search
Write: name, post_content
Requires Access this Settings Page. Use default as the ID to retrieve the default style.
Form actionsGET, POST /form-actions
GET, POST, PUT, PATCH, DELETE /form-actions/{id}
List: form_id, type, post_status
Write: form, action type, title, status, and content
Requires Add and Edit Forms for reads and changes. The payload depends on the action type.
Form style assignmentPOST /form-styles/{form_id}style_idRequires Add and Edit Forms.
ApplicationsGET, POST /applications
GET, DELETE /applications/{id}
Create: nameRequires Add/Edit Applications.
Application itemsGET, POST, DELETE /applications/{id}/itemsitem_id, item_typeUse form, view, or page for item_type.
ViewsGET, POST /views
GET, POST, PUT, PATCH, DELETE /views/{id}
List: page, page_size, order, order_by, form_id
Write: form, name, type, content, status, options, and type-specific fields
Requires Formidable Views. Listing and changes use Add/Edit Views. See the current get-one permission limitation below. Use all for Classic. Other types are grid, table, map, timeline, and calendar.
View layoutsGET, POST /view-layouts
GET, POST, PUT, PATCH, DELETE /view-layouts/{id}
List: view_id, type
Write: view_id, type, data
Requires Formidable Views. Use listing for Listing Page and detail for Detail Page. Use an array of layout rows for data in new integrations.

List a resource

This example lists the actions attached to form ID 25:

curl --silent --show-error \
  --user "YOUR_USERNAME:YOUR_APPLICATION_PASSWORD" \
  "https://example.com/wp-json/frm/v3/form-actions?form_id=25&post_status="

An empty post_status includes actions that are on and off. post_status is a REST value. In Settings → Actions & Notifications, publish means that the action toggle is on. draft means that the toggle is off.

Create a resource

This example creates a style with Formidable's default style settings:

curl --silent --show-error \
  --request POST \
  --user "YOUR_USERNAME:YOUR_APPLICATION_PASSWORD" \
  --header "Content-Type: application/json" \
  --data '{
    "name": "API example style"
  }' \
  "https://example.com/wp-json/frm/v3/styles"

The Formidable → Styles editor does not display the internal post_content property names. Before you change style settings through REST, get a known style and use its returned post_content object as the starting point. Do not guess internal style property names.

Assign a style to a form

Set the style ID for a form:

curl --silent --show-error \
  --request POST \
  --user "YOUR_USERNAME:YOUR_APPLICATION_PASSWORD" \
  --header "Content-Type: application/json" \
  --data '{"style_id": 12}' \
  "https://example.com/wp-json/frm/v3/form-styles/25"

Replace 12 with the style ID returned by GET /styles. Replace 25 with the form ID or form key. Read the form after assignment to verify its current style.

Create a private View

Provide a form ID and View type. The API value all creates the Classic View type shown in Formidable. New Views are private by default.

curl --silent --show-error \
  --request POST \
  --user "YOUR_USERNAME:YOUR_APPLICATION_PASSWORD" \
  --header "Content-Type: application/json" \
  --data '{
    "form_id": 25,
    "name": "API example View",
    "type": "all",
    "status": "private"
  }' \
  "https://example.com/wp-json/frm/v3/views"

Use private for an unpublished View and publish for a public View. The API accepts draft for compatibility with older data.

Create or replace a View layout

The layout data is an array of rows. The API value listing maps to Listing Page in the View editor. The value detail maps to Detail Page. This example creates a two-column listing layout:

curl --silent --show-error \
  --request POST \
  --user "YOUR_USERNAME:YOUR_APPLICATION_PASSWORD" \
  --header "Content-Type: application/json" \
  --data '{
    "view_id": 42,
    "type": "listing",
    "data": [
      {
        "id": 0,
        "layout": 2,
        "boxes": [
          {"id": 1},
          {"id": 2}
        ]
      }
    ]
  }' \
  "https://example.com/wp-json/frm/v3/view-layouts"

The endpoint replaces the existing layout of the same type for that View. Read the layout after the request and confirm that its box IDs match the View content.

Choose REST, Abilities API, or MCP

InterfaceUse it when
/frm/v3 RESTAn external integration needs resource-oriented HTTP endpoints and explicit route contracts.
WordPress Abilities APIA system needs discoverable operations with schemas and behavior annotations.
Formidable MCP serverAn AI client needs to discover, inspect, and execute Formidable abilities through MCP.
Send API Data form actionA form must send data to an external service after an entry event.

The interfaces overlap, but they are not interchangeable. Confirm the schema, permission model, and credential for the interface you use.

Keep legacy version 2 integrations stable

Compatibility note: Do not replace /frm/v2 in an existing integration without a migration test. Version 2 remains available for backward compatibility, but it does not receive the full 2.0 route surface.

Notable version 2 boundaries include:

  • No update route for a form item.
  • Only the single-View GET route from the older View surface.
  • No styles, form actions, form style assignment, Applications, Application items, or View layouts.
  • Existing response and validation behavior remains frozen.

Create a version 3 request, compare its response with the version 2 integration, and update one workflow at a time.

Limitations

  • The REST API setting disables both /frm/v2 and /frm/v3.
  • Product-dependent routes register only when the matching Formidable Pro or Formidable Views classes are available.
  • The version 3 get-one View route has a current permission limitation for non-administrators. Neither View Forms List nor Add/Edit Views allows the request by itself because the route checks a separate permission that is not shown on the Formidable Permissions screen.
  • Form action content is type-specific. Inspect a known action and verify the saved result before automation.
  • View-layout writes accept an array, object, or JSON string. Use an array for new version 3 integrations and verify the normalized response.
  • View status draft exists for compatibility. Use private or publish for normal workflows.
  • Destructive examples are not included here. Test deletion and recovery on staging before production use.
  • A successful HTTP response is not a complete verification. Read the saved object through a separate request.
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