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.
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
});PHPsnapforms.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.
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
});PHPsnapforms.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.
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
});PHPsnapforms.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.
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
});PHPsnapforms.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.
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
});PHPsnapforms.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.
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
});PHPSubmission 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.
/*
* string $route;
* array $payload (optional)
*/
apply_filters('snapforms_msgbus', $route, $payload);PHPOf 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.
$submission = apply_filters('snapforms_msgbus', "submission/".$id_form."/".$id_submission."/obtain")['data'] ?? null;PHPThis 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.
array(2) {
["status"]=>
array(2) {
["code"]=>
int(200)
["text"]=>
string(7) "Success"
}
["data"]=>
array(X) {ACTUAL DATA RESIDES HERE}
}HTML404 | Route not found
A 404 status code is provided when the searched route is not found.
array(2) {
["status"]=>
array(2) {
["code"]=>
int(404)
["text"]=>
string(7) "Route not found"
}
["data"]=> null,
}HTMLBelow, we provide the list of the currently available routes or endpoints:
Accessing Data
To obtain data related to a given form.
form(/id_form)/obtain
id_form
int
optional
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
string
optional
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:
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"
}
}
}HTMLTo obtain the fields list from a given form.
form(/id_form)/fields(/id_field)obtain
id_form
int
optional
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
int
optional
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
string
optional
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
string
optional
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:
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"
}
}
}HTMLTo obtain the data related to a given submission.
submission(/{int:id_form})(/{int:id_submission})/obtain
id_form
int
optional
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
int
optional
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
string
optional
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
string
optional
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
bool
optional
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
string
optional
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
bool
optional
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:
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"
}
}
}
}
}
}HTMLSubmission 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.
submission/{int:id_form}/{int:id_submission}/userupload/location
id_form
int
optional
The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.
id_submission
int
optional
The id_submission parameter is an internal identifier for submissions. It is not meant to be shown to the public.
userupload_uuid
required
optional
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:
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"
}
}
}HTMLTriggering Submission Operations
To cancel a submission programatically.
submission/{int:id_form}/{int:id_submission}/cancel
id_form
int
required
The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.
id_submission
int
required
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.
submission/{int:id_form}/{int:id_submission}/approve
id_form
int
required
The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.
id_submission
int
required
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.
submission/{int:id_form}/{int:id_submission}/reject
id_form
int
required
The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.
id_submission
int
required
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.
submission/{int:id_form}/{int:id_submission}/delete
id_form
int
required
The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.
id_submission
int
required
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.
email/accounts/list
To send an email and log it, linking it to the submission.
submission/{int:id_form}/{int:id_submission}/email/send
id_form
int
optional
The form_id parameter is an internal identifier for forms. It is not meant to be shown to the public.
id_submission
int
optional
The id_submission parameter is an internal identifier for submissions. It is not meant to be shown to the public.
body
string
required
This parameter can be used to set email message’s body.
from_email
string
optional
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
int
optional
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
string
optional
This parameter can be used to set email message’s subject.
recipients
array
optional
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:
$recipients = [
[
"name" => "John Smith",
"email" => "[email protected]"
],
[
"name" => "Jane Doe",
"email" => "[email protected]"
]
];PHPCustom 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.
add_action('your_own_custom_action', function() {
//Your own logic
});PHPYou 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.
<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>HTMLWarning: 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.