Developer Guide

Extensibility is not an afterthought in SnapForms — it’s the foundation. This guide documents a unified message bus, lifecycle hooks, and integration primitives designed for developers who want predictability, control, and long-term maintainability, not duct-taped workarounds.

Each business or organization is unique in some kind of way. At SnapForms, we are perfectly aware of this fact. Therefore, as software goes, we believe there is no “one size fits all” solution.

Custom development is often the only sane approach to uncommon needs. That is why SnapForms was built from the ground up with extensibility in mind.

We created filters and action hooks, providing developers with a way to create their own custom solutions, while still benefiting for all that SnapForms offers.

Action Hooks

Actions enable developers to execute their own custom code at specific points during the SnapForms’ runtime. To add an action, use the following actions:

snapforms.submission.new

SnapForms provides an action for detecting new form submissions. This action — snapforms.submission.new — is highly useful for triggering processes just when someone fills a form.

This action provides an array with the form’s ID and the new submission’s ID as its parameters. These parameters can then be used to check whether to run a process, or to obtain data from a filter.

PHP
add_action('snapforms.submission.new', function($args) {
	/* 
	* SnapForms provides a way to detect the ID which form was submitted and the ID of the new submission.
	* These parameters can then be used to check within your code, whether to run a process or not
	
	array $args = [
		"id_submission" => XXXXX
		"id_form" => YYYYY
	];	
	*/
	//Your own logic
});
PHP

snapforms.submission.edit

SnapForms provides an action for detecting edition to the submissions made by the users themselves.

This action provides an array with the form’s ID and the submission’s ID as its parameters. These parameters can then be used to check whether to run a process, or to obtain data from a filter.

PHP
add_action('snapforms.submission.edit', function($args) {
	/* 
	* SnapForms provides a way to detect the ID of the edited submission and its parent form ID.
	* These parameters can then be used to check within your code, whether to run a process or not
	
	array $args = [
		"id_submission" => XXXXX
		"id_form" => YYYYY
	];	
	*/
	//Your own logic
});
PHP

snapforms.submission.cancel

SnapForms provides an action for detecting when users cancels the submissions themselves.

This action provides an array with the form’s ID and the submission’s ID as its parameters. These parameters can then be used to check whether to run a process, or to obtain data from a filter.

PHP
add_action('snapforms.submission.cancel', function($args) {
	/* 
	* SnapForms provides a way to detect the ID of the canceled submission and its parent form ID
	* These parameters can then be used to check within your code, whether to run a process or not
	
	array $args = [
		"id_submission" => XXXXX
		"id_form" => YYYYY
	];	
	*/
	//Your own logic
});
PHP

snapforms.submission.approve

SnapForms provides an action for detecting form submissions approvals. These events are triggered by website administrators.

This action provides an array with the form’s ID and the submission’s ID as its parameters. These parameters can then be used to check whether to run a process, or to obtain data from a filter.

PHP
add_action('snapforms.submission.approve', function($args) {
	/* 
	* SnapForms provides a way to detect the ID of the approved submission and its parent form ID.
	* These parameters can then be used to check within your code, whether to run a process or not
	
	array $args = [
		"id_submission" => XXXXX
		"id_form" => YYYYY
	];	
	*/
	//Your own logic
});
PHP

snapforms.submission.reject

SnapForms provides an action for detecting form submissions rejections. These events are triggered by website administrators.

This action provides an array with the form’s ID and the submission’s ID as its parameters. These parameters can then be used to check whether to run a process, or to obtain data from a filter.

PHP
add_action('snapforms.submission.reject', function($args) {
	/* 
	* SnapForms provides a way to detect the ID of the rejected submission and its parent form ID.
	* These parameters can then be used to check within your code, whether to run a process or not
	
	array $args = [
		"id_submission" => XXXXX
		"id_form" => YYYYY
	];	
	*/
	//Your own logic
});
PHP

snapforms.submission.delete

SnapForms provides an action for detecting form submissions deletions. These events may be triggered by both users and website administrators.

This action provides an array with the form’s ID and the submission’s ID as its parameters. These parameters can then be used to check whether to run a process, or to obtain data from a filter.

PHP
add_action('snapforms.submission.delete', function($args) {
	/* 
	* SnapForms provides a way to detect the ID of the redacted submission and its parent form ID.
	* These parameters can then be used to check within your code, whether to run a process or not
	
	array $args = [
		"id_submission" => XXXXX
		"id_form" => YYYYY
	];	
	*/
	//Your own logic
});
PHP

Submission deletions don’t actually delete the submission records from the database. Instead, it can be better understood as a way to implement the GDPR’s “right to be forgotten“, redacting any personal or sensitive data, while preserving any data may still retain any operational value.

Filter Hooks

Filters allow developers to modify specific data or behavior, by calling a function from another plugin at will. Unlike actions, filters are not dependent of specific events to be triggered, they’re called by developers at any part of their own code.

snapforms_msgbus

SnapForms provides a unique filter — snapforms_msgbus. This filter serves a variety of purposes and works as an internal message bus, requiring an argument that behaves as a route and possesses an optional payload parameter too.

Through this implementation, SnapForms is able to introduce better predictability and harmonization across different endpoints.

PHP
/*
* string $route;
* array $payload (optional)
*/

apply_filters('snapforms_msgbus', $route, $payload);
PHP

Of course, not all endpoints/routes work exactly the same way. Some return data, while other don’t. Also important to keep in mind, that some endpoints that require a payload, while some do not.

PHP
$submission = apply_filters('snapforms_msgbus', "submission/".$id_form."/".$id_submission."/obtain")['data'] ?? null;
PHP

This filter’s response tries to mimick HTTP logic / semantic status codes in order to allow for better validation.
These status do not represent actual transport-layer HTTP responses.

200 | Success

A 200 status code is provided when the searched route exists.

HTML
array(2) {
  ["status"]=>
  array(2) {
    ["code"]=>
    int(200)
    ["text"]=>
    string(7) "Success"
  }
  ["data"]=>
  array(X) {ACTUAL DATA RESIDES HERE}
}
HTML

404 | Route not found

A 404 status code is provided when the searched route is not found.

HTML
array(2) {
  ["status"]=>
  array(2) {
    ["code"]=>
    int(404)
    ["text"]=>
    string(7) "Route not found"
  }
  ["data"]=> null,
}
HTML

Below, we provide the list of the currently available routes or endpoints:

Accessing Data

To obtain data related to a given form.

id_form

The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.

This parameter is interchangeable with the form_uuid payload parameter for the purpose of this endpoint.

form_uuid

The form_uuid parameter is the public equivalent to the id_form. It is meant to prevent enumeration attacks and hiding its size from users.

This parameter is interchangeable with the id_form path parameter for the purpose of this endpoint.

Example Response

The following is an example dump of a form:

HTML
array(2) {
  ["status"]=>
  array(2) {
    ["code"]=>
    int(200)
    ["text"]=>
    string(7) "success"
  }
  ["data"]=>
  array(17) {
    ["id_form"]=>
    string(1) "4"
    ["uuid"]=>
    string(12) "t5smkf3GNFM8"
    ["id_folder"]=>
    string(1) "1"
    ["folder"]=>
    array(2) {
      ["id_folder"]=>
      string(1) "1"
      ["uuid"]=>
      string(12) "t5smiiE9S9E4"
    }
    ["wp_page_id"]=>
    string(3) "629"
    ["form"]=>
    string(7) "Sign Up"
    ["pos"]=>
    NULL
    ["url"]=>
    array(2) {
      ["slug"]=>
      string(7) "sign-up"
      ["full"]=>
      string(50) "https://snapforms.tech/forms/demo-request/sign-up/"
    }
    ["is_template"]=>
    string(1) "0"
    ["menu"]=>
    array(1) {
      ["in_menu"]=>
      string(1) "1"
    }
    ["form_info"]=>
    array(5) {
      ["banner_img_url"]=>
      string(0) ""
      ["text_before"]=>
      string(0) ""
      ["text_after"]=>
      string(0) ""
      ["submit_button"]=>
      string(12) "Request Demo"
      ["text_postsubmit"]=>
      string(468) "Greetings, <span class="wildcard" contenteditable="false">{field:Name}</span>,

We are thankful for your interest in SnapForms.
You should receive a link within your email to proceed with your demo generation.

If you are unable to receive the sent email, you may access the form menu (through the available button below). There you may access it within your email logs for this registration, by clicking on the envelope icon.

Best regards,
The SnapForms Team"
    }
    ["active"]=>
    string(1) "1"
    ["intro"]=>
    array(2) {
      ["dt_intro"]=>
      string(19) "2025-11-15 17:26:39"
      ["id_subscriber"]=>
      string(1) "1"
    }
    ["update"]=>
    array(2) {
      ["dt_update"]=>
      string(19) "2025-12-08 11:57:50"
      ["id_subscriber"]=>
      string(1) "1"
    }
    ["ical"]=>
    array(0) {
    }
    ["waitlist"]=>
    array(0) {
    }
    ["registration"]=>
    array(4) {
      ["allow_edit"]=>
      string(1) "1"
      ["allow_cancel"]=>
      string(1) "1"
      ["unique_instance"]=>
      string(1) "1"
      ["allow_registration"]=>
      string(1) "1"
    }
  }
}
HTML

To obtain the fields list from a given form.

id_form

The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.

This parameter is interchangeable with the form_uuid payload parameter for the purpose of this endpoint.

id_field

The id_field parameter is an internal identifier for form fields. It is not meant to be shown to the public. When provided, shows the data of a single field, instead of providing the full list.

This parameter is interchangeable with the field_uuid payload parameter for the purpose of this endpoint.

form_uuid

The form_uuid parameter is the public equivalent to the id_form. It is meant to prevent enumeration attacks and hiding its size from users.

This parameter is interchangeable with the id_form path parameter for the purpose of this endpoint.

field_uuid

The field_uuid parameter is the public equivalent to the id_field. When provided, shows the data of a single field, instead of providing the full list.

This parameter is interchangeable with the id_field path parameter for the purpose of this endpoint.

Example Response

The following is an example dump of a form’s field list:

HTML
array(2) {
  ["status"]=>
  array(2) {
    ["code"]=>
    int(200)
    ["text"]=>
    string(7) "success"
  }
  ["data"]=>
  array(10) {
    [0]=>
    array(17) {
      ["id_form_field"]=>
      string(2) "15"
      ["uuid"]=>
      string(12) "t5smkf1JR9YB"
      ["id_form"]=>
      string(1) "4"
      ["field_name"]=>
      string(4) "Name"
      ["field_label"]=>
      string(18) "What is your name?"
      ["field_info"]=>
      string(0) ""
      ["field_type"]=>
      array(5) {
        ["field_type"]=>
        string(4) "name"
        ["render_type"]=>
        string(4) "text"
        ["label"]=>
        string(4) "Name"
        ["options"]=>
        int(0)
        ["name"]=>
        string(4) "name"
      }
      ["field_structure"]=>
      array(1) {
        ["dependencies"]=>
        array(0) {
        }
      }
      ["is_required"]=>
      bool(true)
      ["public"]=>
      bool(true)
      ["is_personal"]=>
      bool(true)
      ["is_sensitive"]=>
      bool(true)
      ["in_summary"]=>
      bool(true)
      ["active"]=>
      bool(true)
      ["pos"]=>
      string(1) "0"
      ["version"]=>
      string(36) "39abf40c-ef04-4f83-901e-fccabd5b4be0"
      ["dt_update"]=>
      string(19) "2025-12-15 16:45:07"
    }
    [1]=>
    array(17) {
      ["id_form_field"]=>
      string(2) "16"
      ["uuid"]=>
      string(12) "t5smkfPKWKN2"
      ["id_form"]=>
      string(1) "4"
      ["field_name"]=>
      string(10) "User Email"
      ["field_label"]=>
      string(44) "Which email would like for us to notify you?"
      ["field_info"]=>
      string(0) ""
      ["field_type"]=>
      array(5) {
        ["field_type"]=>
        string(5) "email"
        ["render_type"]=>
        string(5) "email"
        ["label"]=>
        string(5) "Email"
        ["options"]=>
        int(0)
        ["name"]=>
        string(5) "email"
      }
      ["field_structure"]=>
      array(1) {
        ["dependencies"]=>
        array(0) {
        }
      }
      ["is_required"]=>
      bool(true)
      ["public"]=>
      bool(true)
      ["is_personal"]=>
      bool(true)
      ["is_sensitive"]=>
      bool(false)
      ["in_summary"]=>
      bool(true)
      ["active"]=>
      bool(true)
      ["pos"]=>
      string(1) "1"
      ["version"]=>
      string(36) "feca0490-b7a2-4887-a3bf-be948939ac1b"
      ["dt_update"]=>
      string(19) "2025-11-15 17:26:39"
    }
    [2]=>
    array(17) {
      ["id_form_field"]=>
      string(2) "19"
      ["uuid"]=>
      string(12) "t5sn74BWQFS5"
      ["id_form"]=>
      string(1) "4"
      ["field_name"]=>
      string(7) "Company"
      ["field_label"]=>
      string(36) "What's your Company or Organization?"
      ["field_info"]=>
      string(0) ""
      ["field_type"]=>
      array(5) {
        ["field_type"]=>
        string(4) "text"
        ["render_type"]=>
        string(4) "text"
        ["label"]=>
        string(10) "Text Input"
        ["options"]=>
        int(0)
        ["name"]=>
        string(4) "text"
      }
      ["field_structure"]=>
      array(1) {
        ["dependencies"]=>
        array(0) {
        }
      }
      ["is_required"]=>
      bool(false)
      ["public"]=>
      bool(true)
      ["is_personal"]=>
      bool(false)
      ["is_sensitive"]=>
      bool(false)
      ["in_summary"]=>
      bool(true)
      ["active"]=>
      bool(true)
      ["pos"]=>
      string(1) "2"
      ["version"]=>
      string(36) "36c64a8c-dc52-4c3e-8858-0748dce4239b"
      ["dt_update"]=>
      string(19) "2025-11-15 17:46:30"
    }
    [3]=>
    array(17) {
      ["id_form_field"]=>
      string(2) "20"
      ["uuid"]=>
      string(12) "t5sngv7A4V4V"
      ["id_form"]=>
      string(1) "4"
      ["field_name"]=>
      string(8) "Industry"
      ["field_label"]=>
      string(37) "In which industry are you positioned?"
      ["field_info"]=>
      string(113) "By providing this information, we may adapt to better cater the specificic needs of the more frequent industries."
      ["field_type"]=>
      array(5) {
        ["field_type"]=>
        string(6) "select"
        ["render_type"]=>
        string(6) "select"
        ["label"]=>
        string(8) "Dropdown"
        ["options"]=>
        int(1)
        ["name"]=>
        string(6) "select"
      }
      ["field_structure"]=>
      array(2) {
        ["options"]=>
        array(16) {
          ["70ec562ef120"]=>
          array(3) {
            ["pos"]=>
            int(0)
            ["label"]=>
            string(19) "Agency / Freelancer"
            ["value"]=>
            string(19) "Agency / Freelancer"
          }
          ["d49eac770afc"]=>
          array(3) {
            ["pos"]=>
            int(1)
            ["label"]=>
            string(19) "Beauty and Wellness"
            ["value"]=>
            string(19) "Beauty and Wellness"
          }
          ["0974725e43eb"]=>
          array(3) {
            ["pos"]=>
            int(2)
            ["label"]=>
            string(17) "Commerce / Retail"
            ["value"]=>
            string(17) "Commerce / Retail"
          }
          ["073f9a3ba1a7"]=>
          array(3) {
            ["pos"]=>
            int(3)
            ["label"]=>
            string(9) "Education"
            ["value"]=>
            string(9) "Education"
          }
          ["e0c03b86cd7c"]=>
          array(3) {
            ["pos"]=>
            int(4)
            ["label"]=>
            string(27) "Events & Parties Management"
            ["value"]=>
            string(27) "Events & Parties Management"
          }
          ["a90139fdcd5f"]=>
          array(3) {
            ["pos"]=>
            int(5)
            ["label"]=>
            string(17) "Finance & Banking"
            ["value"]=>
            string(17) "Finance & Banking"
          }
          ["6f0f4ecf9be3"]=>
          array(3) {
            ["pos"]=>
            int(6)
            ["label"]=>
            string(18) "Legal & Compliance"
            ["value"]=>
            string(18) "Legal & Compliance"
          }
          ["35fbc05b243e"]=>
          array(3) {
            ["pos"]=>
            int(7)
            ["label"]=>
            string(7) "Leisure"
            ["value"]=>
            string(7) "Leisure"
          }
          ["3409f1f22a6c"]=>
          array(3) {
            ["pos"]=>
            int(8)
            ["label"]=>
            string(10) "Government"
            ["value"]=>
            string(10) "Government"
          }
          ["75f0635ff78d"]=>
          array(3) {
            ["pos"]=>
            int(9)
            ["label"]=>
            string(10) "Healthcare"
            ["value"]=>
            string(10) "Healthcare"
          }
          ["01967951c2d0"]=>
          array(3) {
            ["pos"]=>
            int(10)
            ["label"]=>
            string(10) "Non-Profit"
            ["value"]=>
            string(10) "Non-Profit"
          }
          ["d9a26958089c"]=>
          array(3) {
            ["pos"]=>
            int(11)
            ["label"]=>
            string(11) "Real Estate"
            ["value"]=>
            string(11) "Real Estate"
          }
          ["5d8118797bc7"]=>
          array(3) {
            ["pos"]=>
            int(12)
            ["label"]=>
            string(15) "SaaS / Software"
            ["value"]=>
            string(15) "SaaS / Software"
          }
          ["7013ff79300d"]=>
          array(3) {
            ["pos"]=>
            int(13)
            ["label"]=>
            string(6) "Sports"
            ["value"]=>
            string(6) "Sports"
          }
          ["9e4f96413f9c"]=>
          array(3) {
            ["pos"]=>
            int(14)
            ["label"]=>
            string(24) "Web Development / Design"
            ["value"]=>
            string(22) "Web Development/Design"
          }
          ["5edcb5f3470a"]=>
          array(3) {
            ["pos"]=>
            int(15)
            ["label"]=>
            string(5) "Other"
            ["value"]=>
            string(5) "Other"
          }
        }
        ["dependencies"]=>
        array(0) {
        }
      }
      ["is_required"]=>
      bool(true)
      ["public"]=>
      bool(true)
      ["is_personal"]=>
      bool(false)
      ["is_sensitive"]=>
      bool(false)
      ["in_summary"]=>
      bool(true)
      ["active"]=>
      bool(true)
      ["pos"]=>
      string(1) "3"
      ["version"]=>
      string(36) "889d80df-69ab-405d-b43d-6b8e3d08471b"
      ["dt_update"]=>
      string(19) "2025-12-08 11:52:07"
    }
    [4]=>
    array(17) {
      ["id_form_field"]=>
      string(2) "23"
      ["uuid"]=>
      string(12) "t5so319SX1XM"
      ["id_form"]=>
      string(1) "4"
      ["field_name"]=>
      string(14) "Other Industry"
      ["field_label"]=>
      string(15) "Which industry?"
      ["field_info"]=>
      string(0) ""
      ["field_type"]=>
      array(5) {
        ["field_type"]=>
        string(4) "text"
        ["render_type"]=>
        string(4) "text"
        ["label"]=>
        string(10) "Text Input"
        ["options"]=>
        int(0)
        ["name"]=>
        string(4) "text"
      }
      ["field_structure"]=>
      array(1) {
        ["dependencies"]=>
        array(1) {
          ["show"]=>
          array(1) {
            [0]=>
            array(1) {
              [0]=>
              array(3) {
                ["field"]=>
                string(12) "t5sngv7A4V4V"
                ["value"]=>
                array(1) {
                  [0]=>
                  string(12) "5edcb5f3470a"
                }
                ["operator"]=>
                string(2) "in"
              }
            }
          }
        }
      }
      ["is_required"]=>
      bool(false)
      ["public"]=>
      bool(true)
      ["is_personal"]=>
      bool(false)
      ["is_sensitive"]=>
      bool(false)
      ["in_summary"]=>
      bool(false)
      ["active"]=>
      bool(true)
      ["pos"]=>
      string(1) "4"
      ["version"]=>
      string(36) "791ed308-27d8-400a-8295-e31d70babf22"
      ["dt_update"]=>
      string(19) "2025-11-16 09:05:59"
    }
    [5]=>
    array(17) {
      ["id_form_field"]=>
      string(2) "21"
      ["uuid"]=>
      string(12) "t5snre67YJK9"
      ["id_form"]=>
      string(1) "4"
      ["field_name"]=>
      string(12) "Intended Use"
      ["field_label"]=>
      string(40) "What do you expect to use SnapForms for?"
      ["field_info"]=>
      string(0) ""
      ["field_type"]=>
      array(5) {
        ["field_type"]=>
        string(6) "select"
        ["render_type"]=>
        string(6) "select"
        ["label"]=>
        string(8) "Dropdown"
        ["options"]=>
        int(1)
        ["name"]=>
        string(6) "select"
      }
      ["field_structure"]=>
      array(2) {
        ["options"]=>
        array(5) {
          ["fa77b10f923d"]=>
          array(3) {
            ["pos"]=>
            int(0)
            ["label"]=>
            string(18) "Lead capture forms"
            ["value"]=>
            string(18) "Lead capture forms"
          }
          ["32c2d4c70d3b"]=>
          array(3) {
            ["pos"]=>
            int(1)
            ["label"]=>
            string(19) "Surveys / feedbacks"
            ["value"]=>
            string(19) "Surveys / feedbacks"
          }
          ["c7c936712bdd"]=>
          array(3) {
            ["pos"]=>
            int(2)
            ["label"]=>
            string(19) "Event registrations"
            ["value"]=>
            string(19) "Event registrations"
          }
          ["b06ede82c97f"]=>
          array(3) {
            ["pos"]=>
            int(3)
            ["label"]=>
            string(15) "Client Projects"
            ["value"]=>
            string(15) "Client Projects"
          }
          ["3b7599163b81"]=>
          array(3) {
            ["pos"]=>
            int(4)
            ["label"]=>
            string(14) "Something else"
            ["value"]=>
            string(14) "Something else"
          }
        }
        ["dependencies"]=>
        array(0) {
        }
      }
      ["is_required"]=>
      bool(true)
      ["public"]=>
      bool(true)
      ["is_personal"]=>
      bool(false)
      ["is_sensitive"]=>
      bool(false)
      ["in_summary"]=>
      bool(true)
      ["active"]=>
      bool(true)
      ["pos"]=>
      string(1) "5"
      ["version"]=>
      string(36) "03d470df-71fa-4a34-ac33-4c5b526a277d"
      ["dt_update"]=>
      string(19) "2025-12-13 14:34:58"
    }
    [6]=>
    array(17) {
      ["id_form_field"]=>
      string(2) "24"
      ["uuid"]=>
      string(12) "t5so4tYSVJ7H"
      ["id_form"]=>
      string(1) "4"
      ["field_name"]=>
      string(13) "Other Purpose"
      ["field_label"]=>
      string(33) "What purpose do you have in mind?"
      ["field_info"]=>
      string(0) ""
      ["field_type"]=>
      array(5) {
        ["field_type"]=>
        string(4) "text"
        ["render_type"]=>
        string(4) "text"
        ["label"]=>
        string(10) "Text Input"
        ["options"]=>
        int(0)
        ["name"]=>
        string(4) "text"
      }
      ["field_structure"]=>
      array(1) {
        ["dependencies"]=>
        array(1) {
          ["show"]=>
          array(1) {
            [0]=>
            array(1) {
              [0]=>
              array(3) {
                ["field"]=>
                string(12) "t5snre67YJK9"
                ["value"]=>
                array(1) {
                  [0]=>
                  string(12) "3b7599163b81"
                }
                ["operator"]=>
                string(2) "in"
              }
            }
          }
        }
      }
      ["is_required"]=>
      bool(false)
      ["public"]=>
      bool(true)
      ["is_personal"]=>
      bool(false)
      ["is_sensitive"]=>
      bool(false)
      ["in_summary"]=>
      bool(false)
      ["active"]=>
      bool(true)
      ["pos"]=>
      string(1) "6"
      ["version"]=>
      string(36) "5ead2573-ddbd-4f26-a289-fbdf3400ccf2"
      ["dt_update"]=>
      string(19) "2025-11-16 09:02:52"
    }
    [7]=>
    array(17) {
      ["id_form_field"]=>
      string(2) "22"
      ["uuid"]=>
      string(12) "t5so10T58MY6"
      ["id_form"]=>
      string(1) "4"
      ["field_name"]=>
      string(18) "Current Painpoints"
      ["field_label"]=>
      string(59) "What are your biggest challenges regarding forms currently?"
      ["field_info"]=>
      string(112) "Sharing your painpoints with us, allows us to better please you, adapting the product to better suit your needs."
      ["field_type"]=>
      array(5) {
        ["field_type"]=>
        string(8) "textarea"
        ["render_type"]=>
        string(8) "textarea"
        ["label"]=>
        string(8) "Textarea"
        ["options"]=>
        int(0)
        ["name"]=>
        string(8) "textarea"
      }
      ["field_structure"]=>
      array(1) {
        ["dependencies"]=>
        array(0) {
        }
      }
      ["is_required"]=>
      bool(false)
      ["public"]=>
      bool(true)
      ["is_personal"]=>
      bool(false)
      ["is_sensitive"]=>
      bool(false)
      ["in_summary"]=>
      bool(false)
      ["active"]=>
      bool(true)
      ["pos"]=>
      string(1) "7"
      ["version"]=>
      string(36) "2a3f28af-c40a-4881-8b46-d45a8f11b55b"
      ["dt_update"]=>
      string(19) "2025-11-16 09:09:55"
    }
    [8]=>
    array(17) {
      ["id_form_field"]=>
      string(2) "17"
      ["uuid"]=>
      string(12) "t5smkfXY4S71"
      ["id_form"]=>
      string(1) "4"
      ["field_name"]=>
      string(17) "Marketing Consent"
      ["field_label"]=>
      string(64) "I consent to the use of the provided data for marketing purposes"
      ["field_info"]=>
      string(0) ""
      ["field_type"]=>
      array(6) {
        ["field_type"]=>
        string(16) "consent_checkbox"
        ["render_type"]=>
        string(8) "checkbox"
        ["label"]=>
        string(16) "Consent Checkbox"
        ["options"]=>
        int(0)
        ["show_description"]=>
        bool(true)
        ["name"]=>
        string(16) "consent_checkbox"
      }
      ["field_structure"]=>
      array(2) {
        ["description"]=>
        string(184) "The data may be used for marketing purposes. Learn more about it within our <a href="https://snapforms.tech/privacy-policy-snapforms/" target="_blank" rel="noopener">Privacy Policy</a>"
        ["dependencies"]=>
        array(0) {
        }
      }
      ["is_required"]=>
      bool(true)
      ["public"]=>
      bool(true)
      ["is_personal"]=>
      bool(false)
      ["is_sensitive"]=>
      bool(false)
      ["in_summary"]=>
      bool(false)
      ["active"]=>
      bool(true)
      ["pos"]=>
      string(1) "8"
      ["version"]=>
      string(36) "ecc5367c-6334-4cb2-968e-d1f63f3dbcaa"
      ["dt_update"]=>
      string(19) "2025-12-08 06:51:06"
    }
    [9]=>
    array(17) {
      ["id_form_field"]=>
      string(2) "18"
      ["uuid"]=>
      string(12) "t5smkfYBS0DZ"
      ["id_form"]=>
      string(1) "4"
      ["field_name"]=>
      string(15) "Privacy Consent"
      ["field_label"]=>
      string(31) "I agree with the Privacy Policy"
      ["field_info"]=>
      string(0) ""
      ["field_type"]=>
      array(6) {
        ["field_type"]=>
        string(16) "consent_checkbox"
        ["render_type"]=>
        string(8) "checkbox"
        ["label"]=>
        string(16) "Consent Checkbox"
        ["options"]=>
        int(0)
        ["show_description"]=>
        bool(true)
        ["name"]=>
        string(16) "consent_checkbox"
      }
      ["field_structure"]=>
      array(2) {
        ["description"]=>
        string(138) "The provided data may be used according to our <a href="https://snapforms.tech/privacy" target="_blank" rel="noopener">Privacy Policy</a>."
        ["dependencies"]=>
        array(0) {
        }
      }
      ["is_required"]=>
      bool(true)
      ["public"]=>
      bool(true)
      ["is_personal"]=>
      bool(false)
      ["is_sensitive"]=>
      bool(false)
      ["in_summary"]=>
      bool(false)
      ["active"]=>
      bool(true)
      ["pos"]=>
      string(1) "9"
      ["version"]=>
      string(36) "49d806ee-6f4d-4b99-8878-00ede2d87ed7"
      ["dt_update"]=>
      string(19) "2025-12-01 10:59:26"
    }
  }
}
HTML

To obtain the data related to a given submission.

id_form

The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.

This parameter is interchangeable with the form_uuid payload parameter for the purpose of this endpoint.

id_submission

The id_submission parameter is an internal identifier for submissions. It is not meant to be shown to the public.

This parameter is interchangeable with the submission_uuid payload parameter for the purpose of this endpoint.

form_uuid

The form_uuid parameter is the public equivalent to the id_form. It is meant to prevent enumeration attacks and hiding its size from users.

This parameter is interchangeable with the id_form path parameter for the purpose of this endpoint.

submission_uuid

The submission_uuid parameter is the public equivalent to the id_submission. It is meant to prevent enumeration attacks and hiding its size from users.

This parameter is interchangeable with the id_submission path parameter for the purpose of this endpoint.

external

This parameter should be used to enforce validation through the token parameter.

For data security reasons, set this to true if you’re calling this endpoint originated from user provided data.

token

The token parameter is used as a “password” for submissions preventing unauthorized access to the user’s data.

This parameter is required if the “external” payload parameter is set to true.

include_context

Set this parameter to true if you need the submission’s context data.

Context data includes geographical location, device and browser info, language and traffic source data, such as referrer and UTM tags.

Example Response

The following is an example dump of a submission:

HTML
array(2) {
  ["status"]=>
  array(2) {
    ["code"]=>
    int(200)
    ["text"]=>
    string(7) "success"
  }
  ["data"]=>
  array(13) {
    ["id_submission"]=>
    string(2) "18"
    ["uuid"]=>
    string(12) "t6yschJ941ZH"
    ["id_form"]=>
    string(1) "4"
    ["form_uuid"]=>
    string(12) "t5smkf3GNFM8"
    ["id_user"]=>
    string(1) "1"
    ["token"]=>
    string(32) "06945bf9c0402179e41fb50afeddea94"
    ["dt_intro"]=>
    string(19) "2025-12-08 11:50:41"
    ["dt_update"]=>
    string(19) "2025-12-15 16:45:42"
    ["status"]=>
    string(1) "1"
    ["status_label"]=>
    string(6) "Active"
    ["recipient"]=>
    array(2) {
      ["email"]=>
      string(20) "[email protected]"
      ["name"]=>
      string(15) "John Smith"
    }
    ["fields"]=>
    array(10) {
      ["t5smkf1JR9YB"]=>
      array(2) {
        ["field_info"]=>
        array(8) {
          ["id_form_field"]=>
          int(15)
          ["uuid"]=>
          string(12) "t5smkf1JR9YB"
          ["id_form"]=>
          string(1) "4"
          ["name"]=>
          string(4) "Name"
          ["label"]=>
          string(18) "What is your name?"
          ["type"]=>
          string(4) "name"
          ["sensitive_data"]=>
          bool(true)
          ["personal_data"]=>
          bool(true)
        }
        ["sub_data"]=>
        array(3) {
          ["value"]=>
          string(15) "John Smith"
          ["is_encrypted"]=>
          bool(true)
          ["field_version"]=>
          string(36) "39abf40c-ef04-4f83-901e-fccabd5b4be0"
        }
      }
      ["t5smkfPKWKN2"]=>
      array(2) {
        ["field_info"]=>
        array(8) {
          ["id_form_field"]=>
          int(16)
          ["uuid"]=>
          string(12) "t5smkfPKWKN2"
          ["id_form"]=>
          string(1) "4"
          ["name"]=>
          string(10) "User Email"
          ["label"]=>
          string(44) "Which email would like for us to notify you?"
          ["type"]=>
          string(5) "email"
          ["sensitive_data"]=>
          bool(false)
          ["personal_data"]=>
          bool(true)
        }
        ["sub_data"]=>
        array(3) {
          ["value"]=>
          string(20) "[email protected]"
          ["is_encrypted"]=>
          bool(false)
          ["field_version"]=>
          string(36) "feca0490-b7a2-4887-a3bf-be948939ac1b"
        }
      }
      ["t5sn74BWQFS5"]=>
      array(2) {
        ["field_info"]=>
        array(8) {
          ["id_form_field"]=>
          int(19)
          ["uuid"]=>
          string(12) "t5sn74BWQFS5"
          ["id_form"]=>
          string(1) "4"
          ["name"]=>
          string(7) "Company"
          ["label"]=>
          string(36) "What's your Company or Organization?"
          ["type"]=>
          string(4) "text"
          ["sensitive_data"]=>
          bool(false)
          ["personal_data"]=>
          bool(false)
        }
        ["sub_data"]=>
        array(3) {
          ["value"]=>
          string(9) "SnapForms"
          ["is_encrypted"]=>
          bool(false)
          ["field_version"]=>
          string(36) "36c64a8c-dc52-4c3e-8858-0748dce4239b"
        }
      }
      ["t5sngv7A4V4V"]=>
      array(2) {
        ["field_info"]=>
        array(8) {
          ["id_form_field"]=>
          int(20)
          ["uuid"]=>
          string(12) "t5sngv7A4V4V"
          ["id_form"]=>
          string(1) "4"
          ["name"]=>
          string(8) "Industry"
          ["label"]=>
          string(37) "In which industry are you positioned?"
          ["type"]=>
          string(6) "select"
          ["sensitive_data"]=>
          bool(false)
          ["personal_data"]=>
          bool(false)
        }
        ["sub_data"]=>
        array(4) {
          ["value"]=>
          string(12) "5d8118797bc7"
          ["is_encrypted"]=>
          bool(false)
          ["field_version"]=>
          string(36) "889d80df-69ab-405d-b43d-6b8e3d08471b"
          ["label"]=>
          string(15) "SaaS / Software"
        }
      }
      ["t5so319SX1XM"]=>
      array(2) {
        ["field_info"]=>
        array(8) {
          ["id_form_field"]=>
          int(23)
          ["uuid"]=>
          string(12) "t5so319SX1XM"
          ["id_form"]=>
          string(1) "4"
          ["name"]=>
          string(14) "Other Industry"
          ["label"]=>
          string(15) "Which industry?"
          ["type"]=>
          string(4) "text"
          ["sensitive_data"]=>
          bool(false)
          ["personal_data"]=>
          bool(false)
        }
        ["sub_data"]=>
        array(3) {
          ["value"]=>
          string(0) ""
          ["is_encrypted"]=>
          bool(false)
          ["field_version"]=>
          string(36) "791ed308-27d8-400a-8295-e31d70babf22"
        }
      }
      ["t5snre67YJK9"]=>
      array(2) {
        ["field_info"]=>
        array(8) {
          ["id_form_field"]=>
          int(21)
          ["uuid"]=>
          string(12) "t5snre67YJK9"
          ["id_form"]=>
          string(1) "4"
          ["name"]=>
          string(12) "Intended Use"
          ["label"]=>
          string(40) "What do you expect to use SnapForms for?"
          ["type"]=>
          string(6) "select"
          ["sensitive_data"]=>
          bool(false)
          ["personal_data"]=>
          bool(false)
        }
        ["sub_data"]=>
        array(4) {
          ["value"]=>
          string(12) "fa77b10f923d"
          ["is_encrypted"]=>
          bool(false)
          ["field_version"]=>
          string(36) "03d470df-71fa-4a34-ac33-4c5b526a277d"
          ["label"]=>
          string(18) "Lead capture forms"
        }
      }
      ["t5so4tYSVJ7H"]=>
      array(2) {
        ["field_info"]=>
        array(8) {
          ["id_form_field"]=>
          int(24)
          ["uuid"]=>
          string(12) "t5so4tYSVJ7H"
          ["id_form"]=>
          string(1) "4"
          ["name"]=>
          string(13) "Other Purpose"
          ["label"]=>
          string(33) "What purpose do you have in mind?"
          ["type"]=>
          string(4) "text"
          ["sensitive_data"]=>
          bool(false)
          ["personal_data"]=>
          bool(false)
        }
        ["sub_data"]=>
        array(3) {
          ["value"]=>
          string(0) ""
          ["is_encrypted"]=>
          bool(false)
          ["field_version"]=>
          string(36) "5ead2573-ddbd-4f26-a289-fbdf3400ccf2"
        }
      }
      ["t5so10T58MY6"]=>
      array(2) {
        ["field_info"]=>
        array(8) {
          ["id_form_field"]=>
          int(22)
          ["uuid"]=>
          string(12) "t5so10T58MY6"
          ["id_form"]=>
          string(1) "4"
          ["name"]=>
          string(18) "Current Painpoints"
          ["label"]=>
          string(59) "What are your biggest challenges regarding forms currently?"
          ["type"]=>
          string(8) "textarea"
          ["sensitive_data"]=>
          bool(false)
          ["personal_data"]=>
          bool(false)
        }
        ["sub_data"]=>
        array(3) {
          ["value"]=>
          string(46) "GDPR compliance and marketing data attribution"
          ["is_encrypted"]=>
          bool(false)
          ["field_version"]=>
          string(36) "2a3f28af-c40a-4881-8b46-d45a8f11b55b"
        }
      }
      ["t5smkfXY4S71"]=>
      array(2) {
        ["field_info"]=>
        array(8) {
          ["id_form_field"]=>
          int(17)
          ["uuid"]=>
          string(12) "t5smkfXY4S71"
          ["id_form"]=>
          string(1) "4"
          ["name"]=>
          string(17) "Marketing Consent"
          ["label"]=>
          string(64) "I consent to the use of the provided data for marketing purposes"
          ["type"]=>
          string(16) "consent_checkbox"
          ["sensitive_data"]=>
          bool(false)
          ["personal_data"]=>
          bool(false)
        }
        ["sub_data"]=>
        array(2) {
          ["value"]=>
          string(2) "on"
          ["consent"]=>
          array(3) {
            ["text"]=>
            string(90) "The data may be used for marketing purposes. Learn more about it within our Privacy Policy"
            ["version"]=>
            string(36) "ecc5367c-6334-4cb2-968e-d1f63f3dbcaa"
            ["dt_given"]=>
            string(19) "2025-12-08 18:50:41"
          }
        }
      }
      ["t5smkfYBS0DZ"]=>
      array(2) {
        ["field_info"]=>
        array(8) {
          ["id_form_field"]=>
          int(18)
          ["uuid"]=>
          string(12) "t5smkfYBS0DZ"
          ["id_form"]=>
          string(1) "4"
          ["name"]=>
          string(15) "Privacy Consent"
          ["label"]=>
          string(31) "I agree with the Privacy Policy"
          ["type"]=>
          string(16) "consent_checkbox"
          ["sensitive_data"]=>
          bool(false)
          ["personal_data"]=>
          bool(false)
        }
        ["sub_data"]=>
        array(2) {
          ["value"]=>
          string(2) "on"
          ["consent"]=>
          array(3) {
            ["text"]=>
            string(62) "The provided data may be used according to our Privacy Policy."
            ["version"]=>
            string(36) "49d806ee-6f4d-4b99-8878-00ede2d87ed7"
            ["dt_given"]=>
            string(19) "2025-12-08 18:50:41"
          }
        }
      }
    }
  }
}
HTML

Submission uploads are stored securely and privately. However, it may be needed to access the uploaded file from without the scope of the SnapForms WordPress plugin’s scope.

To obtain the data related to a given submission’s file uploads.

id_form

The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.

id_submission

The id_submission parameter is an internal identifier for submissions. It is not meant to be shown to the public.

userupload_uuid

The userupload_uuid parameter is the file upload identifier. You may pass this parameter to show a single, if more files uploads exist.

You may obtain its value from the Submission Data endpoint.

Example Response

The following is an example dump of a submission’s file upload:

HTML
array(2) {
  ["status"]=>
  array(2) {
    ["code"]=>
    int(200)
    ["text"]=>
    string(7) "success"
  }
  ["data"]=>
  array(1) {
    [0]=>
    array(7) {
      ["id_user_upload"]=>
      string(1) "1"
      ["uuid"]=>
      string(36) "ef3c5f59-ef19-4671-b084-da385e974030"
      ["original_name"]=>
      string(17) "symmetric_key.jpg"
      ["mime_type"]=>
      string(10) "image/jpeg"
      ["size"]=>
      string(6) "165176"
      ["dt_intro"]=>
      string(19) "2025-12-15 17:28:55"
      ["location"]=>
      string(104) "/home2/tcbxwpmy/public_html/wp-content/snapforms/uploads/form_24/sf_785ce0a7305eb525edbd56755e056375.jpg"
    }
  }
}
HTML

Triggering Submission Operations

To cancel a submission programatically.

id_form

The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.

id_submission

The id_submission parameter is an internal identifier for submissions. It is not meant to be shown to the public.

To approve a submission programatically.

id_form

The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.

id_submission

The id_submission parameter is an internal identifier for submissions. It is not meant to be shown to the public.

To reject a submission programatically.

id_form

The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.

id_submission

The id_submission parameter is an internal identifier for submissions. It is not meant to be shown to the public.

To delete a submission programatically.

id_form

The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.

id_submission

The id_submission parameter is an internal identifier for submissions. It is not meant to be shown to the public.

Communications

To obtain the full list of configured email sending accounts.

To send an email and log it, linking it to the submission.

id_form

The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.

id_submission

The id_submission parameter is an internal identifier for submissions. It is not meant to be shown to the public.

body

This parameter can be used to set email message’s body.

from_email

The from_email can be set to the address of any email account listed in the Email Senders List endpoint.

This parameter is interchangeable with the smtp_account_id payload parameter for the purpose of this endpoint.

smtp_account_id

The smtp_account_id can be set to the ID of any email account present shown by the Email Senders List endpoint.

This parameter is interchangeable with the from_email payload parameter for the purpose of this endpoint.

subject

This parameter can be used to set email message’s subject.

recipients

This parameter can be used to set the email message’s recipients. If left unset, the submission’s email and name will be used for this purpose.

The recipients array should be an arrary consisting of one or more items. Those items should be arrays with email and name key value pairs, as shown below:

PHP
$recipients = [
	[
		"name" => "John Smith",
		"email" => "[email protected]"
	],
	[
		"name" => "Jane Doe",
		"email" => "[email protected]"
	]
];
PHP

Custom Actions Dispatcher

You may need to trigger parts of your own custom solution when a user accesses a link, or submits a form, within a WordPress website. This is easibly achievable through SnapForms integration.

sf_addon_action

By calling the the /forms page within the website and passing sf_addon_action as a GET parameter with your action name as its value, you’ll have effectively created a way to call your code.

PHP
add_action('your_own_custom_action', function() {
	//Your own logic
});
PHP

You may also need to trigger an action from a custom form. You may add that action through the sf_addon_action POST parameter, as shown below.

HTML
<form method="post" action="<?php echo home_url().'/forms/'; ?>" enctype="multipart/form-data">
	<input type="hidden" name="sf_addon_action" value="another_custom_action">
    <!-- The remainder of your form -->
</form>
HTML

Warning: You should apply your own validations such as CSRF token verification, data sanitization, user permission checks, etc.

Check the WordPress Plugin Security Guide for further instructions on how to implement these measures.

Warning: You should always be careful with user data, taking the appropriate precautions for data privacy purposes.

Scroll to Top