AIサマリー
WPForms 1.9.9 では、WordPress Abilities API を基盤とした読み取り専用の REST API が導入されました。この API を使用すると、フォームの一覧表示、フォーム設定の取得、エントリの取得や検索、フォーム統計情報の取得を、任意の HTTP クライアント、コマンドライン、独自の PHP コード、あるいは Model Context Protocol (MCP) に対応した AI アシスタントから行うことができます。
「WPForms REST API」と検索してこのページにたどり着いたなら、まさにここがそれです。独立したREST APIは存在しません。Abilities APIとの連携こそが、WPFormsがHTTP経由でデータを公開する仕組みなのです。
Abilities API とは
Abilities APIは、WordPress 6.9で追加されたWordPressのコア機能です。これにより、プラグインは個別の権限( 能力) に、名前、入力スキーマ、出力スキーマ、および権限コールバックを指定します。その後、WordPress は登録されたすべての機能を、REST API 経由で自動的に公開します。 /wp-json/wp-abilities/v1/abilities/<ability>/run また、公式のMCPアダプタープラグインを通じて、MCP互換のAIクライアントとも連携します。
WPFormsは、 wpforms/ 名前空間。各機能では、管理画面で使用されているのと同じWPFormsの権限チェックが実行されます(wpforms_current_user_can())、したがって、RESTおよびMCPインターフェースは、新しい権限モデルを導入するのではなく、既存の権限モデルを継承します。
必要条件
- WordPress 6.9 以降
- WPForms Lite または Pro バージョン 1.9.9 以降(一部の機能は Pro 版限定です。詳細は以下の参照表をご覧ください)
- MCPをご利用のお客様へ:wordpress/mcp-adapterプラグイン
アビリティを発動する
すべての能力は、2つの方法を通じて発動できます。結果は同じですので、発動する状況に合わせてどちらかを選択してください。
REST API
認証済みの GET ~への依頼 /wp-json/wp-abilities/v1/abilities/<ability>/run. WPFormsのすべての機能は読み取り専用であるため、 GET が受け入れられます; POST 戻り値 405 Method Not Allowed.
注: パラメータを、 input 例えば、key input[limit]=10&input[status]=publish. クライアントが自動的にURLエンコードを行わない場合は、括弧をURLエンコードしてください(%5B にとって [, %5D にとって ]).
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/list-forms/run?input%5Blimit%5D=10&input%5Bstatus%5D=publish"
PHP
`wp_load_theme` の後に実行されるプラグイン、テーマ、またはカスタムコードから wp_abilities_api_init アクションが発動したため、以下の方法でその能力を取得する wp_get_ability() そして、その execute() メソッド。入力は、パラメータの連想配列として渡します(各能力のパラメータ表に記載されているのと同じ名前を使用してください)。
$ability = wp_get_ability( 'wpforms/list-forms' );
if ( $ability ) {
$result = $ability->execute(
[
'limit' => 10,
'status' => 'publish',
]
);
if ( is_wp_error( $result ) ) {
// Handle error.
return;
}
// $result['forms'] array of form summaries
// $result['total'] total count (integer)
}
認証
RESTトランスポートでは、標準のWordPress認証が使用されます。外部クライアントには、「アプリケーションパスワード」の使用をお勧めします。これはWordPressのコア機能として組み込まれており、追加のプラグインは不要です。
アプリケーションパスワードの生成
- 呼び出しを実行する権限を持つWordPressユーザーとしてログインしてください。
- 「ユーザー」>「プロフィール」に移動し、「アプリケーション用パスワード」セクションまでスクロールします。
- 統合の名前を入力し、「新しいアプリケーションパスワードを追加」をクリックします。
- 生成されたパスワードをコピーしてください。WordPressでは一度しか表示されません。
アプリケーションパスワードをプログラムで管理するためのRESTエンドポイントなど、より詳細な情報については、WordPressコアチームの「アプリケーションパスワード統合ガイド」を参照してください。
認証情報の送信
すべてのリクエストにおいて、ユーザー名とアプリケーションのパスワードをHTTPベーシック認証として渡してください。
curl を使用して
このドキュメントのサンプルをそのまま実行できるように、サイトのURLを環境変数として設定してください:
export WP_SITE="https://your-wordpress-site.com"
次に、 -u すべての curl コマンドにこのフラグを指定します。フラグの値は、ユーザー名、コロン、アプリケーションパスワードの順で指定します(スペースは入れないでください)。
Postman、Insomnia、またはその他のクライアントを使用して
リクエストの認証タイプを「Basic Auth」に設定し、ユーザー名とアプリケーションパスワードを入力してください。エンコード処理はクライアント側が自動的に行います。
ヘッダーを手動で設定する
認証情報をBase64エンコードして送信してください Authorization ヘッダー:
ユーザー名とアプリケーションのパスワードをコロン(スペースなし)で区切って1つの文字列にまとめ、任意のツールを使用してその結果をBase64エンコードしてください(base64 コマンド、オンラインエンコーダー、または使用している言語の標準ライブラリなど)。エンコードされた値を、すべてのリクエストで Authorization ヘッダー、以下の形式で Authorization: Basic <encoded>.
このドキュメントの残りの部分にあるリクエスト例では、読みやすさを考慮して認証フラグを省略しています。 -u flag(または Authorization (ヘッダー)をすべての実リクエストに含めるか、APIは 401 Unauthorized.
権限
各機能は、実行前に特定のWPFormsの権限を確認します。確認に失敗した場合、 WP_Error HTTPステータスコード 403.
| 能力 | 機能 |
|---|---|
wpforms/list-forms | view_forms |
wpforms/get-form | view_form_single |
wpforms/get-form-stats (ライト) | view_form_single |
wpforms/get-form-stats (プロ) | view_entries_form_single |
wpforms/get-entry-summaries | view_entries_form_single |
wpforms/get-entry | view_entry_single |
wpforms/search-entries (~とともに) form_id) | view_entries_form_single |
wpforms/search-entries (なし form_id) | view_entries |
アビリティ一覧
すべての関数は読み取り専用かつ冪等です。エラーは次のように返されます WP_Error JSONにシリアライズされたオブジェクト code, messageそして data.status の分野だ。
wpforms/フォーム一覧
要約メタデータ付きのリストを表示します。Lite版およびPro版で利用可能です。
パラメータ
| 名称 | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
status | ストリング | いいえ | publish | フォームの状態。そのうちの1つ publish, draft, trash. |
limit | 整数 | いいえ | 20 | 返すフォームの最大数。範囲は1から100です。 |
offset | 整数 | いいえ | 0 | スキップするフォームの数。 |
リクエスト例
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/list-forms/run?input%5Blimit%5D=10&input%5Bstatus%5D=publish"
回答例
{
"forms": [
{
"id": 123,
"title": "Contact Form",
"status": "publish",
"created": "2026-01-27 10:00:00",
"modified": "2026-02-15 14:30:00",
"author": 1
}
],
"total": 5
}
wpforms/get-form
特定のフォームを1つ取得します。これには、設定の一部(厳選されたもの)および(オプションで)フィールド構成が含まれます。Lite版およびPro版で利用可能です。
パラメータ
| 名称 | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
form_id | 整数 | はい | - | 取得するフォームのID。 |
include_fields | ブール値 | いいえ | true | レスポンスにフォームのフィールド設定を含める。 |
リクエスト例
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/get-form/run?input%5Bform_id%5D=123&input%5Binclude_fields%5D=true"
回答例
{
"id": 123,
"title": "Contact Form",
"status": "publish",
"created": "2026-01-27 10:00:00",
"modified": "2026-02-15 14:30:00",
"author": 1,
"settings": {
"form_title": "Contact Form",
"form_desc": "Get in touch with us",
"submit_text": "Submit",
"ajax_submit": true,
"honeypot": true,
"antispam": true
},
"fields": [
{
"id": 1,
"type": "text",
"label": "Name",
"description": "",
"required": true,
"size": "medium"
}
]
}
について settings この機能によって返されるオブジェクトは、厳選された機密性のないサブセット(タイトル、説明、送信テキスト、AJAX送信フラグ、ハニーポット、スパム対策)です。通知、確認、および連携の設定は公開されません。
wpforms/フォーム統計を取得
フォームの送信統計情報を返す。返されるデータの形式は、Lite版とPro版で異なる。
パラメータ
| 名称 | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
form_id | 整数 | はい | - | フォームのID。 |
リクエスト例
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/get-form-stats/run?input%5Bform_id%5D=123"
ライト・レスポンス
{
"form_id": 123,
"entries_available": false,
"message": "Entry statistics require WPForms Pro. Upgrade to access detailed form submission data."
}
プロ・レスポンス
{
"form_id": 123,
"total_entries": 156,
"unread_entries": 12,
"starred_entries": 8,
"entries_available": true
}
wpforms/エントリー概要を取得
単一のフォームに対するエントリ要約のページ分割リスト。Pro版限定。
パラメータ
| 名称 | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
form_id | 整数 | はい | - | エントリを取得するフォームのID。 |
status | ストリング | いいえ | "" | その一つは partial, abandoned, spam, trash. 空の文字列を指定すると、完了したすべてのエントリが返されます。 |
type | ストリング | いいえ | "" | その一つは read, unread, starred. |
include_fields | ブール値 | いいえ | false | 各エントリのフィールド値をレスポンスに含める。 |
limit | 整数 | いいえ | 20 | 返すレコードの最大数。1~100の範囲で指定してください。 |
offset | 整数 | いいえ | 0 | スキップするエントリの数。 |
リクエスト例
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/get-entry-summaries/run?input%5Bform_id%5D=123&input%5Btype%5D=unread&input%5Blimit%5D=20"
回答例
{
"entries": [
{
"id": 456,
"form_id": 123,
"date": "2026-02-15 14:32:10",
"status": "",
"viewed": false,
"starred": true
}
],
"total": 15,
"form_id": 123
}
wpforms/get-entry
ID に基づいて 1 つのエントリを取得し、すべてのフィールド値を含めます。Pro 版限定。
パラメータ
| 名称 | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
entry_id | 整数 | はい | - | 取得するエントリのID。 |
include_fields | ブール値 | いいえ | true | レスポンスにエントリのフィールド値を含める。 |
リクエスト例
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/get-entry/run?input%5Bentry_id%5D=456"
回答例
{
"id": 456,
"form_id": 123,
"date": "2026-02-15 14:32:10",
"modified": "2026-02-15 15:00:00",
"status": "",
"viewed": true,
"starred": false,
"ip_address": "192.168.1.100",
"fields": [
{
"id": 1,
"name": "Name",
"value": "John Doe",
"type": "text"
}
]
}
レスポンス内のIPアドレスは非表示にできます。追加
add_filter( 'wpforms_abilities_mask_ip_address', '__return_true' )サイトのコードに追加してください。有効にすると、IPv4アドレスの最後の3オクテットがアスタリスクに置き換えられて表示されます(例:***.***.***.100).
wpforms/検索結果
1つのフォームまたはすべてのフォームを対象に、全文検索、フィールド指定、ステータス、日付範囲のフィルターを使用して検索できます。Pro版限定機能です。
パラメータ
| 名称 | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
form_id | 整数 | いいえ | - | 検索を1つのフォームに限定します。「省略」を選択すると、すべてのフォームを対象に検索します。 |
search | ストリング | いいえ | "" | すべての入力フィールドに対して全文検索が行われました。 |
field_id | 整数 | いいえ | - | 検索を特定のフィールドIDに限定します。以下のコマンドと組み合わせて使用してください field_value. |
field_value | ストリング | いいえ | - | で指定されたフィールドに一致する正確な値 field_id. |
date_from | ストリング | いいえ | - | 期間の開始日、形式 YYYY-MM-DD. |
date_to | ストリング | いいえ | - | 日付範囲の終了、書式 YYYY-MM-DD. |
status | ストリング | いいえ | "" | その一つは partial, abandoned, spam, trash. |
type | ストリング | いいえ | "" | その一つは read, unread, starred. |
include_fields | ブール値 | いいえ | true | レスポンスにエントリフィールドの値を含める。 |
limit | 整数 | いいえ | 20 | 1ページあたりの最大件数。1~100の範囲で指定してください。 |
page | 整数 | いいえ | 1 | ページ番号。なお、この機能は、とは異なり、ページ単位のページネーションを使用します。 list-forms そして get-entry-summaries、これらは offset. |
orderby | ストリング | いいえ | date | その一つは entry_id, date, status. |
order | ストリング | いいえ | DESC | その一つは ASC, DESC. |
リクエスト例
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/search-entries/run?input%5Bform_id%5D=5&input%5Bsearch%5D=john%40example.com&input%5Bpage%5D=1&input%5Blimit%5D=20"
回答例
{
"entries": [
{
"id": 142,
"form_id": 5,
"date": "2026-02-15 14:32:10",
"status": "",
"viewed": false,
"starred": true,
"fields": [
{ "id": 1, "name": "Name", "value": "John Doe", "type": "text" },
{ "id": 2, "name": "Email", "value": "[email protected]", "type": "email" }
]
}
],
"total": 47,
"total_pages": 5,
"page": 1,
"limit": 20
}
MCPクライアントとのWPFormsの活用
WPFormsのすべての機能は、 mcp.public 設定する trueつまり、WordPressサイトが wordpress/mcp-adapter プラグイン。インストール後は、WPForms側での追加設定は不要です。機能はクライアントのツールリスト内の WPForms カテゴリに属し、REST API で使用されているのと同じ権限コールバックを遵守します。
プログラムによる能力の発見
サイト上で利用可能な機能を、IDをハードコーディングせずに列挙するには:
# サイトに登録されているすべての機能を一覧表示する
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities"
# 特定の機能のスキーマを取得する
curl "$WP_SITE/wp-json/wp-abilities/v1/abilities/wpforms/list-forms"
この応答には、各機能のID、ラベル、説明、カテゴリ、および完全な入力・出力スキーマが含まれており、WPForms固有の仕様に関する予備知識がなくても、汎用的なクライアントを構築するのに十分な情報となっています。
関連リンク
- WordPress Abilities APIのご紹介(developer.wordpress.org)
- GitHub上のwordpress/mcp-adapter
- モデルコンテキストプロトコル