Forms
Use this endpoint to manipulate and obtain details on Mautic’s Forms.
Using the Mautic API library
You can interact with this API using the Mautic API Library as below, or the various HTTP endpoints described in this document.
<?php
use Mautic\MauticApi;
use Mautic\Auth\ApiAuth;
// ...
$initAuth = new ApiAuth();
$auth = $initAuth->newAuth($settings);
$apiUrl = "https://example.com";
$api = new MauticApi();
$formApi = $api->newApi("forms", $auth, $apiUrl);
Get Form
Retrieves an individual Form.
<?php
//...
$form = $formApi->get($id);
HTTP request
GET /forms/ID
Response
Returns
200 OKwhen the request successfully retrieves the Form.
{
"form": {
"isPublished": true,
"dateAdded": "2026-02-19T07:06:12+00:00",
"dateModified": "2026-02-19T07:10:06+00:00",
"createdBy": 1,
"createdByUser": "Admin Mautic",
"modifiedBy": 1,
"modifiedByUser": "Admin Mautic",
"id": 2,
"name": "Acme Global Conference Registration",
"alias": "acme_globa",
"category": {
"createdByUser": "Admin Mautic",
"modifiedByUser": null,
"id": 1,
"title": "Company attendees",
"alias": "company-attendees",
"description": null,
"color": null,
"bundle": "form"
},
"description": "<p><span style=\"color:rgb(186,33,33);\"><span class=\"s2\" style=\"box-sizing:border-box;\">Acme Global Conference registration.</span></span></p>",
"cachedHtml": "\n<style type=\"text/css\" scoped>\n .mauticform_wrapper { max-width: 600px; margin: 10px auto; }\n .mauticform-innerform {}\n .mauticform-post-success {}\n .mauticform-name { font-weight: bold; font-size: 1.5em; margin-bottom: 3px; }\n .mauticform-description { margin-top: 2px; margin-bottom: 10px; }\n .mauticform-error { margin-bottom: 10px; color: red; }\n .mauticform-message { margin-bottom: 10px; color: green; }\n .mauticform-row { display: block; margin-bottom: 20px; }\n .mauticform-label { font-size: 1.1em; display: block; font-weight: bold; margin-bottom: 5px; }\n .mauticform-row.mauticform-required .mauticform-label:after { color: #e32; content: \" *\"; display: inline; }\n .mauticform-helpmessage { display: block; font-size: 0.9em; margin-bottom: 3px; }\n .mauticform-errormsg { display: block; color: red; margin-top: 2px; }\n .mauticform-selectbox, .mauticform-input, .mauticform-textarea { width: 100%; padding: 0.5em 0.5em; border: 1px solid #CCC; background: #fff; box-shadow: 0px 0px 0px #fff inset; border-radius: 4px; box-sizing: border-box; }\n .mauticform-checkboxgrp-row {}\n .mauticform-checkboxgrp-label { font-weight: normal; }\n .mauticform-checkboxgrp-checkbox {}\n .mauticform-radiogrp-row {}\n .mauticform-radiogrp-label { font-weight: normal; }\n .mauticform-radiogrp-radio {}\n .mauticform-button-wrapper .mauticform-button.btn-ghost, .mauticform-pagebreak-wrapper .mauticform-pagebreak.btn-ghost { color: #5d6c7c;background-color: #ffffff;border-color: #dddddd;}\n .mauticform-button-wrapper .mauticform-button, .mauticform-pagebreak-wrapper .mauticform-pagebreak { display: inline-block;margin-bottom: 0;font-weight: 600;text-align: center;vertical-align: middle;cursor: pointer;background-image: none;border: 1px solid transparent;white-space: nowrap;padding: 6px 12px;font-size: 13px;line-height: 1.3856;border-radius: 3px;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;}\n .mauticform-button-wrapper .mauticform-button.btn-ghost[disabled], .mauticform-pagebreak-wrapper .mauticform-pagebreak.btn-ghost[disabled] { background-color: #ffffff; border-color: #dddddd; opacity: 0.75; cursor: not-allowed; }\n .mauticform-pagebreak-wrapper .mauticform-button-wrapper { display: inline; }\n\n /**\n * @see https://github.com/TarekRaafat/autoComplete.js/blob/master/dist/css/autoComplete.02.css.\n */\n .autoComplete_wrapper {position: relative;}\n .autoComplete_wrapper > input::placeholder {transition: all 0.3s ease;}\n .autoComplete_wrapper > ul {position: absolute;max-height: 226px;overflow-y: scroll;top: 100%;left: 0;right: 0;padding: 0;margin: 0.5rem 0 0 0;border-radius: 4px;background-color: #fff;border: 1px solid rgba(33, 33, 33, 0.1);z-index: 1000;outline: none;}\n .autoComplete_wrapper > ul > li {padding: 10px 20px;list-style: none;text-align: left;font-size: 16px;color: #212121;transition: all 0.1s ease-in-out;border-radius: 3px;background-color: rgba(255, 255, 255, 1);white-space: nowrap;overflow: hidden;text-overflow: ellipsis;transition: all 0.2s ease;}\n .autoComplete_wrapper > ul > li > span {float: right;}\n .autoComplete_wrapper > ul > li::selection {color: rgba(#ffffff, 0);background-color: rgba(#ffffff, 0);}\n .autoComplete_wrapper > ul > li:hover {cursor: pointer;background-color: rgba(123, 123, 123, 0.1);}\n .autoComplete_wrapper > ul > li mark {background-color: transparent;font-weight: bold;}\n .autoComplete_wrapper > ul > li mark::selection {background-color: rgba(#ffffff, 0);}\n .autoComplete_wrapper > ul > li[aria-selected=\"true\"] {background-color: rgba(123, 123, 123, 0.1);}\n @media only screen and (max-width: 600px) {\n .autoComplete_wrapper > input {width: 18rem;}\n }\n</style>\n\n<style type=\"text/css\" scoped>\n .mauticform-field-hidden { display:none }\n</style>\n<div id=\"mauticform_wrapper_acmeglobalconferenceregistration\" class=\"mauticform_wrapper\">\n <form autocomplete=\"false\" role=\"form\" method=\"post\" action=\"https://m5-tester.ddev.site/form/submit?formId=2\" id=\"mauticform_acmeglobalconferenceregistration\" data-mautic-form=\"acmeglobalconferenceregistration\" enctype=\"multipart/form-data\" ><div class=\"mauticform-error\" id=\"mauticform_acmeglobalconferenceregistration_error\"></div>\n <div class=\"mauticform-message\" id=\"mauticform_acmeglobalconferenceregistration_message\"></div><div class=\"mauticform-innerform\">\n <div class=\"mauticform-page-wrapper mauticform-page-1\" data-mautic-form-page=\"1\" >\n \n\n\n \n\n \n\n\n \n\n\n<div id=\"mauticform_acmeglobalconferenceregistration_topic_preference\"class=\"mauticform-row mauticform-text mauticform-field-1\">\n <label id=\"mauticform_label_acmeglobalconferenceregistration_topic_preference\"for=\"mauticform_input_acmeglobalconferenceregistration_topic_preference\"class=\"mauticform-label\">Topic preference</label>\n <span class=\"mauticform-helpmessage\">The talk that you're looking forward to</span>\n <textarea name=\"mauticform[topic_preference]\"id=\"mauticform_input_acmeglobalconferenceregistration_topic_preference\"class=\"mauticform-textarea\"></textarea>\n \n <span class=\"mauticform-errormsg\" style=\"display:none;\"></span>\n</div>\n \n \n \n \n \n<div id=\"mauticform_acmeglobalconferenceregistration_submit\"class=\"mauticform-row mauticform-button-wrapper mauticform-field-2\">\n <button class=\"btn btn-ghost mauticform-button\"name=\"mauticform[submit]\"value=\"1\"id=\"mauticform_input_acmeglobalconferenceregistration_submit\"type=\"submit\">Submit</button>\n</div>\n </div></div><input type=\"hidden\" name=\"mauticform[formId]\" id=\"mauticform_acmeglobalconferenceregistration_id\" value=\"2\"/>\n <input type=\"hidden\" name=\"mauticform[return]\" id=\"mauticform_acmeglobalconferenceregistration_return\" value=\"\"/>\n <input type=\"hidden\" name=\"mauticform[formName]\" id=\"mauticform_acmeglobalconferenceregistration_name\" value=\"acmeglobalconferenceregistration\"/>\n \n </form>\n</div>\n",
"publishUp": "2026-02-19T07:00:00+00:00",
"publishDown": "2026-03-06T08:05:00+00:00",
"fields": [
{
"id": 2,
"label": "Topic preference",
"showLabel": true,
"alias": "topic_preference",
"type": "textarea",
"defaultValue": null,
"isRequired": false,
"validationMessage": null,
"helpMessage": "The talk that you're looking forward to",
"order": 1,
"properties": [],
"validation": [],
"parent": null,
"conditions": [],
"labelAttributes": null,
"inputAttributes": null,
"containerAttributes": null,
"leadField": null,
"saveResult": true,
"isAutoFill": true,
"mappedObject": "company",
"mappedField": null
},
{
"id": 3,
"label": "Submit",
"showLabel": true,
"alias": "submit",
"type": "button",
"defaultValue": null,
"isRequired": false,
"validationMessage": null,
"helpMessage": null,
"order": 2,
"properties": [],
"validation": [],
"parent": null,
"conditions": [],
"labelAttributes": null,
"inputAttributes": "class=\"btn btn-ghost\"",
"containerAttributes": null,
"leadField": null,
"saveResult": true,
"isAutoFill": false,
"mappedObject": null,
"mappedField": null
}
],
"actions": [
{
"id": 13,
"name": "Add company score",
"description": null,
"type": "lead.scorecontactscompanies",
"order": 1,
"properties": {
"score": 5
}
}
],
"template": "goldstar",
"inKioskMode": true,
"renderStyle": true,
"formType": "standalone",
"postAction": "message",
"postActionProperty": "Thank you for registering and see you there!",
"noIndex": false,
"formAttributes": null,
"language": "en_US"
}
}
Form properties
Name |
Type |
Description |
|---|---|---|
|
boolean |
Form publication status |
|
datetime |
Form record creation date and time |
|
datetime |
Form record last modification date and time |
|
integer |
ID of the User who created the Form |
|
string |
Name of the User who created the Form |
|
integer |
ID of the User who last modified the Form |
|
string |
Name of the User who last modified the Form |
|
integer |
ID of the Form |
|
string |
Form name |
|
string |
The auto-generated alias or slug of the Form |
|
object |
The Category assigned to the Form |
|
string |
Description of the Form |
|
string |
The auto-generated HTML and CSS of the Form |
|
datetime |
Activation date and time for the Form |
|
datetime |
Deactivation date and time for the Form |
|
associative array |
Associative array of Form Fields. The keys must correspond to the field aliases described in the Form Field properties |
|
associative array |
Associative array of Form actions. The keys must correspond to the action aliases described in the Form action properties |
|
string |
Theme used to style the Form |
|
boolean |
Kiosk mode status - set to |
|
boolean |
Render style status - set to |
|
string |
Type of the Form - |
|
string |
Action to perform after submission. Must be one of:
|
|
string |
The data associated with the |
|
boolean |
Search indexing status - set to |
|
string |
Custom HTML attributes to add to the opening |
|
string |
The language code for the Form, such as |
Form Field properties
Name |
Type |
Description |
|---|---|---|
|
integer |
ID of the field |
|
string |
Label displayed for the field |
|
boolean |
Label visibility status - |
|
string |
The auto-generated alias or slug of the field |
|
string |
Type of field, such as |
|
string |
Initial value assigned to the field |
|
boolean |
Required status - |
|
string |
Custom message that appears when a User leaves a required field empty |
|
string |
Text provided to assist Users in completing the field |
|
integer |
Numerical position of the field within the Form |
|
object |
Specific configuration options based on the field type |
|
object |
List of validation rules applied to the field |
|
integer |
ID of the parent field for conditional logic |
|
object |
Configuration for conditional logic, containing:
|
|
string |
HTML attributes for the label element |
|
string |
HTML attributes for the input element |
|
string |
HTML attributes for the field wrapper or container |
|
string |
Internal reference name for the mapped field on the target object |
|
boolean |
Result storage status - |
|
boolean |
Auto-fill status - |
|
string |
The object type that the field maps to - |
|
string |
The specific Contact or Company field that the Form Field maps to |
Form action properties
Name |
Type |
Description |
|---|---|---|
|
integer |
ID of the action |
|
string |
Name of the action |
|
string |
Description of the action |
|
string |
Type of action, such as |
|
integer |
The numerical position of the action within the Form |
|
object |
The settings for the specific action type |
List Forms
Retrieves a list of Forms.
<?php
//...
$forms = $formApi->getList($searchFilter, $start, $limit, $orderBy, $orderByDir, $publishedOnly, $minimal);
HTTP request
GET /forms
Query parameters
Name |
Type |
Description |
|---|---|---|
|
string |
String or search command to filter entities |
|
integer |
Starting row for the returned entities - defaults to 0 |
|
integer |
Maximum number of entities to return - defaults to 30 |
|
string |
Column to sort by. Any column in the response is valid. Note: convert |
|
string |
Order direction - |
|
boolean |
Returns only currently published entities |
|
boolean |
Returns only a simple mapped object of entities without additional lists in it |
Response
Returns
200 OKwhen the request successfully retrieves the Forms list.
{
"total": 2,
"forms": [
{
"isPublished": true,
"dateAdded": "2026-02-19T07:06:12+00:00",
"dateModified": "2026-02-19T07:10:06+00:00",
"createdBy": 1,
"createdByUser": "Admin Mautic",
"modifiedBy": 1,
"modifiedByUser": "Admin Mautic",
"id": 2,
"name": "Acme Global Conference Registration",
"alias": "acme_globa",
"category": {
"createdByUser": "Admin Mautic",
"modifiedByUser": null,
"id": 1,
"title": "Company attendees",
"alias": "company-attendees",
"description": null,
"color": null,
"bundle": "form"
},
"description": "<p><span style=\"color:rgb(186,33,33);\"><span class=\"s2\" style=\"box-sizing:border-box;\">Acme Global Conference registration.</span></span></p>",
"cachedHtml": "\n<style type=\"text/css\" scoped>\n .mauticform_wrapper { max-width: 600px; margin: 10px auto; }\n .mauticform-innerform {}\n .mauticform-post-success {}\n .mauticform-name { font-weight: bold; font-size: 1.5em; margin-bottom: 3px; }\n .mauticform-description { margin-top: 2px; margin-bottom: 10px; }\n .mauticform-error { margin-bottom: 10px; color: red; }\n .mauticform-message { margin-bottom: 10px; color: green; }\n .mauticform-row { display: block; margin-bottom: 20px; }\n .mauticform-label { font-size: 1.1em; display: block; font-weight: bold; margin-bottom: 5px; }\n .mauticform-row.mauticform-required .mauticform-label:after { color: #e32; content: \" *\"; display: inline; }\n .mauticform-helpmessage { display: block; font-size: 0.9em; margin-bottom: 3px; }\n .mauticform-errormsg { display: block; color: red; margin-top: 2px; }\n .mauticform-selectbox, .mauticform-input, .mauticform-textarea { width: 100%; padding: 0.5em 0.5em; border: 1px solid #CCC; background: #fff; box-shadow: 0px 0px 0px #fff inset; border-radius: 4px; box-sizing: border-box; }\n .mauticform-checkboxgrp-row {}\n .mauticform-checkboxgrp-label { font-weight: normal; }\n .mauticform-checkboxgrp-checkbox {}\n .mauticform-radiogrp-row {}\n .mauticform-radiogrp-label { font-weight: normal; }\n .mauticform-radiogrp-radio {}\n .mauticform-button-wrapper .mauticform-button.btn-ghost, .mauticform-pagebreak-wrapper .mauticform-pagebreak.btn-ghost { color: #5d6c7c;background-color: #ffffff;border-color: #dddddd;}\n .mauticform-button-wrapper .mauticform-button, .mauticform-pagebreak-wrapper .mauticform-pagebreak { display: inline-block;margin-bottom: 0;font-weight: 600;text-align: center;vertical-align: middle;cursor: pointer;background-image: none;border: 1px solid transparent;white-space: nowrap;padding: 6px 12px;font-size: 13px;line-height: 1.3856;border-radius: 3px;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;}\n .mauticform-button-wrapper .mauticform-button.btn-ghost[disabled], .mauticform-pagebreak-wrapper .mauticform-pagebreak.btn-ghost[disabled] { background-color: #ffffff; border-color: #dddddd; opacity: 0.75; cursor: not-allowed; }\n .mauticform-pagebreak-wrapper .mauticform-button-wrapper { display: inline; }\n\n /**\n * @see https://github.com/TarekRaafat/autoComplete.js/blob/master/dist/css/autoComplete.02.css.\n */\n .autoComplete_wrapper {position: relative;}\n .autoComplete_wrapper > input::placeholder {transition: all 0.3s ease;}\n .autoComplete_wrapper > ul {position: absolute;max-height: 226px;overflow-y: scroll;top: 100%;left: 0;right: 0;padding: 0;margin: 0.5rem 0 0 0;border-radius: 4px;background-color: #fff;border: 1px solid rgba(33, 33, 33, 0.1);z-index: 1000;outline: none;}\n .autoComplete_wrapper > ul > li {padding: 10px 20px;list-style: none;text-align: left;font-size: 16px;color: #212121;transition: all 0.1s ease-in-out;border-radius: 3px;background-color: rgba(255, 255, 255, 1);white-space: nowrap;overflow: hidden;text-overflow: ellipsis;transition: all 0.2s ease;}\n .autoComplete_wrapper > ul > li > span {float: right;}\n .autoComplete_wrapper > ul > li::selection {color: rgba(#ffffff, 0);background-color: rgba(#ffffff, 0);}\n .autoComplete_wrapper > ul > li:hover {cursor: pointer;background-color: rgba(123, 123, 123, 0.1);}\n .autoComplete_wrapper > ul > li mark {background-color: transparent;font-weight: bold;}\n .autoComplete_wrapper > ul > li mark::selection {background-color: rgba(#ffffff, 0);}\n .autoComplete_wrapper > ul > li[aria-selected=\"true\"] {background-color: rgba(123, 123, 123, 0.1);}\n @media only screen and (max-width: 600px) {\n .autoComplete_wrapper > input {width: 18rem;}\n }\n</style>\n\n<style type=\"text/css\" scoped>\n .mauticform-field-hidden { display:none }\n</style>\n<div id=\"mauticform_wrapper_acmeglobalconferenceregistration\" class=\"mauticform_wrapper\">\n <form autocomplete=\"false\" role=\"form\" method=\"post\" action=\"https://m5-tester.ddev.site/form/submit?formId=2\" id=\"mauticform_acmeglobalconferenceregistration\" data-mautic-form=\"acmeglobalconferenceregistration\" enctype=\"multipart/form-data\" ><div class=\"mauticform-error\" id=\"mauticform_acmeglobalconferenceregistration_error\"></div>\n <div class=\"mauticform-message\" id=\"mauticform_acmeglobalconferenceregistration_message\"></div><div class=\"mauticform-innerform\">\n <div class=\"mauticform-page-wrapper mauticform-page-1\" data-mautic-form-page=\"1\" >\n \n\n\n \n\n \n\n\n \n\n\n<div id=\"mauticform_acmeglobalconferenceregistration_topic_preference\"class=\"mauticform-row mauticform-text mauticform-field-1\">\n <label id=\"mauticform_label_acmeglobalconferenceregistration_topic_preference\"for=\"mauticform_input_acmeglobalconferenceregistration_topic_preference\"class=\"mauticform-label\">Topic preference</label>\n <span class=\"mauticform-helpmessage\">The talk that you're looking forward to</span>\n <textarea name=\"mauticform[topic_preference]\"id=\"mauticform_input_acmeglobalconferenceregistration_topic_preference\"class=\"mauticform-textarea\"></textarea>\n \n <span class=\"mauticform-errormsg\" style=\"display:none;\"></span>\n</div>\n \n \n \n \n \n<div id=\"mauticform_acmeglobalconferenceregistration_submit\"class=\"mauticform-row mauticform-button-wrapper mauticform-field-2\">\n <button class=\"btn btn-ghost mauticform-button\"name=\"mauticform[submit]\"value=\"1\"id=\"mauticform_input_acmeglobalconferenceregistration_submit\"type=\"submit\">Submit</button>\n</div>\n </div></div><input type=\"hidden\" name=\"mauticform[formId]\" id=\"mauticform_acmeglobalconferenceregistration_id\" value=\"2\"/>\n <input type=\"hidden\" name=\"mauticform[return]\" id=\"mauticform_acmeglobalconferenceregistration_return\" value=\"\"/>\n <input type=\"hidden\" name=\"mauticform[formName]\" id=\"mauticform_acmeglobalconferenceregistration_name\" value=\"acmeglobalconferenceregistration\"/>\n \n </form>\n</div>\n",
"publishUp": "2026-02-19T07:00:00+00:00",
"publishDown": "2026-03-06T08:05:00+00:00",
"fields": [
{
"id": 2,
"label": "Topic preference",
"showLabel": true,
"alias": "topic_preference",
"type": "textarea",
"defaultValue": null,
"isRequired": false,
"validationMessage": null,
"helpMessage": "The talk that you're looking forward to",
"order": 1,
"properties": [],
"validation": [],
"parent": null,
"conditions": [],
"labelAttributes": null,
"inputAttributes": null,
"containerAttributes": null,
"leadField": null,
"saveResult": true,
"isAutoFill": true,
"mappedObject": "company",
"mappedField": null
},
{
"id": 3,
"label": "Submit",
"showLabel": true,
"alias": "submit",
"type": "button",
"defaultValue": null,
"isRequired": false,
"validationMessage": null,
"helpMessage": null,
"order": 2,
"properties": [],
"validation": [],
"parent": null,
"conditions": [],
"labelAttributes": null,
"inputAttributes": "class=\"btn btn-ghost\"",
"containerAttributes": null,
"leadField": null,
"saveResult": true,
"isAutoFill": false,
"mappedObject": null,
"mappedField": null
}
],
"actions": [
{
"id": 13,
"name": "Add company score",
"description": null,
"type": "lead.scorecontactscompanies",
"order": 1,
"properties": {
"score": 5
}
}
],
"template": "goldstar",
"inKioskMode": true,
"renderStyle": true,
"formType": "standalone",
"postAction": "message",
"postActionProperty": "Thank you for registering and see you there!",
"noIndex": false,
"formAttributes": null,
"language": "en_US"
},
// ...
]
}
Properties
Name |
Type |
Description |
|---|---|---|
|
integer |
Total count of Forms |
|
array |
Array of Forms |
For the rest of the properties, refer to Form properties.
Create Form
Creates a new Form.
<?php
$data = array(
'name' => 'Form created via API', // Required
'postActionProperty' => 'Thank you for your submission!', // Required
'fields' => array( // Required
array(
'label' => 'Email', // Required
'type' => 'text',
'alias' => 'email',
'mappedObject' => 'contact',
'mappedField' => 'email',
'isRequired' => true,
),
array(
'label' => 'Submit', // Required
'type' => 'button',
),
),
'actions' => array( // Required
array(
'properties' => array( // Required
'subject' => 'New form submission',
'message' => 'A new form submission has been received.',
'email' => 'admin@example.com'
),
'name' => 'Send notification',
'type' => 'email.send.lead',
),
),
'formType' => 'standalone',
'postAction' => 'message',
'description' => 'This is a test form created via API',
);
$form = $formApi->create($data);
HTTP request
POST /forms/new
POST parameters
Name |
Type |
Description |
|---|---|---|
|
string |
Required. Form name |
|
string |
Required. The data associated with the |
|
array |
Required. Array of Form Fields. Refer to the Field parameters table for available options |
|
array |
Required. Array of Form actions. Refer to the Action parameters table for available options |
|
string |
Type of the Form - |
|
string |
Action to perform after submission. Must be one of:
|
|
boolean |
Form publication status |
Field parameters
These parameters reside within the fields array.
Name |
Type |
Description |
|---|---|---|
|
string |
Required. Label displayed for the field |
|
string |
Type of field, such as |
|
string |
The object type that the field maps to - |
|
string |
The specific Contact or Company field that the Form Field maps to |
|
boolean |
Mandatory status for the field |
Action parameters
These parameters reside within the actions array.
Name |
Type |
Description |
|---|---|---|
|
array |
Required. The settings for the specific action type - for example, the Email ID or subject |
|
string |
Action name |
|
string |
Type of action, such as |
Response
Returns
201 Createdwhen the request successfully creates a Form.
The response is a JSON object similar to Get Form.
Properties
Refer to Form properties.
Edit Form
Edits a Form.
This operation supports PUT or PATCH depending on the desired behavior:
PUT: full replacement. The request creates a new Form if the ID is missing. If the ID exists, the request clears all existing data and replaces it with the provided values.PATCH: partial update. The request only updates field values based on the request data. The request fails when the Form ID doesn’t exist.
<?php
$id = 1;
$data = array(
'name' => 'Updated form name',
'description' => 'Updated description',
'fields' => array(
array(
'id' => 1, // Existing field
'label' => 'Updated Email Label',
'type' => 'text',
'alias' => 'email',
'mappedObject' => 'contact',
'mappedField' => 'email',
'isRequired' => true,
),
array(
'label' => 'First Name', // New field
'type' => 'text',
'alias' => 'first_name',
'mappedObject' => 'contact',
'mappedField' => 'firstname',
),
),
);
// Create a new Form if ID 1 isn't found
$createIfNotFound = true;
$form = $formApi->edit($id, $data, $createIfNotFound);
HTTP request
PUT /forms/ID/edit: updates an existing Form or creates a new one when the ID doesn’t exist.PATCH /forms/ID/edit: updates an existing Form. The request fails when the ID doesn’t exist.
POST parameters
Accepts the same parameters as those described in Create Form. All parameters are optional.
Response
PUT: returns200 OKwhen the request successfully updates the Form or201 Createdwhen the request creates a Form.PATCH: returns200 OKwhen the request successfully updates the Form or404 Not Founderror when the Form ID doesn’t exist.
The response is a JSON object similar to Get Form.
Properties
Refer to Form properties.
Delete Form
Deletes a Form.
<?php
$form = $formApi->delete($id);
HTTP request
DELETE /forms/ID/delete
Response
Returns
200 OKwhen the request successfully deletes the Form.
The response is a JSON object containing the data of the deleted Form, similar to Get Form.
Properties
Refer to Form properties.
Delete Form fields
Deletes specific fields from a Form.
<?php
$formApi->deleteFields($formId, array(1, 2, 3));
HTTP request
DELETE /forms/ID/fields/delete
Parameters
Name |
Type |
Description |
|---|---|---|
|
array |
Required. Array of Form Field IDs to delete |
Response
Returns
200 OKwhen the request successfully deletes the Form Fields.
The response is a JSON object containing the data of the deleted Form Fields, similar to Get Form.
Properties
Refer to Form properties.
Delete Form actions
Deletes specific actions from a Form.
<?php
$formApi->deleteActions($formId, array(1, 2));
HTTP request
DELETE /forms/ID/actions/delete
Parameters
Name |
Type |
Description |
|---|---|---|
|
array |
Required. Array of Form action IDs to delete |
Response
Returns
200 OKwhen the request successfully deletes the Form actions.
The response is a JSON object containing the data of the deleted Form actions, similar to Get Form.
Properties
Refer to Form properties.
Get Form submission
Get an individual submission for a specific Form.
<?php
$submission = $formApi->getSubmission($formId, $submissionId);
HTTP request
GET /forms/FORM_ID/submissions/SUBMISSION_ID
Response
Returns
200 OKwhen the request successfully retrieves the Form submission.
{
"submission": {
"id": 2,
"ipAddress": {
"ipAddress": "127.0.0.1"
},
"form": {
"id": 2,
"name": "Acme Global Conference Registration",
"alias": "acme_globa",
"category": {}
},
"lead": {
"id": 3,
"points": 0,
"color": null,
"title": null,
"firstname": "Jack",
"lastname": "Smith",
"company": "Beta Inc.",
"position": null,
"email": null,
"phone": null,
"mobile": null,
"address1": null,
"address2": null,
"city": null,
"state": null,
"zipcode": null,
"timezone": null,
"country": null
},
"trackingId": null,
"dateSubmitted": "2026-02-19T07:27:18+00:00",
"referer": "https://example.com/forms/2",
"page": null,
"results": {
"form_id": "2",
"topic_preference": "The Rising of Open Source",
"company_name": "Beta Inc.",
"availability": "2026-02-20",
"email": null,
"first_name": "Jack",
"last_name": "Smith"
}
}
}
Form submission properties
Name |
Type |
Description |
|---|---|---|
|
integer |
ID of the Form submission |
|
object |
Information about the IP address used for the submission |
|
object |
Information about the Form that received the submission |
|
object |
The Contact record associated with the submission |
|
string |
ID used for tracking the submission source |
|
datetime |
Date and time of the submission |
|
string |
The URL of the page where the User submitted the Form |
|
object |
The specific Mautic Landing Page where the submission occurred |
|
object |
The values submitted for each Form Field |
List Form submissions
Retrieves a list of submissions for a specific Form.
<?php
$submissions = $formApi->getSubmissions($formId, $searchFilter, $start, $limit, $orderBy, $orderByDir);
HTTP request
GET /forms/ID/submissions
Query parameters
Name |
Type |
Description |
|---|---|---|
|
string |
String or search command to filter entities |
|
integer |
Starting row for the returned entities - defaults to 0 |
|
integer |
Maximum number of entities to return - defaults to 30 |
|
string |
Column to sort by. Any column in the response is valid Note: convert |
|
string |
Order direction - |
Response
Returns
200 OKwhen the request successfully retrieves the Form submissions.
{
"total": "4",
"submissions": [
{
"id": 2,
"ipAddress": {
"ipAddress": "127.0.0.1"
},
"form": {
"id": 2,
"name": "Acme Global Conference Registration",
"alias": "acme_globa",
"category": {}
},
"lead": {
"id": 3,
"points": 0,
"color": null,
"title": null,
"firstname": "Jack",
"lastname": "Smith",
"company": "Beta Inc.",
"position": null,
"email": null,
"phone": null,
"mobile": null,
"address1": null,
"address2": null,
"city": null,
"state": null,
"zipcode": null,
"timezone": null,
"country": null
},
"trackingId": null,
"dateSubmitted": "2026-02-19T07:27:18+00:00",
"referer": "https://example.com/forms/2",
"page": null,
"results": {
"first_name": "Jack",
"last_name": "Smith",
"company_name": "Beta Inc.",
"availability": "2026-02-20",
"topic_preference": "The Rising of Open Source"
}
},
// ...
]
}
Properties
Name |
Type |
Description |
|---|---|---|
|
integer |
Total count of Form submissions |
|
array |
Array of Form submissions |
For the rest of the Form properties, refer to Form submission properties.
Get Contact Form submissions
Retrieves a Contact from a specific Form submission.
<?php
$submissions = $formApi->getContactSubmissions($formId, $contactId, $searchFilter, $start, $limit, $orderBy, $orderByDir);
HTTP request
GET /forms/FORM_ID/submissions/contact/CONTACT_ID
Query parameters
Name |
Type |
Description |
|---|---|---|
|
string |
String or search command to filter entities |
|
integer |
Starting row for the returned entities - defaults to 0 |
|
integer |
Maximum number of entities to return - defaults to 30 |
|
string |
Column to sort by. Any column in the response is valid. Note: convert |
|
string |
Order direction - |
Response
Returns
200 OKwhen the request successfully retrieves the Contact from the Form submission.
{
"total": "1",
"submissions": [
{
"id": 2,
"ipAddress": {
"ipAddress": "127.0.0.1"
},
"form": {
"id": 2,
"name": "Acme Global Conference Registration",
"alias": "acme_globa",
"category": {}
},
"lead": {
"id": 3,
"points": 0,
"color": null,
"title": null,
"firstname": "Jack",
"lastname": "Smith",
"company": "Beta Inc.",
"position": null,
"email": null,
"phone": null,
"mobile": null,
"address1": null,
"address2": null,
"city": null,
"state": null,
"zipcode": null,
"timezone": null,
"country": null
},
"trackingId": null,
"dateSubmitted": "2026-02-19T07:27:18+00:00",
"referer": "https://example.com/forms/2",
"page": null,
"results": {
"first_name": "Jack",
"last_name": "Smith",
"company_name": "Beta Inc.",
"availability": "2026-02-20",
"topic_preference": "The Rising of Open Source"
}
}
]
}
Properties
Name |
Type |
Description |
|---|---|---|
|
integer |
Total count of Form submissions |
|
array |
Array of Form submissions |
For the rest of the Form properties, refer to Form submission properties.
Form Field types
Mautic supports various Form Field types to collect and validate Contact data. Each field type serves a specific purpose during Form submission:
Field type |
Description |
Properties |
|---|---|---|
|
CAPTCHA field |
|
|
Checkbox group |
|
|
Company lookup |
None |
|
Date picker |
|
|
Date and time picker |
|
|
Description area |
|
|
Email input with validation |
|
|
File upload |
|
|
HTML area |
|
|
Hidden field |
None |
|
Number input |
|
|
Page break for multi-page Forms |
|
|
Password |
None |
|
Telephone input |
|
|
Radio group |
|
|
Country selection dropdown |
|
|
Dropdown selection |
|
|
Multi-line text input |
|
|
Single line text input |
|
|
URL input with validation |
|
|
Submit button |
None |
Form action types
Form actions execute specific tasks immediately after a Contact submits a Form. Mautic supports the following action types:
Action type |
Description |
Properties |
|---|---|---|
|
Add to Company’s score |
|
|
Adjust Contact’s Points |
|
|
Modify Contact’s Segments |
|
|
Modify Contact’s tags |
|
|
Record UTM Tags |
None |
|
Remove Contact from Do Not Contact list |
None |
|
Download an Asset |
|
|
Forwards submission results to an external URL or Form |
|
|
Push Contact to Integration |
|
|
Send Email to Contact |
|
|
Send Email to User |
|
|
Send Form results |
|
Progressive profiling
Progressive profiling collects more information from Contacts over time by showing different fields based on previous submissions. To enable progressive profiling:
Set
progressiveProfilingLimiton the FormConfigure fields with
showAfterXSubmissionspropertyUse
showWhenValueExiststo hide fields if a value already exists for that Contact
Conditional fields
Mautic shows fields conditionally based on other field values:
Set the
parentfield IDConfigure
conditionswith expression type -eq,neq,in, and!inSet
isConditionallyHiddento true
Mapped fields
Mautic can map Form Fields to Contact or Company fields:
Use
mappedObjectto specifycontactorcompanyUse
mappedFieldto specify the target field nameMautic still supports the deprecated
leadFieldproperty for backward compatibility