Spam Submissions API: Sample Flows

This article presents possible use cases and corresponding sample flows that you can support. It provides a useful starting point as you plan your implementation.

Manage a form's spam folder

Your app can show site owners the spam submissions of a form, so they can restore real submissions and clear out spam.

To manage a form's spam folder:

  1. Call Count Form Spam Submission Reports with the form IDs and namespace set to wix.form_app.form to show how many spam submissions each form has. Forms with no spam submission reports aren't included in the response.
  2. Call Query Form Spam Submission Reports By Namespace with a filter on namespace and formId. Sort by reportedDate in DESC order to show the newest reports first.
  3. For each report, show submissions, reportReason, and reportReasonDescription, so the site owner can decide whether it's spam.
  4. Call Bulk Report Not Spam Submission with the form ID and the IDs of the reports that aren't spam. Each restored submission gets a new submission ID, returned in results.itemMetadata.id.
  5. Call Bulk Delete Form Spam Submission Report with the form ID and the IDs of the remaining reports.

Let site owners mark submissions as spam

Your app can let site owners move unwanted submissions to the spam folder.

To let site owners mark submissions as spam:

  1. Call Query Submissions By Namespace to retrieve the form's submissions.
  2. When the site owner marks submissions as spam, call Bulk Report Spam Submission with the form ID, the submission IDs, and reportReason set to MANUALLY_REPORTED. The submissions are removed from the form's submissions, and a spam submission report is created for each one.

Clear spam flagged for a specific reason

Your app can delete all spam submission reports of a form that were flagged for the same reason, such as a blocklisted IP address.

To clear spam flagged for a specific reason:

  1. Call Bulk Delete Form Spam Submission Report By Filter with a filter that includes namespace, formId, and reportReason. If no reports match the filter, the call fails with a NOT_FOUND error.
  2. Pass the returned jobId to Get Async Job to check when the deletion is complete.

Last updated: 21 October 2026

Did this help?