Lists the responses a web form received, newest first, paginated by cursor (limit up to 200). Without status it returns the real responses (success, and email_failed: stored but the notification email failed); status=rejected returns what the spam filters dropped (stored without its values), status=all everything. since (epoch ms) keeps only responses received at or after that time, for incremental syncs. Each response carries payload (field name → value, exactly as submitted), the notification result, the CRM lead it created (lead_id, lead_type, person_id) and the ad attribution captured by the MB Suite pixel; the browser (user_agent) comes with web_forms.submissions.get. The visitor's IP is never stored in clear and its hash is not returned. Not found if the form does not exist. Requires view access to Web Forms.
Scope
web_forms:read
Permission
View the module
MCP tool
web_forms_submissions_listOn the full surface; on the compact one, mb_execute_operation with id: "web_forms.submissions.list".
Declared cost: up to 203 reads and 0 writes per call (they count against the daily quota).
Parameters
form_idstringpathrequired
The form's id (from web_forms.forms.list, or the form_id that web_forms.forms.create returns).
limitintegerqueryoptional
How many items this page brings at most (see the maximum and the default in the schema).
Default: 50
cursorstringqueryoptional
The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.
statusenumqueryoptional
Omit for the real responses (success and email_failed); 'rejected' for what the spam filters dropped; 'all' for everything.
Values: success, email_failed, rejected, all
sinceintegerqueryoptional
Only responses received at or after this time (epoch milliseconds).
Returns one response of a web form: payload (field name → value), when and from which origin it arrived, its status (success, email_failed or rejected with rejection_reason), who got the notification email (notification_recipients, notification_routed_value), the auto-responder result, the CRM lead it created and its ad attribution. Not found (web_form_submission_not_found) if the response does not exist in that form. Requires view access to Web Forms.
Scope
web_forms:read
Permission
View the module
MCP tool
web_forms_submissions_getOn the full surface; on the compact one, mb_execute_operation with id: "web_forms.submissions.get".
Declared cost: up to 1 reads and 0 writes per call (they count against the daily quota).
Parameters
form_idstringpathrequired
The form's id (from web_forms.forms.list, or the form_id that web_forms.forms.create returns).
submission_idstringpathrequired
The response's id (from web_forms.submissions.list).
Deletes one response of a web form for good and rolls back the form's counters (for example, to honor a data deletion request). It does NOT go to the trash and cannot be undone; the notification email already sent and any CRM lead it created are not touched (delete the lead in the CRM if needed). Outside the screen it requires a dry run and a confirm_token. Requires edit access to Web Forms and, for a credential, deletion enabled.
Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.
Scope
web_forms:writeand “Allow deletions” (web_forms:delete in OAuth)
Permission
Edit in the module
MCP tool
web_forms_submissions_deleteOn the full surface; on the compact one, mb_execute_operation with id: "web_forms.submissions.delete".
Declared cost: up to 2 reads and 2 writes per call (they count against the daily quota).
Parameters
form_idstringpathrequired
The form's id (from web_forms.forms.list, or the form_id that web_forms.forms.create returns).
submission_idstringpathrequired
The response's id (from web_forms.submissions.list).
Deletes up to 500 responses of one web form for good (ids that do not exist are skipped) and rolls back the form's counters. They do NOT go to the trash and cannot be undone; notification emails already sent and CRM leads already created are not touched. Outside the screen it requires a dry run (which counts what exists) and a confirm_token. Returns how many were deleted. Requires edit access to Web Forms and, for a credential, deletion enabled.
Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.
Scope
web_forms:writeand “Allow deletions” (web_forms:delete in OAuth)
Permission
Edit in the module
MCP tool
web_forms_submissions_bulk_deleteOn the full surface; on the compact one, mb_execute_operation with id: "web_forms.submissions.bulk.delete".
Declared cost: up to 502 reads and 501 writes per call (they count against the daily quota).
Parameters
form_idstringpathrequired
The form's id (from web_forms.forms.list, or the form_id that web_forms.forms.create returns).
submission_idsarray<string>bodyrequired
The responses' ids (1 to 500), from web_forms.submissions.list.
Sends the notification email of one response again, with the form's current recipients and routing, through Amazon SES (for example after fixing to_emails when the first send failed). Updates the response's email status: a successful re-send marks an email_failed response as success. A rejected response cannot be re-sent (web_form_submission_rejected: it was stored without its values). Returns sent=false with the error instead of failing. Sends a real email. Outside the app it always runs in two steps: dry_run=true says to whom it goes (and, for a test submission, whether it creates a CRM lead and where the auto-reply goes) with the same checks and a confirm_token (10 minutes); then call it again with the confirm_token. Requires edit access to Web Forms.
Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.
Scope
web_forms:write
Permission
Edit in the module
MCP tool
web_forms_submissions_resend_notificationOn the full surface; on the compact one, mb_execute_operation with id: "web_forms.submissions.resend_notification".
Declared cost: up to 2 reads and 1 writes per call (they count against the daily quota). Touches an external platform (ses): it counts against the external operations quota.
Parameters
form_idstringpathrequired
The form's id (from web_forms.forms.list, or the form_id that web_forms.forms.create returns).
submission_idstringpathrequired
The response's id (from web_forms.submissions.list).
With a test API key the request always goes to your practice organization: example data you can reset.In the practice organization this operation is not simulated (it reaches another platform): it answers 409 sandbox_external_unavailable.
Record a test of the form made through the public endpoint
web_forms.submissions.record_test
WriteIdempotentSince 2026-11-01
Records in the audit log a test of the form made through the public endpoint (POST https://mb-suite.com/api/v1/public/forms/submit from one of the form's allowed origins, which goes through the origin check, the rate limits, the honeypot and the CAPTCHA like any visitor) and marks the response with tested_by. Send the submission_id the endpoint returned (it returns one only when the response came in). The response must be of that form, must have come in through the endpoint (a test from the editor or web_forms.forms.test_submit, origin __test__, gives 409 web_form_submission_is_test; a rejected one, 409 web_form_submission_rejected) and must have been received in the last 15 minutes (409 web_form_submission_too_old). note (optional, one line) says what was tested. The audit entry (web_forms.test_submit) is under the person behind the credential, with submittedVia public_endpoint, the response's origin, whether the notification email went out (email_sent) and whether a CRM lead was created (lead_created). Recording the same response again changes nothing (changed false) and does not audit again. It sends nothing and creates nothing. 404 web_form_not_found or web_form_submission_not_found. Requires edit access to Web Forms.
Scope
web_forms:write
Permission
Edit in the module
MCP tool
web_forms_submissions_record_testOn the full surface; on the compact one, mb_execute_operation with id: "web_forms.submissions.record_test".
Declared cost: up to 2 reads and 1 writes per call (they count against the daily quota).
Parameters
form_idstringpathrequired
The form's id (from web_forms.forms.list, or the form_id that web_forms.forms.create returns).
submission_idstringpathrequired
The response's id (from web_forms.submissions.list).
notestringbodyoptional
What the test checked, in one line (up to 500 characters): it is stored on the response and in the audit entry.