Guide

Block Forms REST API

Custom REST routes under the prc-api/v3 namespace for form library admin, response admin, and public submission handlers.

Base path: /wp-json/prc-api/v3/

Auth summary

Capability / accessRoutes
Public (permission_callback returns true)POST form/send-to-email, POST form/log-response (still enforce captcha, rate limits, and recipient rules in the callback)
Form list capability (edit_posts on the form CPT, via Form_List::get_capability())GET form/library
prc_form_responses_capability (default manage_options)All form/responses* routes

Route index

MethodPathAccessPurpose
GET/form/libraryform list capForms DataViews library rows
GET/form/responsesresponses capPaginated response list
GET/form/responses/{id}responses capSingle response with fields
DELETE/form/responses/{id}responses capDelete one response
POST/form/responses/bulk-deleteresponses capDelete many responses
POST/form/responses/spamresponses capMove to/from spam
POST/form/responses/unreadresponses capMark read/unread
POST/form/send-to-emailpublicContact / email submission action
POST/form/log-responsepublicStore submission without email

GET /form/library

Powers Forms → All Forms.

Source: includes/class-forms-rest-controller.php

Reference

Query parameters

Typed options, defaults, and constraints in one scannable reference.
10 fields
page number
Page number.
per_page number
Rows per page (max 100).
search string
Search forms.
status string
Comma-separated post statuses.
orderby enum
Sort field.
order enum
Sort direction.
action string
Comma-separated action filter (list meta).
method string
Comma-separated method filter (list meta).
watchingOnly string
Pass `me` to restrict the query to forms the current user is watching.
activeEditors string
Pass `active` to restrict the query to forms with active Presence editors.

Headers: X-WP-Total, X-WP-TotalPages

Response counts (responses, unread) appear on each row only when the caller can manage form responses.

The route applies prc_wp_admin_dataview_query_args before WP_Query and prc_wp_admin_dataview_shape_row when shaping each row so Working on / Active editors / Watchers work on this custom restPath.

GET /form/responses

Powers Forms → Responses.

Source: includes/class-form-responses-rest-controller.php

Reference

Query parameters

Typed options, defaults, and constraints in one scannable reference.
9 fields
page number
Page number.
per_page number
Rows per page.
search string
Search response content / sender.
form_id number
Filter by form CPT ID.
form_name string
Filter by form name attribute.
status string
Filter by logged status string.
is_spam number
Spam folder when 1.
is_unread number
Unread filter; -1 means no filter.
order string
Sort direction.

Headers: X-WP-Total, X-WP-TotalPages, X-PRC-Inbox-Total, X-PRC-Spam-Total, X-PRC-Unread-Total

GET / DELETE /form/responses/{id}

Fetch or permanently delete one response.

POST /form/responses/bulk-delete

Body: { "ids": [1, 2] }

POST /form/responses/spam

Body: { "ids": [1, 2], "is_spam": true }

POST /form/responses/unread

Body: { "ids": [1, 2], "is_unread": false }

Viewing a response does not auto-mark it read.

POST /form/send-to-email

Public submission handler for the sendToEmail form action.

Source: includes/class-form-send-email.php

Validates fields, verifies Turnstile, applies rate limits, sends email, and logs the response.

POST /form/log-response

Public handler for the logResponse (Save Response) action.

Source: includes/class-form-response-log.php

Verifies Turnstile and applies per-IP rate limiting. Stores a row without sending email.

Was this helpful?